使用Camera+MediaReocrd实现相机录制小视频功能
在 VivoX21 UDA 机型上录像执行
mediaRecorder.start()
时**崩溃**
相同的代码, 暂时测试其他机型可以正常录制,没发现问题;
下面是部分点击按钮录像代码:
if (mediaRecorder == null) {
mediaRecorder = new MediaRecorder();
}
if (mParams == null) {
mParams = mCamera.getParameters();
}
List<String> focusModes = mParams.getSupportedFocusModes();
if (focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
mParams.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
}
mCamera.setParameters(mParams);
mCamera.unlock();
mediaRecorder.reset();
mediaRecorder.setCamera(mCamera);
if (needVoice) {
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
} else {
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
}
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
Camera.Size videoSize;
if (mParams.getSupportedVideoSizes() == null) {
videoSize = CameraParamUtil.getInstance().getPreviewSize(mParams.getSupportedPreviewSizes(), 400,
screenProp);
} else {
videoSize = CameraParamUtil.getInstance().getPreviewSize(mParams.getSupportedVideoSizes(), 400,
screenProp);
}
if (videoSize.width == videoSize.height) {
mediaRecorder.setVideoSize(preview_width, preview_height);
} else {
//_这里vivoX21 uda 匹配的videoSize 864*480_
mediaRecorder.setVideoSize(videoSize.width, videoSize.height);
}
if (SELECTED_CAMERA == CAMERA_FRONT_POSITION) {
//手机预览处理
if (cameraAngle == 270) {
//横屏
if (nowAngle == 0) {
mediaRecorder.setOrientationHint(180);
} else if (nowAngle == 270) {
mediaRecorder.setOrientationHint(270);
} else {
mediaRecorder.setOrientationHint(90);
}
} else {
if (nowAngle == 90) {
mediaRecorder.setOrientationHint(270);
} else if (nowAngle == 270) {
mediaRecorder.setOrientationHint(90);
} else {
mediaRecorder.setOrientationHint(nowAngle);
}
}
} else {
mediaRecorder.setOrientationHint(nowAngle);
}
mediaRecorder.setVideoEncodingBitRate(mediaQuality);
mediaRecorder.setPreviewDisplay(surface);
videoFileName = "video_" + System.currentTimeMillis() + ".mp4";
if (saveVideoPath.equals("")) {
saveVideoPath = Environment.getExternalStorageDirectory().getPath();
}
videoFileAbsPath = saveVideoPath + File.separator + videoFileName;
mediaRecorder.setOutputFile(videoFileAbsPath);
try {
mediaRecorder.prepare();
mediaRecorder.start(); //这行报错!!!!
isRecorder = true;
} catch (IllegalStateException e) {
e.printStackTrace();
Log.i(TAG, "startRecord IllegalStateException");
} catch (IOException e) {
e.printStackTrace();
Log.i(TAG, "startRecord IOException");
if (this.errorLisenter != null) {
this.errorLisenter.onError();
}
} catch (RuntimeException e) {
Log.i(TAG, "startRecord RuntimeException");
}