我有一个带有 VideoView 的应用程序,它将不断循环播放相同的视频,直到用户对设备(触摸屏等)进行操作为止。目前,我正在使用 OnCompletionListener() 在视频结束后重新启动视频。这在我测试过的每台设备上都能正常工作,除了 Samsung Replenish。
这是我的代码:
mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mVideoView.setVideoPath(file.getAbsolutePath());
mVideoView.start();
}
});
Replenish 发生的情况是视频一直播放一次,但之后再也没有开始播放,屏幕全黑(但背光灯仍然打开)。在我用完全相同的代码测试过的所有其他设备上,它都可以重复播放视频。有谁知道有关 Replenish 的任何具体信息可能会导致此错误?我认为也许将对 setVideoPath() 和 start() 的调用延迟 200-300 毫秒可能会有所帮助,但这没有任何影响。我在这里真的很茫然。
我在我的日志中看到这些消息:
ERROR/QCvdec(87): Omx Flush issued when vdec is not initialized yet.
ERROR/QCvdec(87): OMXCORE-SM:Recieved command DISABLE (2)
ERROR/QCvdec(87): Omx Flush issued when vdec is not initialized yet.
ERROR/QCvdec(87): OMXCORE-SM:Recieved command ENABLE (3)
但是这些日志在视频开始播放(第一次播放)和再次播放失败时都会发生。所以我不确定它们是否与我的问题有关
编辑:
我刚刚尝试将 mVideoView 设置为 null,然后在 setVideoPath() 之前使用 findViewById() 获取对它的新引用。我知道这会使 OnCompletionListener 的设置方式复杂化。但无论如何它都没有用,仍然是同样的黑屏。
编辑 2:
我开始注意到有时视频甚至没有在第一次开始播放。我第一次使用这两行来启动它:
mVideoView.setVideoPath(file.getAbsolutePath());
mVideoView.start();
它似乎开始比较稳定,但第一次播放时并不是 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,这会导致视频从默认监听器启动。
最佳答案
您是否尝试过在调用 .start() 之前准备好您的视频?
来自文档:http://developer.android.com/reference/android/media/MediaPlayer.html#prepare%28%29
带有 OnPreparedListener您可以在视频准备就绪后开始播放。
关于android - VideoView 循环播放视频 补充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7011534/