2012-10-21 18 views
0

以下是有助于捕捉视频的第th代码,但问题与帧速率有关,因为我已经将帧速率定义为每秒30帧。当记录使用前置摄像头的视频其给出每秒和背部摄像头为800帧的输出也给最多15到18帧安卓视频录制应用程序的Frate Rate - 需要大约每秒30帧..!

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(); 
} 

回答

0

根据Android文档

mrec.setVideoFrameRate(30); 

可能不是你的工作期待它的工作。如果您的设备无法为您提供每秒30帧的帧数,则会出现一些内部削波,帧速率将设置为设备支持的最大帧速率。

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

+0

我同意u'mrec.setVideoFrameRate(30);'不起作用。然后在surfaceCreated()函数中添加下面的代码。 '参数p = mCamera.getParameters(); \t p.setPreviewFrameRate(29); \t p.setPreviewFpsRange(24000,29000); \t p.setPreviewSize(640,480); \t mCamera.setParameters(p);' 这工作正常在android 2.3.3,但应用程序在以上版本崩溃。 !任何想法 ?? –

+0

姜饼版后,访问摄像头的方式是通过不同的API。在你的代码中,你应该检查内置版本是姜饼还是更高,并使用单独的机制访问摄像机。有关某些代码,请参阅http://digitaldumptruck.jotabout.com/?p=797。 –