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

Android VideoView 评论 1 大约 805 字

解决办法

视频真正开始渲染后再去掉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之前的版本依然不支持,好在旧版本的机器占比已经很少。

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

————        END        ————

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

扫描二维码关注我
昵称:
  • helloword 1楼
    这个办法不行
    Chrome | Windows 10 2021-07-30
随便看看 换一批