【问题标题】:AVFoundation AVCaptureVideoPreviewLayer freezes after hoursAVFoundation AVCaptureVideoPreviewLayer 在几个小时后冻结
【发布时间】:2021-06-14 01:52:03
【问题描述】:

我正在使用 AVFoundation 通过 AJA U-Tap SDI 接口监控视频和音频信号。一切都按预期工作,但在很长一段时间后预览会随机冻结。在过去的几周里,我注意到了 2-3 次。它发生在持续预览数小时后。没有内存泄漏、控制台消息、警告,会话正在运行,并且所有分配的对象似乎都是有效的。有没有人注意到这样的事情?谢谢。 [macMini,BigSur 11.2.3,最新AJA固件]

【问题讨论】:

    标签: avfoundation


    【解决方案1】:

    我假设您使用的是AVCaptureSession。尝试订阅以下通知以获取线索:

    .AVCaptureSessionRuntimeError
    .AVCaptureSessionDidStopRunning
    .AVCaptureDeviceWasDisconnected
    .AVCaptureInputPortFormatDescriptionDidChange
    

    【讨论】:

    • 嗨,是的,没错。除了 .AVCaptureSessionRuntimeError 之外,我拥有所有这些。我会查的。谢谢。
    • 嗨,经过一周的测试:它发生了 2 次(发生时,没有 UI 交互):日志中没有消息,没有通知(我正在观察你提到的所有内容)。这次我在调试模式下进行测试,所以我暂停并检查了相关对象的有效性:会话正在运行,预览层有效等。我在最新的 macMini 和 macMini m1(roseta,相同的版本)上测试了最新的 macOS/ Xcode。我不知道它可能是什么......我最后的怀疑是我的dispatch_queue_create("sr_capture_queue_video", NULL); 它会被系统暂停然后恢复吗?
    • 我还发现了这一点(可能相关):使用标准网络摄像头或 Apple Face Time 高清摄像头,预览视频(也使用 AVCapturePreviewLayer)大约每 5 秒丢帧。持续 1-2 秒。最有趣的是,如果我启动 iMovie 并打开 camare 捕捉窗口,两个应用程序中的预览都很流畅。 iMovie 是否将系统/AVFoundation 切换到某些特殊模式?我真的厌倦了...... :-) 谢谢。
    • 我切换到- (void)captureOutput: (AVCaptureOutput *)output didOutputSampleBuffer: (CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection,去掉了AVCapturePreviewLayer,视频预览流畅,无丢帧。
    • 问题 #2(删除和冻结预览):仅当我的 previewLayer 的父级 superLayer 应用了变换:self.documentLayer.transform = CATransform3DMakeScale(_magnification, _magnification, 1); 并且仅在内部 GPU 上运行时才会发生这种情况。一旦我连接了外部显示器(并且 MacBook 的盖子是关闭的)或者我移除了变换,就不会掉帧或冻结。我正在考虑两种解决方案:强制切换到离散 GPU 或找到其他方式来扩展 documentLayer。
    猜你喜欢
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 2016-06-17
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多