Anadroid MediaMetadataRetriever 报错

问题描述

在对一个视频获取第一帧图片的问题上,视频是存在的 地址也没错 ,报错IllegalArgumentException(版本Android 9)

clipboard.png

问题出现的环境背景及自己尝试过哪些方法

我查看了MediaMetadataRetriever源码

clipboard.png

path 为null 才会报这个,但是我肯定path是存在的

我尝试在设置数据源的时候加了个 new HashMap<String, String>()
setDataSource(uri,new HashMap<String, String>())

报错 java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA

相关代码

   if (uri != null) {
            MediaMetadataRetriever media = new MediaMetadataRetriever();
            if (Build.VERSION.SDK_INT >= 14) {
                Log.i("uri", "uri:" +uri);
                media.setDataSource(uri, new HashMap<String, String>());
            } else {
                media.setDataSource(uri);
            }
            bitmap = media.getFrameAtTime();
            ImageView image = (ImageView) this.findViewById(R.id.imageView);
            image.setImageBitmap(bitmap);
        } else {
            Log.i("uri", "uri:" + null);
        }

你期待的结果是什么?实际看到的错误信息又是什么?

我希望不用加 new HashMap<String, String>() 能够解决问题

阅读 6.2k
1 个回答

首先这个方法获取图片是耗时的,所以最好用子线程取。
其次,加header是网络的视频源才需要的,否则不需要。
最后,不是不存在才会报这个错,无法打开,文件损坏也会,所以你要检测权限。
// 伪代码
检测存储卡权限。
子线程处理
if 本地视频
media.setDataSource(uri);
else 网络视频
media.setDataSource(uri,new HashMap<String,String>());
bitmap = ..
bitmap传给UI线程。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题