Android VideoView播放本地视频短暂黑屏的解决方法

AndroidVideoView大约 824 字

解决办法

视频真正开始渲染后再去掉VideoView 的背景。

最终的解决办法是在onPrepared回调中,加添加一个setOnInfoListener的监听,在这个监听中将VideoView的背景清除。

具体修改如下:

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.setOnInfoListener(new MediaPlayer.OnInfoListener() {
            @Override
            public boolean onInfo(MediaPlayer mp, int what, int extra) {
                if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
                    videoView.setBackgroundColor(Color.TRANSPARENT);
                }
                return true;
            }
        });
    }
});

这段代码的关键是MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START这个变量,Android SDK中给出的注释是:这个状态表示展现了用于渲染的第一帧视频,也就是这个时候才真正将视频帧展示到了屏幕上。

然而,这个变量是在4.1版本才引入的,4.1之前的版本依然不支持。4.1之前的版本,只能暂时通过方法三来优化,好在旧版本的机器占比已经很少。

阅读 1104 · 发布于 2019-04-11

————        END        ————

扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看换一批