我使用 Cabbage 在视频顶部叠加图像。但是我遇到了一个问题,当我在CIImage中出现内存泄漏时,即使启动exportSession的ViewController被取消初始化,也从未从内存中释放。 我使用标准启动,就像演示应用程序中的框架一样:
let url = Bundle.main.url(forResource: "ProductOnly_Female_Tops_1_custom", withExtension: "jpg")!
let image = CIImage(contentsOf: url)!
AVVideoCompositing的startRequest方法代码:
open func startRequest(_ request: AVAsynchronousVideoCompositionRequest) {
renderingQueue.async(execute: { [weak self] in
guard let strongSelf = self else { return }
if strongSelf.shouldCancelAllRequests {
request.finishCancelledRequest()
} else {
autoreleasepool {
if let resultPixels = strongSelf.newRenderedPixelBufferForRequest(request: request) {
request.finish(withComposedVideoFrame: resultPixels)
} else {
request.finish(with: PixelBufferRequestError.newRenderedPixelBufferForRequestFailure)
}
}
}
})
}
关于如何消除这种泄漏有什么建议吗?您可以在这里找到演示项目内存分配截图:
CIImage
。在我的认识中,我一直将所有叠加存储在
AVVideoCompositionInstructionProtocol
内部的数组中,因此一段时间后,当
AVVideoCompositing
渲染帧时,内存消耗不断增加。我添加了一个方法来检查资源(在我的例子中
CIImage
)是否不再需要,我只是
nil
它。