我正在OSX和iOS上开发VOIP应用程序,并将使用AudioQueue进行音频流,想知道的是,默认情况下,AudioQueue是否支持声学回声消除,或者我们是否需要添加对它的支持,
如果我们需要实现,我相信必须实现一些像Speex这样的开源库。是否有可用的示例显示AudioQueue与Speex或任何其他库的集成
据我所知,您必须使用音频单元来访问系统的回声消除。您可以使用kAudioUnitSubType_VoiceProcessingIO
而不是kAudioUnitSubType_RemoteIO
。
为了控制延迟,您可能无论如何都要使用"音频单元"。
您可以使用渲染回调函数从音频队列中获取数据,并将其传递给I/O单元。对于传出,请使用AudioUnitRender
。
感谢David和这篇文章,我意识到iOS上的回声取消需要以下更改:
desc.componentSubType = kAudioUnitSubType_VoiceProcessingIO
根据苹果公司的文档,这将启用硬件回声抑制。然而,您仍然需要为AudioStream描述使用特定的标志:
audioFormat.mFormatFlags = kAudioFormatFlagsCanonical;