我将尝试使用MediaRecorder来减小视频文件的大小,因为我将通过网络流传视频。
这是我的代码:
private boolean prepareMediaRecorder(){
myCamera = getCameraInstance();
mediaRecorder = new MediaRecorder();
myCamera.unlock();
mediaRecorder.setCamera(myCamera);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW));
mediaRecorder.setOutputFile("/sdcard/myvideo.mp4");
mediaRecorder.setMaxDuration(60000); // Set max duration 60 sec.
mediaRecorder.setMaxFileSize(5000000); // Set max file size 5M
mediaRecorder.setPreviewDisplay(myCameraSurfaceView.getHolder().getSurface());
try {
mediaRecorder.prepare();
} catch (IllegalStateException e) {
releaseMediaRecorder();
return false;
} catch (IOException e) {
releaseMediaRecorder();
return false;
}
return true;
}
在代码行CamcorderProfile.QUALITY_LOW中似乎有显著的差异,但我所做的其他任何操作都没有影响。我尝试使用setVideoFrameRate和setCaptureRate来降低帧速率,但两者都没有影响(不确定两者之间的区别)。我尝试通过注释掉setAudioSource行来禁用音频源(我不需要音频),但会抛出错误,说“E/MediaRecorder(7934):尝试在未设置音频源的情况下设置音频编码器”。文档说:“如果不调用此方法,则输出文件将不包含音频轨道”。
为了保持文件大小尽可能小,应该设置哪些参数?