2011-08-15 55 views
4

我使用下面的代碼來捕捉視頻並保存到我的應用程序的文件夾:AVCaptureMovieFileOutput - 它是如何保存視頻

 AVCaptureDeviceInput *captureInput = [AVCaptureDeviceInput deviceInputWithDevice:[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo] error:NULL]; 

    m_captureFileOutput = [[AVCaptureMovieFileOutput alloc] init]; 


    captureSession = [[AVCaptureSession alloc] init]; 

    [captureSession addInput:captureInput]; 
    [captureSession addOutput:m_captureFileOutput]; 

    [captureSession beginConfiguration]; 
    [captureSession setSessionPreset:AVCaptureSessionPresetHigh]; 
    [captureSession commitConfiguration]; 


    [captureSession startRunning]; 

...some function that starts the recording process... 

    [m_captureFileOutput startRecordingToOutputFileURL:url recordingDelegate:self]; 

...some function that ends the recording process... 

    [m_captureFileOutput stopRecording]; 

美中不足的是,我的目標是能夠記錄多達每次9小時的視頻。實際上,使用這種方法錄製這種尺寸的視頻是可行的嗎?在調用[m_captureFileOutput stopRecording];之後,AVCaptureMovieFileOutput是否將視頻編碼並實時保存到磁盤,因爲它從相機接收幀,或者是在處理之前將整個視頻緩存在RAM中?

如果這種方法不適合錄製如此長時間的視頻,那麼有什麼合理的選擇?

謝謝, 詹姆斯

回答

4

非常確信AVCaptureMovieFileOutput追加到文件並在內存中緩存不使用(也許它,但它也變得太大之前刷新到該文件)......一些證據這可以在movieFragmentInterval屬性here中看到。我也用這種方法記錄到一個大文件的文件,並且它工作正常,如果它將文件保存在內存中,在某些預設下很快就會耗盡內存(例如1280x720)

+0

感謝您的回答Daniel。那麼基於此,錄製時間的唯一限制是可用存儲空間? – James

+0

我相信所以...不應該太難以嘗試 – Daniel

+0

@Daniel:是否可以在AVCaptureMovieFileOutput中設置文件格式? –