我想在VideoView
获得错误后重复缓冲视频
我用下面的代码播放我的视频:
public void playVideo() {
if (!isAdded()) {
return;
}
try {
// Get the URL from String VideoURL
Uri video = Uri.parse("http://www.sample-videos.com/video/mp4/480/big_buck_bunny_480p_20mb.mp4");
videoView.setMediaController(new MediaController(
getActivity()));
videoView.setVideoURI(video);
} catch (Exception e) {
ApplicationClass.gLogger.out("Error Happened in initializing ");
e.printStackTrace();
}
videoView.requestFocus();
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
// Close the progress bar and play the video
public void onPrepared(MediaPlayer mp) {
videoView.start();
mp.setLooping(true);
}
});
videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {
//playVideo again;
if (i == MediaPlayer.MEDIA_ERROR_SERVER_DIED || i == MediaPlayer.MEDIA_ERROR_IO || i == MediaPlayer.MEDIA_ERROR_UNKNOWN) {
mediaPlayer.reset();
}
return true;
}
});
}
一切都很好,但是当我失去连接时,我的视频不循环了。
使用MediaPlayer.MEDIA_ERROR_IO
调用错误侦听器时。我想循环我的缓冲视频。
我在onError侦听器中尝试了什么?
再次调用playVideo()
方法
使用mediaPlayer.seekTo()
和mediaPlayer.start()
。
使用videoView.seekTo()
.
我在SO中搜索了很多,看到许多链接,但不适合我。
因为我们不能从VideoView中获取缓冲区数据,所以我不能将缓冲区数据保存到文件中并从中读取。
thanks in advance
<<p> //更新/strong>seek在videoView中不起作用,因为正如videoView的源代码中提到的,当我们调用seek方法时,下面的方法被调用:
private boolean isInPlaybackState() {
return (mMediaPlayer != null &&
mCurrentState != STATE_ERROR &&
mCurrentState != STATE_IDLE &&
mCurrentState != STATE_PREPARING);
}
作为mCurrentState
是STATE_ERROR
寻求不再工作,但我还不知道如何解决我的问题。
也许会有帮助:
textureView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
//it,s be called without isInPlaybackState()
mp.seekTo(second);
return false;
}
});
这只是建议如何绕过调用isInPlaybackState()
。