You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 23:48:23