1. 程式人生 > >完美解決VedioView載入視屏黑一下的問題

完美解決VedioView載入視屏黑一下的問題

       在app中需要使用vedioview來載入本地的視屏,但是會發現在播放視屏前會黑一下(時間的長短,取決於手機載入資源的速度),這樣在給使用者使用app的時候,體驗效果非常的差。

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

解決方法(本人親測有效)

給VideoView新增onPrepared的回撥,通過呼叫setOnPreparedListener方法來設定。但是實驗發現這樣處理並不能完全解決問題。實際上onPrepared的回撥只是告訴我們視訊已經準備好了,卻並沒有真正開始渲染幀,所以這樣處理依然會出現短暫黑屏的情況。

       結合上面的結論,要解決這個問題,需要等到視訊真正開始渲染後再去掉VideoView 的背景。最終的解決辦法是在onPrepared回撥中,加新增一個setOnInfoListener的監聽,在這個監聽中將VideoView的背景清除。具體修改如下:

  1. videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {  
  2.     @Override
  3.     publicvoid onPrepared(MediaPlayer mp) {  
  4.         mp.setOnInfoListener(new
     MediaPlayer.OnInfoListener() {  
  5.             @Override
  6.             publicboolean onInfo(MediaPlayer mp, int what, int extra) {  
  7.                 if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START)  
  8.                     videoView.setBackgroundColor(Color.TRANSPARENT);  
  9.                 returntrue
    ;  
  10.             }  
  11.         });  

       這段程式碼的關鍵是MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START這個變數,Android SDK中給出的註釋是:這個狀態表示展現了用於渲染的第一幀視訊,也就是這個時候才真正將視訊幀展示到了螢幕上。

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