Android MediaRecorder 录制视频 start failed 的原因及解决方案

如果你用 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<Camera.Size> prviewSizeList = parameter.getSupportedPreviewSizes();
        List<Camera.Size> videoSizeList = parameter.getSupportedVideoSizes();
        parameter.setPreviewSize(prviewSizeList.get(0).width,prviewSizeList.get(0).height);
        //降序排列
        Collections.sort(videoSizeList, new Comparator<Camera.Size>() {
            @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<videoSizeList.size();i++){
            if(videoSizeList.get(i).width<prviewSizeList.get(0).width){
                index= i;
            }
        }
        Video_W = videoSizeList .get(index).width;
        Video_H = videoSizeList .get(index).height;

更多文章推荐:

        https://blog.csdn.net/qq_39731011/category_7565212.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=7565212&sharerefer=PC&sharesource=qq_39731011&sharefrom=from_linkicon-default.png?t=O83Ahttps://blog.csdn.net/qq_39731011/category_7565212.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=7565212&sharerefer=PC&sharesource=qq_39731011&sharefrom=from_link

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵星海(深海呐)

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值