小编Jor*_*ort的帖子

macOS 12 beta 中 MTLDebugCommandBuffer lockPurgeableObjects 崩溃

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) (无法识别的属性)

或者这个:

在此输入图像描述

macos xcode avfoundation avplayer macos-monterey

6
推荐指数
0
解决办法
447
查看次数

使用 AVAssetWriterDelegate for HLS 使用 AVCaptureSession 到 AVAssetWriter 时出现内存泄漏

我们发现使用所需的委托创建 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)

macos xcode avfoundation swift avkit

6
推荐指数
1
解决办法
317
查看次数

标签 统计

avfoundation ×2

macos ×2

xcode ×2

avkit ×1

avplayer ×1

macos-monterey ×1

swift ×1