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の両方を使用してフレームレートを下げようとしましたが、どちらも影響はありません(2つの違いはわかりません)。setAudioSource行をコメントアウトしてオーディオソースを無効にしようとしましたが、「E / MediaRecorder(7934):最初にオーディオソースを設定せずにオーディオエンコーダーを設定してみてください」というエラーがスローされます。ドキュメントには、「このメソッドが呼び出されない場合、出力ファイルにはオーディオトラックが含まれません」と記載されています。

ファイルサイズをできるだけ小さくするには、どのパラメータを設定する必要がありますか?

4

1 に答える 1

3

理解した。コードの行...

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

出力フォーマットとビデオエンコーダー、およびオーディオを設定します。そのコード行を削除し、ビデオエンコーダーと出力形式を設定してオーディオを無効にします(オーディオは省略します)。これにより、ファイルサイズを大幅に削減できます。

于 2013-03-10T20:48:51.627 に答える