如何将多个音频 AVCaptureDevice 添加到 AVCaptureSession

Posted

技术标签:

【中文标题】如何将多个音频 AVCaptureDevice 添加到 AVCaptureSession【英文标题】:How to add multiple audio AVCaptureDevice to an AVCaptureSession 【发布时间】:2021-11-14 19:03:25 【问题描述】:

我正在尝试将多个音频 AVCaptureDeviceInputs 添加到 AVCaptureSession (macOS)。

我的理解是 AVCaptureConnections 是在兼容的输入和输出之间自动创建的。

我可以成功添加一个摄像头和音频设备,绝对没问题。添加第二个音频设备时出现了我的问题。我想覆盖来自多个来源的音频。

音频输入添加如下:

for device in newDevices 
   do 
      let newAudioDeviceInput = try AVCaptureDeviceInput(device: device)
      if self.captureSession.canAddInput(newAudioDeviceInput) 
         self.captureSession.addInput(newAudioDeviceInput)
         self.audioDeviceInputs.append(newAudioDeviceInput)
      
    catch 
      errors.append(error)
   

print(captureSession.inputs.count) 成功显示正确的输入数

输出添加如下:

let audioDataOutput = AVCaptureAudioDataOutput()
audioDataOutput.setSampleBufferDelegate(delegate, queue: queue)
if self.captureSession.canAddOutput(audioDataOutput) 
   self.captureSession.addOutput(audioDataOutput)
   self.audioDataOutput = audioDataOutput
 else 
   throw Error.cannotAddOutput

在添加的第一个输入和输出之间创建单个 AVCaptureConnection,但不会将后续输入添加到连接中。

我真的很难找到任何像样的文档,因此非常感谢任何建议。我的期望是每个额外的 AVCaptureDeviceInput 都会被添加到同一个连接输入数组中。

【问题讨论】:

【参考方案1】:

认为不支持多个音频和视频AVCaptureInputs,但我也找不到任何文档。

不久前,这个人巧妙地使用addOutputWithNoConnections() 创建了多个视频 输入和输出,然后手动创建到输入的连接(但为什么没有addInputWithNoConnections()?):

https://***.com/a/30191013/22147

这可能值得尝试使用音频!如果您尝试这样做,请报告您的结果!

但是我喜欢将输入设备包装在一个聚合音频设备中,然后配置 AVCaptureSession 以使用它。这使您可以方便地使用单个“设备”,并且您不必担心多个时钟和时间戳,因为两个设备都是同步的。

您可以在Audio MIDI Setup.app:https://***.com/a/65704755/22147中手动创建聚合音频设备

或以编程方式,使用AudioHardwareCreateAggregateDevice(): https://***.com/a/56415699/22147 如果您使用程序化路由,您可以通过将kAudioAggregateDeviceIsPrivateKey 设置为true 来隐藏生成的聚合设备。您可能希望这样做以阻止用户使用它。

【讨论】:

感谢您的精彩回复。有趣的是,我今天早上刚刚偶然发现了视频输入解决方案,所以不妨试一试,看看它是否有效。也就是说,我真的很喜欢创建聚合设备的想法,因为它可能会提供更多的控制权。我会回来报告的。

以上是关于如何将多个音频 AVCaptureDevice 添加到 AVCaptureSession的主要内容,如果未能解决你的问题,请参考以下文章

在多个应用程序启动过程中保存数据[重复]

怎样将电脑中的音频文件识别转文字

如何最小化多个音频代码

如何以编程方式将多个源添加到 HTML5 音频标签?

如何通过在 iphone 中混合多个音频来录制音频?

依次播放多个音频片段