Android MediaPlayer seekTo 视频播放完毕后

Android MediaPlayer seekTo after video finished playing

我将 VideoView 与 MediaController 和 MediaPlayer 一起使用来播放 HLS 流(普通 mp4 文件不会出现此问题)。 当视频播放完毕并且我尝试使用搜索栏时,出现 logcat 错误:E/MediaPlayer: error (1, -1004) 和 activity 显示 无法播放此视频 对话框。我怎样才能防止这种情况发生?我已经尝试过像这样实现 MediaPlayer.OnCompletionListener 接口:

@Override
public void onCompletion(MediaPlayer mediaPlayer) {
    videoView.setVideoURI(Uri.parse(...));
    videoView.start();
    videoView.pause();
}

但是没用。

取决于您真正想做什么以及视频流的工作方式:

  1. 如果你想循环播放视频 - 因为你的 onCompletion() 有点试图这样做 - 你可以尝试使用 setLooping(true)

    [=26 的更简单的方法=]
  2. 最终您可以改进错误处理,例如:

    yourPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
        @Override
        public boolean onError(MediaPlayer mp, int what, int extra) {
            if (mp.isPlaying())
                mp.stop();
            mp.reset();
            mp.play();
            return true;
        }
    });
    

编辑:

  1. (经评论反馈)-如果不需要循环,但求:最终达到Android的MediaPlayer支持HLS(MPEG-TS)求的水平developer.android.com/guide/appendix/media-formats.html-说 'not seekable'... 可能在最近的 Android 中使用 NuPlayer,情况可能会更好。