WebRTC中对于ADM的实现有两种:
-
AudioDeviceWindowsCore
-
WindowsAudioDeviceModule
这两个类在源码中的位置分别是modules\audio_device\win\audio_device_core_win.h和modules\audio_device\win\audio_device_module_win.cc
简述
1. AudioDeviceWindowsCore
特点是将音频输入与输入混合在一起,导致出现的一个显著缺陷是:只有当音频输入与输出设备都正常时,音频功能才能正常进行。如没有扬声器设备时,即使拥有麦克风设备也无法有效地输入音频数据。
2. WindowsAudioDeviceModule
在吸取了AudioDeviceWindowsCore的教训后,WebRTC提供了ADM在Windows下另一较新的实现 WindowsAudioDeviceModule。它的特点是将音频输入与输出分开进行,二者互不相干,弥补了前者的缺陷。
但作为较新的实现,WindowsAudioDeviceModule中一些接口还并未被实现。如音量控制和设备端AEC、AGC、NSI可用性检查与设置。
如何选择
-
如果程序没有可以在无某一音频设备的情况下正常运行的要求,当前可以选择AudioDeviceWindowsCore。
在实际情况中,WindowsAudioDeviceModule并不稳定,它的实现不仅不完整,经过测试它还有一些致命bug(频繁插拔音频设备使WindowsAudioDeviceModule陷入重启中丧失功能,或者在初始化时崩溃)。
-
使用WindowsAudioDeviceModule是未来趋势。
因此,需要跟进WebRTC源码中 WindowsAudioDeviceModule 类的实现情况,以便及时更换ADM实现,达到最佳体验。