最近由于项目的需要,做了个用MediaRecorder录制视频;下面是我在做的过程中,碰到的几个问题,供参考,如果不对,欢迎留言指正!
MediaRecorder mRecorder = new MediaRecorder();
1、录制视频时,视频旋转了90度,添加下面代码解决问题;
mCamera = Camera.open(gDefaultCameraId);
Camera.Parameters params = mCamera.getParameters();
mCamera.setDisplayOrientation(90);// 旋转了90度
mCamera.setParameters(params);
mCamera.unlock();// 解锁
mRecorder.setCamera(mCamera);
gDefaultCameraId值的获得:
int gTotalCameraCount = Camera.getNumberOfCameras();
int gDefaultCameraId = 0;
// Find the ID of the default camera
CameraInfo cameraInfo = new CameraInfo();
for (int i = 0; i < gTotalCameraCount; i++) {
Camera.getCameraInfo(i, cameraInfo);
if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) {
gDefaultCameraId = i;
break;
}
}
2、录制完的视频手机上播放旋转了90度,添加下面代码解决问题;
mRecorder.setOrientationHint(90);
3、手机上播放没问题了,但是移到电脑上播放,视频还是旋转了90度;我的是这样改的:
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
// 这两项需要放在setOutputFormat之后
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
把上面3行代码删掉,换成下面代码:
CamcorderProfile cProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW); //中间参数看你项目需要视频什么样的品质,具体可以看源码;
mRecorder.setProfile(cProfile);
4、设置视频的帧速率大小,我自己还没解决,加了下面代码无效,如果有解决的欢迎留言;
mRecorder.setVideoFrameRate(20);
帧速率自己不好设置,设置了手机不一定按我们设置的速率去录,它是在自己的帧速率范围内变化的,个人觉得。
另外设置MediaRecorder 时,设置的先后顺序很重要,如果错了,会报错,具体的先后顺序,可以看官网的介绍。最后记得释放掉Camera和MediaRecorder。
如果还有什么问题,可以一起讨论!