Android(安卓)MediaRecorder 录制视频 start failed 的原因及解决方案
16lz
2021-01-26
如果你用 SurfaceView+MediaRecorder 录制视频,
录制开始一直报start failed
不妨这样试一下.
今天做录制视频,一直报错start failed 并额外报了mediaRecorder.prepare(); 这行代码错误.
一通改,发现没改好,最后破釜沉舟,把这两个方法分开try了一下,没想到竟然解决了问题
try { //开始录制 mediaRecorder.prepare(); } catch (Exception e) { LogUtils.loge("录制prepare()异常 " + e.getMessage()); e.printStackTrace(); } try { mediaRecorder.start(); } catch (Exception e) { LogUtils.loge("录制start()异常 " + e.getMessage()); e.printStackTrace(); }
解决方案2: (根源问题!复现率100%)
在录制前,我们需要设置camera的分辨率和录制的分辨率.
但是! 设置分辨率的时候值必须是设备支持的。如果设置了不支持的分辨率,运行时就会报错。
以下代码作用: 以预览的分辨率为基准,查找出最接近的视频录制分辨率(以宽度为准)
最后,把两个分辨率都设置成下面得出的结果, 就没问题了!
Camera.Parameters parameter=mCamera.getParameters(); List prviewSizeList = parameter.getSupportedPreviewSizes(); List videoSizeList = parameter.getSupportedVideoSizes(); parameter.setPreviewSize(prviewSizeList.get(0).width,prviewSizeList.get(0).height); //降序排列 Collections.sort(videoSizeList, new Comparator() { @Override public int compare(Camera.Size lhs, Camera.Size rhs) { if (lhs.width > rhs.width) { return -1; } else if (lhs.width == rhs.width) { return 0; } else { return 1; } } }); int index = 0; for(int i=0;i
更多相关文章
- android之基于Echart的图表
- android osmdroid 实现谷歌地图之定位 替换为其他
- android 使用xmpp smack openfire实现即时通讯(一)
- Android(安卓)5.0学习之定义阴影
- Activity伪造Dialog的时候不能全屏显示
- Android(安卓)Camera中无法回调PictureCallback接口onPictureTak
- Android中TextView文字设置不同的颜色
- 【Android】强大的SpannableStringBuilder
- 在Eclipse中设置Android模拟器屏幕大小