MediaRecorder: start failed: -22报错的原因和解决方法

    今天在优化相机这块的时候,看了下系统相机的源码,copy了部分用MediaRecorder来进行录制的代码出来,调用start的时候一直抛异常:

MediaRecorder: start failed: -22

想了好久也不知道什么,浪费了很长时间之后去百度了一下MediaRecorder详细信息和用法,最后才发现问题出来了初始化MediaRecorder的时候的调用顺序上,MediaRecorder的API是有顺序的,不按顺序来就会抛异常,坑爹,特此记录一下。一般的API使用顺序为

        try {
        //要在实例化MediaRecorder之前就解锁好相机
        mCamera.unlock();
        mMediaRecorder = new MediaRecorder();
        //将相机设置给MediaRecorder
        mMediaRecorder.setCamera(mCamera);
        // 设置录制视频源和音频源
        mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
        // 设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4
        mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        // 设置录制的视频编码和音频编码
        mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        // 设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错
        mMediaRecorder.setVideoSize(1920, 1080);
        // 设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错
        mMediaRecorder.setVideoFrameRate(30);
        mMediaRecorder.setVideoEncodingBitRate(1024*1024*20);
        mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
        // 设置视频文件输出的路径
        mMediaRecorder.setOutputFile( "/sdcard/lllllll.mp4");
        //暂停住   在外面就可以调用start进行录制了
        mMediaRecorder.prepare();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    之前还遇到过MediaRecorder: start failed: -19的 这个错误是因为我们没在实例化MediaRecorder之前解锁相机导致





你可能感兴趣的:(笔记)