VideoView seekTo 0而不是特定位置

时间:2020-04-27 09:40:50

标签: android android-mediaplayer surfaceview android-videoview seek

我正在尝试从特定位置开始播放视频,但是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有所帮助或表现相同?

1 个答案:

答案 0 :(得分:0)

实际上,事实是,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

希望这会有所帮助。

相关问题