MediaRecorder 调用前置摄像头录制视频崩溃

这里是我初始化MediaRecorder的代码

  mMediaRecorder = new MediaRecorder();
        mMediaRecorder.reset();
        mCamera.unlock();
        //创建录音文件
        String tmpDir = Environment.getExternalStorageDirectory().toString() + "/XZLFile/Media/";
        mRecorderFile = new File(tmpDir + "video.mp4");
        try {
            if (!mRecorderFile.getParentFile().exists()) mRecorderFile.getParentFile().mkdirs();
            mRecorderFile.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        mMediaRecorder.setCamera(mCamera);
        mMediaRecorder.setOrientationHint(90);
        //从麦克风采集
        mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        CamcorderProfile mCamcorderProfile = CamcorderProfile.get(Camera.CameraInfo.CAMERA_FACING_BACK, CamcorderProfile.QUALITY_HIGH);
   
        mMediaRecorder.setProfile(mCamcorderProfile);
  
        //设置录制视频的大小,其实Camera也必须要和这个比例相同,此处为了简单不做处理
        mMediaRecorder.setVideoSize(mCamcorderProfile.videoFrameWidth, mCamcorderProfile.videoFrameHeight);
//        //提高帧频率,录像模糊,花屏,绿屏可写上调试
//        mMediaRecorder.setVideoEncodingBitRate(mCamcorderProfile.videoFrameWidth * mCamcorderProfile.videoFrameHeight * 24 * 16);
//        mMediaRecorder.setVideoFrameRate(24);
        //所有android系统都支持的适中采样的频率
        mMediaRecorder.setAudioSamplingRate(44100);
        //设置文件录音的位置
        mMediaRecorder.setOutputFile(mRecorderFile.getAbsolutePath());
        //开始录音
        try {
            mMediaRecorder.prepare();
            mMediaRecorder.start();
        } catch (IOException e) {
            e.printStackTrace();
        }

按照需求,录制视频需要直接打开前置摄像头录制,所以在打开Camera,姿势改变一下:

  public static Camera getCameraInstance() {
        Camera c = null;
        try {
            c = Camera.open(); // attempt to get a Camera instance
        } catch (Exception e) {
            // Camera is not available (in use or does not exist)
        }
        return c; // returns null if camera is unavailable
    }

改为:

  public static Camera getCameraInstance() {
        Camera c = null;
        try {
            c = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); // attempt to get a Camera instance
        } catch (Exception e) {
            // Camera is not available (in use or does not exist)
        }
        return c; // returns null if camera is unavailable
    }

结果运行后,点击按钮开始录制视频崩溃,网上说,与setVideoSize有关,注掉就可以了,但是并没用,想想应该还是初始化MediaRecorder的问题,最后发现:

    CamcorderProfile mCamcorderProfile = CamcorderProfile.get(Camera.CameraInfo.CAMERA_FACING_BACK, CamcorderProfile.QUALITY_HIGH);

改为:

 CamcorderProfile mCamcorderProfile = CamcorderProfile.get(Camera.CameraInfo.CAMERA_FACING_FRONT, CamcorderProfile.QUALITY_HIGH);

简单意思就是,调用前置摄像头,这里就要设置Camera.CameraInfo.CAMERA_FACING_FRONT,如果是后置摄像头,这里就设置Camera.CameraInfo.CAMERA_FACING_BACK。对应起来。
改完之后,重新build,OK。

发布了19 篇原创文章 · 获赞 1 · 访问量 7659

猜你喜欢

转载自blog.csdn.net/jwg1988/article/details/104317710
今日推荐