VideoView循环视频补充

时间:2011-08-10 13:26:52

标签: android android-videoview

我有一个带有VideoView的应用程序,可以反复循环播放相同的视频,直到用户对设备执行某些操作(触摸屏等)。目前我正在使用OnCompletionListener()在视频结束时重新启动视频。除了Samsung Replenish之外,这在我测试的每台设备上都能正常工作。

这是我的代码:

    mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        public void onCompletion(MediaPlayer mp) {
            mVideoView.setVideoPath(file.getAbsolutePath());
            mVideoView.start();
        }
    });

Replenish上发生的事情是视频一直播放一次,但之后再也没有开始,屏幕全黑(但背光仍然打开)。在我使用完全相同的代码进行测试的每一台设备上,它都重复了视频。有没有人知道有关可能导致此错误的补充的任何具体信息?我想可能会延迟对setVideoPath()的调用,而start()200-300ms可能对它有所帮助,但这没有任何影响。我真的很茫然。

我在日志中看到这些消息:

  

ERROR / QCvdec(87):当vdec尚未初始化时发出Omx Flush。

     

错误/ QCvdec(87):OMXCORE-SM:收到命令DISABLE(2)

     

ERROR / QCvdec(87):当vdec尚未初始化时发出Omx Flush。

     

错误/ QCvdec(87):OMXCORE-SM:接收命令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,这将导致视频从默认侦听器启动。

1 个答案:

答案 0 :(得分:3)

在致电.start()之前,您是否曾尝试准备()视频?

来自文档:http://developer.android.com/reference/android/media/MediaPlayer.html#prepare%28%29

使用OnPreparedListener,您可以在准备好后开始播放视频。