用华为手机测试小视频功能,在调用小视频时,竟然崩溃了.
报错内容是
RuntimeException: setDataSource failed: status = 0xFFFFFFEA in setDataSource()
然后开始排查,找资料.以为是参数设置问题,和华为手机不兼容,毕竟在其他手机没事,当通过手机文件管理器检查文件时发现,本地文件是 0KB ,所以就定位到开始拍摄的方法,结果在调用 mMediaRecorder.start() 时,抛了异常,
java.lang.RuntimeException: start failed
针对这个异常开始百度谷歌,网上也有很多文章去写这个,有的说是录像参数设置导致的,也有的说是SDK版本导致的,经过各种实验并没有解决问题,最后改了下拍摄视频的分辨率从自动运算最优分辨率改为 640*480,结果就好了..... 好了....
临时将以前的方法更改了一下,问题就解决了,以后再具体查一下什么原因导致的
/**
* 获取手机相机所支持的分辨率,并取第二位的分辨率为拍摄分辨率
*
* @return
*/
private Camera.Size getOptimalSize(List<Camera.Size> sizes, int w, int h) {
Camera.Size optimalSize = sizes.get(sizes.size() > 1 ? 1 : 0);
/*
注释以下代码原因,在有些手机上, 如华为,
最佳分辨率拍摄会导致,拍摄失败
java.lang.RuntimeException: start failed
*/
// float targetRadio = h / (float) w;
// float optimalDif = Float.MAX_VALUE; //最匹配的比例
// int optimalMaxDif = Integer.MAX_VALUE;//最优的最大值差距
// for (Camera.Size size : sizes) {
// float newOptimal = size.width / (float) size.height;
// float newDiff = Math.abs(newOptimal - targetRadio);
// if (newDiff < optimalDif) { //更好的尺寸
// optimalDif = newDiff;
// optimalSize = size;
// optimalMaxDif = Math.abs(h - size.width);
// } else if (newDiff == optimalDif) {//更好的尺寸
// int newOptimalMaxDif = Math.abs(h - size.width);
// if (newOptimalMaxDif < optimalMaxDif) {
// optimalDif = newDiff;
// optimalSize = size;
// optimalMaxDif = newOptimalMaxDif;
// }
// }
// }
return optimalSize;
}
网友评论