最近需要做一个视频的循环播放,用于做一个机器的老化测试功能,路径是本地的一个视频,但是在播放一段时间之后会停止并且出现很抱歉,无法播放此视频的对话框。并不是开始就无法播放,而是开始可以正常播放,并且可以循环播放,但是在循环一段时间之后会出现问题。
我的代码是这样写的:
private void initVideoModule() {
if (logOn) {
Log.e(TAG, "start method mVideoModule.initVideoModule()");
}
topVideoView = (VideoView) findViewById(R.id.video_top);
}
@Override
public void startTest() {
// TODO Auto-generated method stub
if (logOn) {
Log.e(TAG, "start method mVideoModule.startTest()");
}
initVideoModule();
File file = new File("/system/etc/testvideo.mp4");
if(file.exists()){
Log.e("rainbow","testvideo is exists");
topVideoView.setVideoPath(file.getAbsolutePath());
}else{
Log.e("rainbow","testvideo is not exists");
}
topVideoView.start();
topVideoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.setLooping(true);
mp.setVolume(0.6f, 0.6f);
}
});
}
现在有一个问题就是:app可以正常启动并循环播放视频,但是当循环一段时间之后,就会停止,然后弹出对话框:很抱歉,无法播放此视频 。这个不是刚启动的时候就会出现,而是刚刚启动视频正常播放,并且能循环播放,但是循环一段时间之后出现的问题。
请问这个问题应该是出在了哪里?
还有如果把循环方法这样写:
topVideoView.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
topVideoView.start();
}
}
});
而不在setOnPreparedListener里边设定mp.setLooping(true);这个也能达到循环的效果,它们有什么区别?