我使用以下代码捕获视频并将其保存到我的应用程序的文档文件夹中:
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小时的视频。实际上,使用这种方法录制这种大小的视频是否可行? AVCaptureMovieFileOutput
在从摄像机接收帧时实时编码并将视频保存到磁盘,还是在调用[m_captureFileOutput stopRecording];
之后处理之前整个视频是否缓冲在RAM中?
如果这种方法对录制如此长时间的视频不合理,那么可能是一个合理的选择呢?
谢谢, 詹姆斯
答案 0 :(得分:4)
非常确定AVCaptureMovieFileOutput附加到文件中并且不使用内存缓冲区(可能它会在文件变得过大之前将其刷新到文件中)...在movieFragmentInterval属性中可以看到这方面的一些证据here。此外,我已经使用此方法记录大文件的文件,并且它工作正常,如果它将文件保留在内存中,在某些预设下会很快耗尽内存(例如1280x720)