完美解決VedioView載入視屏黑一下的問題
阿新 • • 發佈:2019-01-08
在app中需要使用vedioview來載入本地的視屏,但是會發現在播放視屏前會黑一下(時間的長短,取決於手機載入資源的速度),這樣在給使用者使用app的時候,體驗效果非常的差。
首先來看一下為什麼會出現黑屏的現象。視訊本地播放前短暫黑屏,是由於VideoView載入資源需要一定的耗時,視訊載入到視訊渲染到螢幕這個過程也是需要時間的。如何避免播放前的黑屏現象呢,下面就通過一些方法來嘗試著解決這個讓人頭疼的問題。
解決方法(本人親測有效)
給VideoView新增onPrepared的回撥,通過呼叫setOnPreparedListener方法來設定。但是實驗發現這樣處理並不能完全解決問題。實際上onPrepared的回撥只是告訴我們視訊已經準備好了,卻並沒有真正開始渲染幀,所以這樣處理依然會出現短暫黑屏的情況。
結合上面的結論,要解決這個問題,需要等到視訊真正開始渲染後再去掉VideoView 的背景。最終的解決辦法是在onPrepared回撥中,加新增一個setOnInfoListener的監聽,在這個監聽中將VideoView的背景清除。具體修改如下:
- videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
- @Override
- publicvoid onPrepared(MediaPlayer mp) {
-
mp.setOnInfoListener(new
- @Override
- publicboolean onInfo(MediaPlayer mp, int what, int extra) {
- if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START)
- videoView.setBackgroundColor(Color.TRANSPARENT);
-
returntrue
- }
- });
這段程式碼的關鍵是MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START這個變數,Android SDK中給出的註釋是:這個狀態表示展現了用於渲染的第一幀視訊,也就是這個時候才真正將視訊幀展示到了螢幕上。
然而,這個變數是在4.1版本才引入的,4.1之前的版本依然不支援。