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

Android Studio中VideoView加载视频显示问号无法播放如何解决

VideoView加载raw视频显示问号无法播放的排查与修复

核心错误修复

你当前代码存在两个直接导致播放失败的显性问题:

  1. 资源URI拼写错误:你手动拼接的URI scheme写为android.resources://(resources为复数),Android系统raw资源的合法访问scheme是android.resource://(resource为单数,无末尾s),拼写错误会直接导致系统无法定位到视频文件,VideoView加载失败就会显示问号占位符。
  2. 缺少播放触发逻辑:仅设置URI和媒体控制器不会自动开始播放,需要等待资源准备完成后主动调用播放方法,或通过媒体控制器手动触发。

将原代码中设置URI的部分替换为如下代码即可解决显性错误:

public class MainActivity extends AppCompatActivity {
    VideoView videoView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        videoView=findViewById(R.id.video);

        MediaController mediaController= new MediaController(this);
        mediaController.setAnchorView(videoView); // 补全控制器锚点设置,避免控制器显示位置异常
        mediaController.setMediaPlayer(videoView);
        videoView.setMediaController(mediaController);
        // 修正URI拼写,不要手动拼接时写错scheme
        Uri videoUri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.animation);
        videoView.setVideoURI(videoUri);

        // 增加播放状态监听
        videoView.setOnPreparedListener(mp -> {
            // 资源准备完成后自动播放,不需要手动点控制器按钮
            videoView.start();
        });

        videoView.setOnErrorListener((mp, what, extra) -> {
            // 打印错误码定位深层问题:what=1代表视频格式不支持,what=-1004代表资源读取失败
            Log.e("VideoPlayError", "错误码what:"+what+" extra:"+extra);
            return false;
        });
    }

    @Override
    protected void onPause() {
        super.onPause();
        // 页面退到后台时暂停播放
        if (videoView != null && videoView.isPlaying()) {
            videoView.pause();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 页面销毁时释放播放器资源,避免内存泄漏
        if (videoView != null) {
            videoView.stopPlayback();
        }
    }
}

剩余排查点(如果修正上述代码后仍无法播放,按顺序检查)

  • 检查视频文件命名与存放路径
    视频文件必须放在res/raw目录下(没有该目录就手动新建),文件名只能包含小写字母、数字、下划线,不能有大写字母、中文、特殊符号,且不能以数字开头,否则R类生成的资源ID会映射异常,导致找不到文件。
  • 检查视频编码兼容性
    VideoView基于系统原生MediaPlayer实现,支持的编码格式受系统版本限制,优先将视频转码为H.264 Baseline Profile编码+AAC音频编码的MP4格式,不要使用webm、hevc、mkv等兼容性差的格式,否则会直接报格式不支持的错误。
  • 检查视频文件大小
    如果视频文件大小超过100MB,Android构建时会对raw目录下的大文件做压缩处理,导致文件损坏无法播放,大体积视频建议放到assets目录,或者推送到应用私有存储后再加载。
  • 检查布局配置
    确认布局文件中VideoView的id为video,宽高属性没有设置为0dp且无对应约束,测试阶段可以先给VideoView设置固定宽高(比如android:layout_width="300dp" android:layout_height="200dp"),排除布局尺寸异常导致的显示问题。

内容的提问来源于stack exchange,提问作者Waji ul hasnanin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:15:43