我使用VideoView循环播放一个小视频,所有这些都可以在仿真器上正常工作,但是当我将其部署到电视时,在第一个循环视频变为黑色后,声音仍然继续。这是代码:
wp_
The Emulator正在使用Android 6.0,电视是Sony Bravia和Android 6.0.1。 我使用SurfaceView而不是VideoView进行了测试 - 同样的事情发生了。
知道如何摆脱黑屏吗?
PS:有一个可行的解决方法 - 制作OnCompletionListener并在那里执行videoview.start() - 这样它循环,但循环之间存在一个难看的差距。答案 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而不是默认的。 设置起来有点困难,但这个问题没有出现在那里。