AVVideoCompositing 中的 CIImage 内存泄漏

问题描述 投票:0回答:1

我使用 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) } } } }) }
关于如何消除这种泄漏有什么建议吗?

您可以在这里找到演示项目

内存分配截图:

enter image description here

swift avfoundation avkit
1个回答
0
投票
我最近也遇到了同样的问题。对我来说,解决办法是发布一个

CIImage

。在我的认识中,我一直将所有叠加存储在 
AVVideoCompositionInstructionProtocol
 内部的数组中,因此一段时间后,当 
AVVideoCompositing
 渲染帧时,内存消耗不断增加。我添加了一个方法来检查资源(在我的例子中
CIImage
)是否不再需要,我只是
nil
它。

© www.soinside.com 2019 - 2024. All rights reserved.