这里是我初始化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。