VideoView播放前黑屏解决方案

在项目中使用VideoView来加载视频,会发现在播放前屏幕会黑一下(时间长短取决于网络速度和手机加载资源速度),会使用户体验非常差。

首先来看一下为什么会出现黑屏的现象。视频本地播放前短暂黑屏,是由于VideoView加载资源需要一定的耗时,视频加载到视频渲染到屏幕这个过程也是需要时间的。如何避免播放前的黑屏现象呢,下面就通过一些方法来尝试着解决这个让人头疼的问题。

解决方法

给VideoView添加onPrepared的回调,通过调用setOnPreparedListener方法来设置。但是实验发现这样处理并不能完全解决问题。实际上onPrepared的回调只是告诉我们视频已经准备好了,却并没有真正开始渲染帧,所以这样处理依然会出现短暂黑屏的情况。

结合上面的结论,要解决这个问题,需要等到视频真正开始渲染后再去掉VideoView 的背景(前提需要在XML中设置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;  
                }  
            });  

最好是能够通过MediaMetadataRetriever获取视频第一帧图片设置VideoView背景,这样看起来更好些

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

然而,这个变量是在4.1版本才引入的,4.1之前的版本依然不支持。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,240评论 25 709
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 14,469评论 2 59
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,039评论 3 119
  • 想来文字这东西没有什么束缚。心中如何生意,即如何文字。正如这浮萍,无根亦自浮。所谓自浮并不是指其无水托起,...
    水月顽石阅读 2,523评论 0 1
  • 物理的学习是一个从零学起的过程,就如同领悟莫扎特的《安魂曲》、荷马的《奥德赛》、西斯廷礼拜堂的穹顶画、莎士比亚的《...
    YewNi阅读 4,977评论 0 1