VideoView播放前黑屏解決方案

在項目中使用VideoView來加載視頻,會發(fā)現(xiàn)在播放前屏幕會黑一下(時間長短取決于網(wǎng)絡(luò)速度和手機(jī)加載資源速度),會使用戶體驗非常差。

首先來看一下為什么會出現(xiàn)黑屏的現(xiàn)象。視頻本地播放前短暫黑屏,是由于VideoView加載資源需要一定的耗時,視頻加載到視頻渲染到屏幕這個過程也是需要時間的。如何避免播放前的黑屏現(xiàn)象呢,下面就通過一些方法來嘗試著解決這個讓人頭疼的問題。

解決方法

給VideoView添加onPrepared的回調(diào),通過調(diào)用setOnPreparedListener方法來設(shè)置。但是實(shí)驗發(fā)現(xiàn)這樣處理并不能完全解決問題。實(shí)際上onPrepared的回調(diào)只是告訴我們視頻已經(jīng)準(zhǔn)備好了,卻并沒有真正開始渲染幀,所以這樣處理依然會出現(xiàn)短暫黑屏的情況。

結(jié)合上面的結(jié)論,要解決這個問題,需要等到視頻真正開始渲染后再去掉VideoView 的背景(前提需要在XML中設(shè)置VideoView的背景)。最終的解決辦法是在onPrepared回調(diào)中,加添加一個setOnInfoListener的監(jiān)聽,在這個監(jiān)聽中將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獲取視頻第一幀圖片設(shè)置VideoView背景,這樣看起來更好些

這段代碼的關(guān)鍵是MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START這個變量,Android SDK中給出的注釋是:這個狀態(tài)表示展現(xiàn)了用于渲染的第一幀視頻,也就是這個時候才真正將視頻幀展示到了屏幕上。

然而,這個變量是在4.1版本才引入的,4.1之前的版本依然不支持。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,076評論 25 708
  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,862評論 2 59
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AGI閱讀 16,003評論 3 119
  • 想來文字這東西沒有什么束縛。心中如何生意,即如何文字。正如這浮萍,無根亦自浮。所謂自浮并不是指其無水托起,...
    水月頑石閱讀 324評論 0 1
  • 物理的學(xué)習(xí)是一個從零學(xué)起的過程,就如同領(lǐng)悟莫扎特的《安魂曲》、荷馬的《奧德賽》、西斯廷禮拜堂的穹頂畫、莎士比亞的《...
    YewNi閱讀 1,238評論 0 1