You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS下如何为AVCaptureSession添加多个音频AVCaptureDeviceInput?

解决方案

1. 禁用自动连接配置

AVCaptureSession 默认的自动连接逻辑只会为第一个音频输入和音频输出创建连接,不会自动将后续新增的音频输入加入已有连接。你需要在添加输入、输出设备前,先关闭会话的自动连接配置开关:

captureSession.automaticallyConfiguresConnections = false

2. 统一音频设备参数

多音频输入共用同一连接时,要求所有音频设备的采样率、声道数、位深度等格式参数完全一致,否则连接会创建失败。可以在添加设备前主动配置所有音频设备的格式:

for device in newDevices {
    try device.lockForConfiguration()
    // 统一配置为44.1kHz 双声道 16位整型,可根据需求调整
    if let format = device.formats.first(where: {
        $0.formatDescription.audioStreamBasicDescription?.mSampleRate == 44100 &&
        $0.formatDescription.audioStreamBasicDescription?.mChannelsPerFrame == 2
    }) {
        device.activeFormat = format
    }
    device.unlockForConfiguration()
}

3. 手动创建包含所有音频输入的连接

所有音频输入添加完成后,收集所有音频输入的端口,手动创建关联所有端口和音频输出的连接,添加到会话中:

// 收集所有音频输入的音频端口
var allAudioPorts = [AVCaptureInput.Port]()
for input in audioDeviceInputs {
    let ports = input.ports(for: .audio, 
                          sourceDeviceType: nil, 
                          sourceDevicePosition: .unspecified)
    allAudioPorts.append(contentsOf: ports)
}

// 创建多输入连接
let audioConnection = AVCaptureConnection(inputPorts: allAudioPorts, output: audioDataOutput)

if captureSession.canAddConnection(audioConnection) {
    captureSession.addConnection(audioConnection)
} else {
    throw Error.cannotAddConnection
}

4. 音频混合处理

如果你需要最终输出混合后的单路音频流,可以在AVCaptureAudioDataOutput的代理回调中,对各路音频的样本缓冲区进行时间对齐后,使用AVAudioEngine、AVAudioMixerNode或者直接操作PCM数据完成混合。

注意事项
  • 多音频输入合并为单个连接的能力仅macOS平台支持,iOS/iPadOS不支持该特性
  • 建议开启会话的主时钟同步所有设备时间,避免不同音频设备时钟偏移导致的音频卡顿、不同步问题:
captureSession.usesApplicationAudioSession = true
if let masterClock = captureSession.masterClock {
    audioDataOutput.setSampleBufferDelegate(delegate, queue: queue, clock: masterClock)
}
  • 需要确保你已经获取了所有待添加音频设备的捕获权限,权限缺失会导致输入添加失败。

内容的提问来源于stack exchange,提问作者DanM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:06:05