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播放视频时遇到的大部分问题,提升用户体验。