我一直在尝试从来自 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”时,它不允许我使用它,通常会停止代码或给出错误的访问错误。
所以我想我的问题是,有谁知道我想做的事情是否可行?或者如果有其他方法可以做到这一点?
提前致谢!