Android使用VideoView播放MP4报Can't play this video错误如何解决
Android VideoView 播放raw资源报错解决方案
你当前手动拼接资源URI的写法存在兼容性问题,结合原生VideoView的播放限制,按以下顺序排查修复:
- 替换手动拼接URI的逻辑,不要手动用字符串拼接生成
android.resource类型的资源地址,改用系统Uri构造器生成,避免资源ID映射、路径转义异常:
// 替换原有path拼接、Uri.parse相关代码 val videoUri = Uri.Builder() .scheme("android.resource") .authority(activity?.packageName ?: return) .appendPath(R.raw.body_video.toString()) .build() // 不要在setVideoURI后立刻调用start,必须等播放器准备完成后再启动 videoView.setOnPreparedListener { videoView.start() } videoView.setVideoURI(videoUri)
- 检查raw资源命名规范:
res/raw下的视频文件名仅支持小写字母、数字、下划线,不能包含大写字母、横杠、空格或其他特殊字符,否则会出现R文件可正常引用、但实际加载时资源映射失败的问题。 - 验证视频编码兼容性:iOS端可正常播放不能证明文件符合Android原生播放要求,VideoView依赖设备硬件解码器,仅对以下编码提供全版本兼容:
- 视频编码:H.264 AVC(全版本兼容)、H.265 HEVC(仅Android 5.0及以上支持)
- 音频编码:AAC LC、MP3、Vorbis
如果视频采用AV1、VP9、杜比AC3/EAC3等未被普遍支持的编码,会直接触发播放失败,转码为H.264+AAC编码的MP4格式即可解决。
- 排查页面主题问题:如果承载VideoView的Activity使用了透明主题,在部分国产定制ROM上会出现Surface渲染初始化失败的问题,将页面主题替换为非透明主题即可修复。
兜底方案:以上排查都无效时,可将视频文件移至
assets目录,通过路径"file:///android_asset/body_video.mp4"加载,可绕过raw资源加载的部分系统bug。
内容的提问来源于stack exchange,提问作者jwarris91
相关产品推荐
相关产品推荐

