3

我正在尝试在使用 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):尝试设置音频编码器而不先设置音频源”。文档说“如果不调用此方法,则输出文件将不包含音轨”。

我应该设置哪些参数以使文件大小尽可能小?

4

1 回答 1

3

弄清楚了。代码行...

mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW));

设置输出格式和视频编码器以及音频。删除该行代码并将视频编码器和输出格式设置为禁用音频(只需将音频内容保留)。这使您可以大大减少文件大小。

于 2013-03-10T20:48:51.627 回答