我正在尝试从特定位置开始播放视频,但VideoView的行为异常。当我运行这样的代码时
videoView.seekTo(2000)
int current = videoView.getCurrentPosition()
Log.e("Current Time", String.valueOf(current))
Log给我值0。应该给2000,因为这是当前位置。即使我实现onPreparedListener也不起作用(但是以不同的方式)。它显示适当的值(2000),但仍无法搜索视频。
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp)
{
videoView.getDuration();
videoView.seekTo(2000);
Log.e("Current: ", String.valueOf(videoView.getCurrentPosition()));
}
});
如何战斗?如果我要构建MediaPlayer + SurfaceView,它将与VideoView有所帮助或表现相同?
实际上,VideoView.seekTo()是MediaPlayer.seekTo()的包装。即使仍在执行实际搜索,该函数几乎立即返回。因此,您要等待通过MediaPlayer.OnSeekCompleteListener寻求完成。
但是,标准VideoView不支持OnSeekCompleteListener。
但是您可以复制和本地自定义VideoView类以自己添加此支持。
或者,您可以尝试这个
mVideoView.setOnPreparedListener(new MediaPlayer .OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setOnSeekCompleteListener(new OnSeekCompleteListener() {
@Override
public void onSeekComplete(MediaPlayer mp) {
Log.e("Current: ", String.valueOf(videoView.getCurrentPosition()));
}
});
}
});
videoView.seekTo(2000); //or wherever the call is to be made
希望这会有所帮助。