用華為手機(jī)測試小視頻功能,在調(diào)用小視頻時(shí),竟然崩潰了.
報(bào)錯(cuò)內(nèi)容是
RuntimeException: setDataSource failed: status = 0xFFFFFFEA in setDataSource()
然后開始排查,找資料.以為是參數(shù)設(shè)置問題,和華為手機(jī)不兼容,畢竟在其他手機(jī)沒事,當(dāng)通過手機(jī)文件管理器檢查文件時(shí)發(fā)現(xiàn),本地文件是 0KB ,所以就定位到開始拍攝的方法,結(jié)果在調(diào)用 mMediaRecorder.start() 時(shí),拋了異常,
java.lang.RuntimeException: start failed

針對這個(gè)異常開始百度谷歌,網(wǎng)上也有很多文章去寫這個(gè),有的說是錄像參數(shù)設(shè)置導(dǎo)致的,也有的說是SDK版本導(dǎo)致的,經(jīng)過各種實(shí)驗(yàn)并沒有解決問題,最后改了下拍攝視頻的分辨率從自動(dòng)運(yùn)算最優(yōu)分辨率改為 640*480,結(jié)果就好了..... 好了....
臨時(shí)將以前的方法更改了一下,問題就解決了,以后再具體查一下什么原因?qū)е碌?/p>
/**
* 獲取手機(jī)相機(jī)所支持的分辨率,并取第二位的分辨率為拍攝分辨率
*
* @return
*/
private Camera.Size getOptimalSize(List<Camera.Size> sizes, int w, int h) {
Camera.Size optimalSize = sizes.get(sizes.size() > 1 ? 1 : 0);
/*
注釋以下代碼原因,在有些手機(jī)上, 如華為,
最佳分辨率拍攝會(huì)導(dǎo)致,拍攝失敗
java.lang.RuntimeException: start failed
*/
// float targetRadio = h / (float) w;
// float optimalDif = Float.MAX_VALUE; //最匹配的比例
// int optimalMaxDif = Integer.MAX_VALUE;//最優(yōu)的最大值差距
// 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;
}