macOS 12 beta在21A5522h上运行我们的应用程序时,我们看到奇怪的崩溃。我们无法完全识别该问题,但它似乎是在AVPlayer应用程序进入后台后继续视频播放时发生的。Xcode 指向一些随机代码(每次看起来都不同,而且在我们自己的代码中从来没有)
在日志中我们将看到:
-[MTLDebugCommandBuffer lockPurgeableObjects]:2103:断言失败'MTLResource 0x600002293790(标签:(null)),在cmd缓冲区0x7f7b2200a000(标签:(null))中引用在提交时处于易失性或空可清除状态'
-[MTLDebugCommandBuffer lockPurgeableObjects]:2103:断言失败'MTLResource 0x600002293790(标签:(null)),在cmd缓冲区0x7f7b2200a000(标签:(null))中引用在提交时处于易失性或空可清除状态'
我们尝试查找对象 0x600002293790 和 0x7f7b2200a000,但这没有提供有关应用程序崩溃原因的其他信息。
我们正在使用自定义 VideoCompositor:AVVideoCompositing并使用以下选项初始化CIContext此处完成的工作:
if let mtlDevice = MTLCreateSystemDefaultDevice()
let options: [CIContextOption : Any] = [
CIContextOption.useSoftwareRenderer: false,
CIContextOption.outputPremultiplied: false,
]
let context = CIContext(mtlDevice: mtlDevice, options: options)
}
Run Code Online (Sandbox Code Playgroud)
不确定这是 Xcode 调试问题吗?或者是一个实际问题,因为我们没有看到它在不使用 Xcode 构建我们的应用程序时崩溃。
任何有关查找问题根源或解决方案的信息都很棒。
更新:
我们似乎在崩溃之前看到了与大多数崩溃中的屏幕相关的消息。
****[48028:857651] [] [15:53:06.503] FPSupport_GetDisplayRefreshInformation 在 FigPlayerSupport.m:3198 处发出信号 err=-12780 (kCMBaseObjectError_ParamErr) (CGDisplayModeGetRefreshRate 返回 0)
****[48028:857658] [] [15:53:06.548] customVideoCompositor_CopyProperty 在 FigVideoCompositor_Custom.c:581 发出 err=-12784 (kFigBaseObjectError_PropertyNotFound) (无法识别的属性)
或者这个:
我们发现使用所需的委托创建 HLS fMP4 视频AVAssetWriter时会泄漏内存。AVAssetWriterDelegate甚至在使用给定的段数据进行处理和存储之前。
当手动释放内存时(感觉这是错误的),内存泄漏似乎消失了。
即使在最小的情况下,记忆也会迅速增加。
import Cocoa
import AVFoundation
class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
AVCaptureDevice.requestAccess(for: .video, completionHandler: {
_ in
})
}
private var fileWriter: AVAssetWriter!
private var videoInput: AVAssetWriterInput!
private var bufferAdaptor: AVAssetWriterInputPixelBufferAdaptor!
private var captureSession: AVCaptureSession!
internal let recordingQueue = DispatchQueue(label: "RecordingQueue", qos: .userInitiated)
internal let writerQueue = DispatchQueue(label: "WriterQueue", qos: .userInitiated)
@IBAction func startCapture(_ sender: NSButton) {
self.writerQueue.async {
let device = AVCaptureDevice.default(for: .video)!
try! device.lockForConfiguration()
device.activeFormat = …Run Code Online (Sandbox Code Playgroud)