Android VideoView在播放視頻時可能會遇到多種問題,以下是一些常見的問題及其解決方案:
常見播放問題
- 視頻播放時短暫黑屏:視頻文件加載到內存中需要時間,導致短暫黑屏。
- 進入有VideoView界面的Activity時閃黑屏:可能是窗口問題。
- 當前界面有視頻播放時切換到其他界面再回來VideoView展示全黑:VideoView被回收,未處理狀態保存。
- 在類似微信列表頁視頻播放點擊大圖播放時列表的VideoView回出現在大圖VideoView之上:SurfaceView默認出現在最頂部。
- VideoView嵌套ViewPager使用時滑動出現透明:ViewPager執行
onPageSelected
方法時當前界面還是展示兩個View。
- 使用VideoView造成界面其他組件焦點產生“遺失”:在
ViewTreeObserver.addOnPreDrawListener
添加新的OnPreDrawListener
的onPreDraw
多次執行。
- 播放視頻格式不支持:VideoView只支持3gp、mp4、m4v、m3u8、ts等格式。
- 播放視頻時報錯error(100, 0):可能是視頻文件不存在、格式不支持、編碼不正確等原因。
解決方案
- 解決視頻播放時短暫黑屏:
- 添加
MediaPlayer.OnPreparedListener
監聽事件,在onPrepared
方法回調中播放視頻。
- 使用
SystemClock.sleep(200);
在start()
方法后延遲幾毫秒。
- 解決進入有VideoView界面的Activity時閃黑屏:
- 在整個界面創建之前添加代碼
getWindow().setFormat(PixelFormat.TRANSPARENT);
。
- 解決當前界面有視頻播放時切換到其他界面再回來VideoView展示全黑:
- 在VideoView所在的Activity或者Fragment的生命周期中處理VideoView視頻播放和暫停。
- 解決在類似微信列表頁視頻播放點擊大圖播放時列表的VideoView回出現在大圖VideoView之上:
- 解決VideoView嵌套ViewPager使用時滑動出現透明:
- 定義ViewPager的
OnPageChangeListener
接口,覆蓋onPageSelected
方法。
- 解決使用VideoView造成界面其他組件焦點產生“遺失”:
- 使用SurfaceView+MediaPlayer自定義播放器。
- 解決播放視頻格式不支持:
- 使用MediaPlayer來播放視頻,它支持更多的視頻格式。
- 解決播放視頻時報錯error(100, 0):
其他注意事項
- 在使用VideoView時,還需要注意視頻文件的編碼、碼率、分辨率、幀率、音頻編碼、音頻碼率、音頻采樣率和音頻聲道等參數,確保它們符合Android系統的支持范圍。
通過上述方法,可以有效地解決Android VideoView播放視頻時遇到的大部分問題,提升用戶體驗。