VideoView seekTo 0而不是特定位置

问题描述 投票:0回答:1

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

android android-mediaplayer surfaceview android-videoview seek
1个回答
2
投票

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

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.