我一直在尝试创建一个来自AVCaptureOutput的60帧视频的循环缓冲区,然后我需要在事件发生后将帧写入AVAssetWriter。我认为它必须以类似的方式工作,以便在按下录制按钮之前此应用http://itunes.apple.com/us/app/precorder-video-camera-for/id412558814?mt=8如何记录设定的数量。
我用于循环缓冲区的先前方法是将sampleBuffer从输出添加到NSArray中,方法是将其转换为UIImage。这样工作正常,但据我所知,阵列填充未压缩的视频帧太快(给我内存警告,然后崩溃),如果视频质量设置得高,帧速率太慢,到期到UIImage对象的转换。因此,现在我一直在尝试将sampleBuffer添加到CFMutableArray中 - 因为这意味着我不必将其转换为UIImage,因此希望提高帧速率。但是,很少有人这样做的例子。我阅读了Save sampleBuffer in array (AVFoundation)并理解为执行以下操作:
初始化:
CFMutableArrayRef arrayOne = CFArrayCreateMutable( NULL, 0, &kCFTypeArrayCallBacks );
要插入:
CFArrayInsertValueAtIndex(arrayOne, index, sampleBuffer);
转换回sampleBuffer:
CMSampleBufferRef newSampleBuffer = (CMSampleBufferRef)CFArrayGetValueAtIndex(arrayOne, cfarrIndex);
但是,当我使用'newSampleBuffer'时,它不允许我使用它,通常会停止代码或给出错误的访问错误。
所以我想我的问题是,有谁知道我想做的事情是否可能?或者,如果还有其他方法可以做到这一点?
提前致谢!