Android视频录制应用程序的Frate Rate - 每秒大约需要30帧..!

时间:2012-10-21 08:21:59

标签: java android camera android-camera frame-rate

以下代码有助于捕获视频,但问题在于帧速率,因为我已经将帧速率定义为每秒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();
}

1 个答案:

答案 0 :(得分:0)

根据android文档

mrec.setVideoFrameRate(30);

可能无法正常工作,因为您希望它能够正常工作。如果您的设备无法每秒提供30帧,那么将会有一些内部裁剪,并且帧速率将设置为设备支持的最大帧速率。

另外,在实践中,我观察到,即使对于合法值,setVideoFrameRate()调用也不可靠,实际帧速率可能与传递给此函数的值不同。