0

背景

我想用 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我发现这个结果非常令人困惑,我认为它支持我自己对它在数据处理方面的工作原理缺乏了解。也许因为这些CMSampleBuffers 被保留AVCaptureSession不能再从某个池中取出?

问题

我如何存储CMSampleBuffers 以供以后使用而不会导致丢帧?我应该制作深拷贝吗?或者,iOS 生态系统中是否有另一种机制可以处理这个问题。

4

0 回答 0