我想在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()
。
我搜索了很多东西,看到很多链接,但没有为我工作。
因为我们无法从VideoView获取缓冲区数据,所以我无法将缓冲区数据保存到文件中并从中读取。
提前致谢
//更新
寻求不在videoView中工作,因为在VideoView提到的源代码中,当我们调用seek方法时,调用以下方法:
private boolean isInPlaybackState() {
return (mMediaPlayer != null &&
mCurrentState != STATE_ERROR &&
mCurrentState != STATE_IDLE &&
mCurrentState != STATE_PREPARING);
}
因为mCurrentState
STATE_ERROR
不再寻求工作,但我无法弄清楚如何解决我的问题。
答案 0 :(得分:1)
也许它会有所帮助:
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()
。