我有一个VideoView应用程序,它会一直循环播放相同的视频,直到用户对设备执行某些操作(触摸屏等)当前我正在使用OnCompletionListener()来重新启动视频一旦结束。这适用于我测试过的每个设备,除了三星补货。VideoView循环视频补充
这里是我的代码:
mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mVideoView.setVideoPath(file.getAbsolutePath());
mVideoView.start();
}
});
在补货,会发生什么是视频播放一路走过一次,但然后永远不会再次启动,屏幕会全黑(但背光仍然打开)。在我使用完全相同的代码测试过的每个其他设备上,它都能够重复播放视频。有谁知道任何具体的补充可能会导致此错误?我想可能延迟了setVideoPath()的调用,并且启动()200到300ms可能会有所帮助,但这没有任何影响。我在这里真的很茫然。
我看到在我记录这些消息:
ERROR/QCvdec(87):OMX冲洗时VDEC尚未初始化发出。
ERROR/QCvdec(87):OMXCORE-SM:收到命令DISABLE(2)
ERROR/QCvdec(87):OMX冲洗时VDEC尚未初始化发出。
ERROR/QCvdec(87):OMXCORE-SM:收到命令ENABLE(3)
但是,这些日志发生既当视频开始(第一次它起着),并且当无法启动再次。所以我不知道,如果他们都跟我的问题
编辑:
我只是试图设置mVideoView为空,然后setVideoPath前右侧获得一个新的参考其与findViewById()()。我知道这会使OnCompletionListener的设置复杂化。但无论如何它仍然无法工作,仍然是同一个黑屏。
编辑2:
我开始注意到,有时视频甚至不启动的第一次。我使用这些相同的两行启动它的第一次:
mVideoView.setVideoPath(file.getAbsolutePath());
mVideoView.start();
它似乎更consistantly开始,但其第一次被播放时不太100%。
编辑3:这是我现在设置的方式。我手动设置OnPreparedListener为我启动视频。所以我说这对我的onCreate()
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer arg0) {
mVideoView.start();
}
});
后来,当我准备重新启动视频我就叫只有setVideoPath()方法,就像这样:
mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mVideoView.setVideoPath(file.getAbsolutePath());
}
});
这似乎是在做诀窍。我让它运行一段时间来确定,但肯定。
编辑4:
@MByD在用于VideoView setVideoPath()的代码是用于setVideoUri一个包装()。 setVideoURI()设置为mStartWhenPrepared = false;
默认的OnPreparedListener检查此开关以决定是否开始播放。这就是为什么它不以默认监听器开始。我没有更多地关注它,但可能有一个setter方法让我将mStartWhenPrepared值更改为true,这会导致视频从默认侦听器启动。
有趣的问题。 – PedroAGSantos