Ios AVCaptureVideoDataOutput和AVCaptureAudioDataOutput是同一队列

Ios AVCaptureVideoDataOutput和AVCaptureAudioDataOutput是同一队列,ios,avfoundation,avcapturesession,avcapturedevice,avcapturevideodataoutput,Ios,Avfoundation,Avcapturesession,Avcapturedevice,Avcapturevideodataoutput,Apple最近的一个示例代码使用相同的串行队列从AVCaptureVideoDataOutput和AVCaptureAudioDataOutput委托接收示例。我需要知道,从性能的角度来看,这是否是可接受的做法。两个示例缓冲区委托应该有不同的队列还是单个队列?特别是在多个摄像机输入/输出的设置中,这变得非常重要 private let dataOutputQueue = DispatchQueue(label: "data output queue") ... ... videoData

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

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

我想在性能方面:

  • 这取决于你的情况。也许苹果的样品还可以,但也许在你的情况下,它真的需要更多
  • 这是你可以自己尝试的东西。尝试在最慢的设备上获得尽可能多的输入,看看性能是否仍然足够好
  • 还有一个类似的问题,由于串行队列,性能不好,答案是使用并发队列,请参见此处:

    但我再次建议您尝试一下,看看什么适合您:)

    更新 下面的链接完美地解释了这些区别以及如何使用串行和并发队列:

    我看到了这个问题,但这个答案的奇怪之处在于使用并发队列。AVCaptureVideoDataOutput documentation()只指定使用串行队列。他们说:“必须使用串行调度队列,以确保视频帧按顺序传送。”他们之所以这样说,主要是因为句子的最后一部分->确保帧的顺序正确。但你说的是多个摄像头输入。如果您只是对每个摄像头输入使用串行队列,它仍然可以。另外,我刚刚用并发队列的链接更新了我的答案。