0

以下はビデオのキャプチャに役立つコードですが、フレームレートを30フレーム/秒に定義しているため、問題はフレームレートにあります。フロントカメラを使用してビデオを録画すると、毎秒8フレームの出力が得られ、バックカメラを使用すると、最大15〜18フレームの出力が得られます。

private void startRecording() {

    if(mrec != null){
        mrec.reset();   
    }

    mCamera.unlock();
    mrec.setCamera(mCamera);
    mrec.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
    mrec.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
    mrec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mrec.setVideoSize(640, 480);
    mrec.setVideoEncodingBitRate(3000000);
    mrec.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    mrec.setVideoEncoder(MediaRecorder.VideoEncoder.H264);// MPEG_4_SP

    File dir = new File(SdCardPath + Directory);
    if (!dir.exists()) {
        if (dir.mkdir()) {
            Log.v(STORAGE_SERVICE, "Created directory");
        } else {
            Log.v(STORAGE_SERVICE, "Failed to create Directory");
        }
    }

    FullFilePath = SdCardPath + Directory + RecordFileName;

    mrec.setOutputFile(FullFilePath);
    mrec.setVideoFrameRate(30);
    mrec.setPreviewDisplay(surfaceHolder.getSurface());
    try {
        mrec.prepare();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    mrec.start();
}
4

1 に答える 1

0

アンドロイドのドキュメントによると

mrec.setVideoFrameRate(30);

期待どおりに機能しない可能性があります。デバイスが毎秒30フレームを提供できない場合は、内部クリッピングが発生し、フレームレートはデバイスがサポートする最大フレームレートに設定されます。

また、実際には、正当な値であっても、setVideoFrameRate()呼び出しは信頼できず、実際のフレームレートはこの関数に渡す値と異なる場合があることを確認しました。

于 2012-10-24T07:21:24.170 に答える