ios - AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 同一个队列
问题描述
Apple 最近的示例代码之一使用相同的串行队列从 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 委托接收样本。从性能的角度来看,我需要知道这是否是可接受的做法。两个样本缓冲区代表应该有不同的队列还是单个队列?特别是在设置多个相机输入/输出时,这一点变得很重要。
private let dataOutputQueue = DispatchQueue(label: "data output queue")
...
...
videoDataOutput.setSampleBufferDelegate(self, queue: dataOutputQueue)
audioDataOutput.setSampleBufferDelegate(self, queue: dataOutputQueue)
解决方案
我想在性能方面:
- 这总是取决于你的情况。也许对于 Apple 的样本来说还可以,但也许在你的情况下它确实需要更多。
- 这是你可以自己尝试的东西。尝试在最慢的设备上获得尽可能多的输入,看看性能是否仍然足够好。
有一个类似的问题,由于串行队列,性能不佳,答案是使用并发队列,请参见此处: 使用 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 时的性能问题
但是再一次,我建议您尝试一下,看看什么对您有用:)
更新
这是一个完美解释差异以及如何使用串行和并发队列的链接: https ://www.avanderlee.com/swift/concurrent-serial-dispatchqueue/
推荐阅读
- html - 复杂的响应式布局
- ruby-on-rails - 按特定值匹配数据集中的实例记录
- javascript - 停止从 React 中的选择组件传播
- selenium-webdriver - 如何从属性文件中分配 TestNG Xml 中的参数值
- node.js - Nodejs 表达 res.redirect 循环
- laravel - Laravel 排队作业的属性优先级
- html - 尝试创建将在多台计算机上运行的 HTML 应用程序
- django - AttributeError:在 OneToOneField 模型字段上使用 F 函数时,“FloatField”对象没有属性“模型”错误
- c# - 我试图在统一 2d 中随机生成一些对象
- installation - 安装 ORO CRM /user/login 后抛出 404