提问人:Sergey Zaycev 提问时间:4/24/2023 更新时间:4/24/2023 访问量:66
导出带有动画图层的视频时出现内存不足错误 (AVAssetExportSession)
Out of memory error when exporting video with animated layers (AVAssetExportSession)
问:
我正在创建一个应用程序,允许您录制视频并在其上叠加背景和字幕。 一切正常,直到我尝试导出带有叠加字幕的视频。如果视频包含许多字幕,则 RAM 消耗会急剧增加,应用程序可能会崩溃。这种情况在较旧的设备上更常见,因为它们的 RAM 较少。在应用程序内播放带字幕的视频时不会发生这种情况。
在我看来,所有 CALayer 都保留在内存中,直到方法结束,并且只有在完成后才会释放。exportAsynchronously(completionHandler:
下面是导出视频的示例代码:
mainVideoComposition.animationTool = AVVideoCompositionCoreAnimationTool(
postProcessingAsVideoLayer: videoLayer,
in: outputLayer)
guard let exporter = AVAssetExportSession(asset: mixComposition, presetName: AVAssetExportPresetHighestQuality) else {
errorCallback?(VLError.toError(title: "Could not create exporter"))
return
}
self.export = exporter
exporter.outputURL = exportURL
exporter.outputFileType = .mp4
exporter.videoComposition = mainVideoComposition
exporter.shouldOptimizeForNetworkUse = true
exporter.exportAsynchronously(completionHandler: { [weak self] in
guard let self = self else { return }
if let anError = exporter.error {
self.errorCallback?(anError)
} else if exporter.status == AVAssetExportSession.Status.completed {
self.completionCallback?(AVURLAsset(url: exportURL))
}
})
有没有办法避免内存不足错误?
我将不胜感激任何帮助,非常感谢!
答: 暂无答案
评论