背景
我想用 CoreML 分析 CMSampleBuffers 数组,如果满足条件,则将 CMSampleBuffers 数组输出为视频。我想CMSampleBuffer
一次在内存中保留大约 120 秒。
代码示例
var idx: Int = 0
var frameList = [CMSampleBuffer]()
func captureOutput(_ output: AVCaptureOutput, didDrop sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
print("dropped frame!")
}
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
frameList.append(sampleBuffer)
idx += 1
print("handling idx \(idx)")
}
控制台输出
handling idx 1
handling idx 2
handling idx 3
handling idx 4
handling idx 5
handling idx 6
handling idx 7
handling idx 8
handling idx 9
handling idx 10
handling idx 11
handling idx 12
handling idx 13
dropped frame!
dropped frame!
dropped frame!
dropped frame!
...
问题说明
随着我向数组中添加越来越多CMSampleBuffer
的 s,最终,代码开始永远丢帧。AVCaptureSession
我发现这个结果非常令人困惑,我认为它支持我自己对它在数据处理方面的工作原理缺乏了解。也许因为这些CMSampleBuffer
s 被保留AVCaptureSession
不能再从某个池中取出?
问题
我如何存储CMSampleBuffer
s 以供以后使用而不会导致丢帧?我应该制作深拷贝吗?或者,iOS 生态系统中是否有另一种机制可以处理这个问题。