上述代码在手机设置为横屏时并没有问题,在设置为竖屏时,为获得最优的预览尺寸,需要在调用此方法前比较SurfaceView的宽高。
if (mSupportedPreviewSizes != null) {
mPreviewSize = getOptimalPreviewSize(mSupportedPreviewSizes,
Math.max(width, height), Math.min(width, height));
}
获得与当前SurfaceView匹配的预览尺寸后,即可通过Camera.Parameters进行设置。
Camera.Parameters mParams = mCamera.getParameters();
mParams.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
mCamera.setDisplayOrientation(90);
List<String> focusModes = mParams.getSupportedFocusModes();
if(focusModes.contains("continuous-video")){
mParams.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
}
mCamera.setParameters(mParams);
三、视频清晰度及文件大小
在第一节中讲到startRecordVideo,包括配置MediaRecorder,准备MediaRecorder以及启动,其中配置MediaRecorder是视频录制的重点,需要了解每项配置参数的作用,根据业务场景灵活配置。这里参考Google官方的示例给出一个可行的配置方案,然后再对其进行解释。
private void configureMediaRecorder() {
// BEGIN_INCLUDE (configure_media_recorder)
mMediaRecorder = new MediaRecorder();
// Step 1: Unlock and set camera to MediaRecorder
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setOrientationHint(90);
// Step 2: Set sources
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_RECOGNITION);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// Step 3: Set a Camera Parameters
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
/* Fixed video Size: 640 * 480*/
mMediaRecorder.setVideoSize(640, 480);
/* Encoding bit rate: 1 * 1024 * 1024*/
mMediaRecorder.setVideoEncodingBitRate(1 * 1024 * 1024);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
// Step 4: Set output file
mMediaRecorder.setMaxFileSize(maxFileSizeInBytes);
mMediaRecorder.setOutputFile(videoFilePath);
// END_INCLUDE (configure_media_recorder)
// Set MediaRecorder ErrorListener
mMediaRecorder.setOnErrorListener(this);
}










