问题描述
在对一个视频获取第一帧图片的问题上,视频是存在的 地址也没错 ,报错IllegalArgumentException(版本Android 9)
问题出现的环境背景及自己尝试过哪些方法
我查看了MediaMetadataRetriever源码
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>() 能够解决问题
首先这个方法获取图片是耗时的,所以最好用子线程取。
其次,加header是网络的视频源才需要的,否则不需要。
最后,不是不存在才会报这个错,无法打开,文件损坏也会,所以你要检测权限。
// 伪代码
检测存储卡权限。
子线程处理
if 本地视频
media.setDataSource(uri);
else 网络视频
media.setDataSource(uri,new HashMap<String,String>());
bitmap = ..
bitmap传给UI线程。