Android Studio中VideoView播放raw目录视频报错:无法播放此视频
VideoView播放raw目录视频提示“无法播放此视频”的解决办法
在Android Studio中使用VideoView播放raw目录下的视频时,模拟器提示“can't play this video”(无法播放此视频),相关代码及错误截图如下,且已尝试常规解决方案仍未解决:

布局代码(activity_main.xml)
<VideoView android:id="@+id/testView" android:layout_width="wrap_content" android:layout_height="308dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.574"/>
逻辑代码(MainActivity.kt)
package com.example.video_player import android.net.Uri import android.net.Uri.* import android.widget.MediaController import android.widget.VideoView import androidx.appcompat.app.AppCompatActivity import android.os.Bundle class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val videoView = findViewById<VideoView>(R.id.testView); //Creating Media Controller val mediaController = MediaController(this) mediaController.setAnchorView(videoView) //specify the location of media file val uri:Uri = parse( "android.resources://" + packageName + "/raw/test" ) //Setting MediaController and URI, then starting the videoView videoView.setMediaController(mediaController) videoView.setVideoURI(uri) videoView.requestFocus() videoView.start() } }
可行解决方向
1. 校验视频格式与编码兼容性
VideoView仅支持MP4(H.264视频编码+AAC音频编码)、3GP等标准格式,非标准编码或MKV、AVI等格式会直接无法播放。
- 用格式工厂等工具将视频转码为H.264+AAC编码的MP4格式,再放入raw目录。
2. 修正资源URI生成方式
当前URI拼接可能存在隐性问题,替换为更可靠的写法:
// 方式1:通过资源ID生成URI val uri = Uri.parse("android.resource://$packageName/${R.raw.test}") // 方式2:直接传入资源路径 videoView.setVideoPath("android.resource://$packageName/${R.raw.test}")
3. 检查视频文件命名与存放
- 视频文件名只能包含小写字母、数字、下划线,不能有大写、空格或特殊字符(比如
test.mp4不能写成Test_Video.mp4)。 - 确认文件存放在
res/raw目录下,且Android Studio已正确识别该文件(可在Project视图中查看)。
4. 添加错误监听定位根源
给VideoView添加错误监听器,获取具体错误码排查问题:
videoView.setOnErrorListener { mp, what, extra -> Log.e("VideoError", "错误码:$what,额外信息:$extra") true }
根据错误码查询Android官方文档,可明确是格式不支持、文件损坏还是其他系统层面问题。
5. 排除设备兼容性问题
- 改用真机测试,部分旧版本模拟器对编码支持存在缺陷。
- 更换不同系统版本、不同型号的模拟器重试。
内容的提问来源于stack exchange,提问作者Kiran Jadhav
相关产品推荐
相关产品推荐

