MediaRecorder使用

MediaRecorder用于录像录音。

1、使用到的权限

	
	
	
	
	
	
	

2、以下是关于录制视频的调用

 mediaRecorder = new MediaRecorder(); // 创建
        mediaRecorder.reset(); // 设置为空闲模式 可以赋属性了
        mediaRecorder.setCamera(mCamera);// 设置一个摄像头用于录制。
        mediaRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {
            @Override
            public void onError(MediaRecorder mr, int what, int extra) {
                try {
                    if (mediaRecorder != null) {
                        mediaRecorder.reset();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        //  记录录制时出现的错误的监听器,调用reset();方法设置为空闲模式

        // 使用SurfaceView预览
        mediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());

        // 1.设置采集声音
        // mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        // 设置采集图像
        mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        // 2.设置视频,音频的输出格式 mp4
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
        // 3.设置音频的编码格式
        // mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        // 设置图像的编码格式
        mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        // 音频一秒钟包含多少数据位
        CamcorderProfile mProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_480P);
        mediaRecorder.setAudioEncodingBitRate(44100);
        if (mProfile.videoBitRate > 2 * 1024 * 1024)
            mediaRecorder.setVideoEncodingBitRate(2 * 1024 * 1024);
        else
            mediaRecorder.setVideoEncodingBitRate(1024 * 1024);
        mediaRecorder.setVideoFrameRate(mProfile.videoFrameRate);

        // 设置选择角度,顺时针方向,因为默认是逆向90度的,这样图像就是正常显示了,这里设置的是观看保存后的视频的角度
        // mediaRecorder.setOrientationHint(90);
        if (bBack) {
            //如果是后置摄像头:
            mediaRecorder.setOrientationHint(90);
        } else {
            // 如果是前置摄像头:
            mediaRecorder.setOrientationHint(270);
        }
        // 设置录像的分辨率
        mediaRecorder.setVideoSize(352, 288);
        // 储存 文件地址
        mediaRecorder.setOutputFile(mVecordFile.getAbsolutePath());
try {
                // 开始录制
                mediaRecorder.prepare();
                mediaRecorder.start();

            } catch (IOException e) {
                e.printStackTrace();
            }
			

3、视频停止录制

			 //下面三个参数必须加,不加的话会奔溃,在mediarecorder.stop();
            //报错为:RuntimeException:stop failed
            mediaRecorder.setOnErrorListener(null);
            mediaRecorder.setOnInfoListener(null);
            mediaRecorder.setPreviewDisplay(null);

            // 停止录制
            mediaRecorder.stop();
            mediaRecorder.reset();
            // 释放资源
            mediaRecorder.release();
            mediaRecorder = null;

4、使用时注意需注意的点

  • 1、在使用时需要调用相机权限,但是通过权限申请调用时拒绝了相机权限,部分手机上还是返回相机权限申请成功,因此判断相机权限是否有我们加了以下方法
	public boolean isCameraUseable() {
			        boolean canUse = true;
			        Camera mCamera = null;
			        try {
			            mCamera = Camera.open();
			            Camera.Parameters mParameters = mCamera.getParameters();
			            mCamera.setParameters(mParameters);
			        } catch (Exception e) {
			            canUse = false;
			        }
			        if (mCamera != null) {
			            mCamera.release();
			        }
			        return canUse;
			    }
  • 2、因为我们做了视频录制和删除,在判断视频过段时,会删除录制的视频,发现一个小坑,因为我们是在点击开始录制时才开始初始化mediaRecorder,发现有部分用户刚点击了就停止,因此还未开始录制,部分低版本手机mediarecorder还未初始化完成,因此在调用stop方法时会显示Fatal Exception: java.lang.RuntimeException
    stop failed. 测试发现初始化发现最多需要300毫秒,可以更具其判断,也可更具录制的视频时间来进行判断
  • 3、页面销毁时别忘记释放资源

你可能感兴趣的:(MediaRecorder)