首页 > 解决方案 > AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 同一个队列

问题描述

Apple 最近的示例代码之一使用相同的串行队列从 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 委托接收样本。从性能的角度来看,我需要知道这是否是可接受的做法。两个样本缓冲区代表应该有不同的队列还是单个队列?特别是在设置多个相机输入/输出时,这一点变得很重要。

 private let dataOutputQueue = DispatchQueue(label: "data output queue")
 ...
 ...
 videoDataOutput.setSampleBufferDelegate(self, queue: dataOutputQueue)
 audioDataOutput.setSampleBufferDelegate(self, queue: dataOutputQueue)

标签: iosavfoundationavcapturesessionavcapturedeviceavcapturevideodataoutput

解决方案


我想在性能方面:

  1. 这总是取决于你的情况。也许对于 Apple 的样本来说还可以,但也许在你的情况下它确实需要更多。
  2. 这是你可以自己尝试的东西。尝试在最慢的设备上获得尽可能多的输入,看看性能是否仍然足够好。

有一个类似的问题,由于串行队列,性能不佳,答案是使用并发队列,请参见此处: 使用 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 时的性能问题

但是再一次,我建议您尝试一下,看看什么对您有用:)

更新

这是一个完美解释差异以及如何使用串行和并发队列的链接: https ://www.avanderlee.com/swift/concurrent-serial-dispatchqueue/


推荐阅读