我正在尝试在使用 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):尝试设置音频编码器而不先设置音频源”。文档说“如果不调用此方法,则输出文件将不包含音轨”。
我应该设置哪些参数以使文件大小尽可能小?