VideoView循环在第一个循环后显示黑屏

时间:2017-11-28 21:46:43

标签: android android-videoview

我使用VideoView循环播放一个小视频,所有这些都可以在仿真器上正常工作,但是当我将其部署到电视时,在第一个循环视频变为黑色后,声音仍然继续。这是代码:

wp_

The Emulator正在使用Android 6.0,电视是Sony Bravia和Android 6.0.1。 我使用SurfaceView而不是VideoView进行了测试 - 同样的事情发生了。

知道如何摆脱黑屏吗?

PS:有一个可行的解决方法 - 制作OnCompletionListener并在那里执行videoview.start() - 这样它循环,但循环之间存在一个难看的差距。

4 个答案:

答案 0 :(得分:2)

尝试使用此类处理程序设置VideoView

   videoview.setBackgroundColor(Color.WHITE); //color what you want as background
   videoview.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        videoview.setVideoURI(videoUri);
                    }
                }, 100);
    videoview.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        vv.setBackgroundColor(Color.TRANSPARENT);
                    }
                }, 300);
                videoview.requestFocus();
                videoview.start();

    videoview.setOnPreparedListener(new MediaPlayer.OnPreparedListener()            {            @Override
        public void onPrepared(MediaPlayer mp) {
            mp.setLooping(true);

        }
    });

答案 1 :(得分:1)

我已经查看了VideoView的源代码,我想指出的第一件事就是在setVideoURI()方法中创建MediaPlayer对象,以及{{1}将被设置。

您的错误是您在MediaPlayer可能已经准备好视频后设置OnPreparedListener,因此永远不会在您之后设置的侦听器中调用onPrepared,这意味着OnPreparedListener可能永远不会在setLooping(true)上设置。

TL; DR:

MediaPlayer放在videoview.setVideoURI(uri);之后。

videoview.setOnPreparedListener()应该在videoview.start()之后。完成后,它应该在没有额外输入的情况下重新开始,因为这个时间setVideoURI()已正确设置并将被执行。在初始版本之后不需要mp.setLooping(true);

答案 2 :(得分:1)

只需使用此mVideoView.setZOrderOnTop(true);,它就不会在视图显示时显示黑屏。

答案 3 :(得分:0)

我实际上最终使用的是ExoPlayer而不是默认的。 设置起来有点困难,但这个问题没有出现在那里。