Android 在MediaRecorder中碰到的幾個常見的問題
最近由於專案的需要,做了個用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。
如果還有什麼問題,可以一起討論!