在前面介绍了ADM(Audio Device Module),它用于抽象音频设备管理和音频数据采集/播放接口。windows的实现是AudioDeviceWinowCode,它封装了Core Audio APIs实现了对音频设备的操作。
Core Audio APIs
windows提供了多种音频操作API,比如最常用的是 waveXxx系列API,DirectSound等。而Core Audio APIs是这些API的基础,这些API使用Core Audio APIs提供了更通用的功能。
如下图是Core Audio APIs的架构图:

Core Audio APIs是一些高阶API(例如MME,DirectSound等)的基础。- 箭头的方向表示了音频数据的流向。
- 它有两种工作模式,共享模式和独占模式。共享模式就是大家(多个应用程序)同时播放声音(声音被混音),独占模式就是只能有一个程序播放,我一播,就没其他程序的声音了。
- 共享模式下,会有一个Audio Service进行协调各应用程序间的音频数据处理。这个很容易理解,多路声音,总该需要一个大管家来协调使用设备。
- 独占模式下,音频数据就直接到内核的驱动了。
Core Audio APIs特点是音频处理更高效,延时更低。对webrtc 这种RTC系统来说,正是需要其低延时的保证。
它四类子API
从上图中可以看到Core Audio APIs是一系列API的集合,它包括四类子API。
- MMDevice API(用于检索播放采集设备)
用于应用程序检索音频终端设备,枚举出所有可使用的音频设备属性及确定其功能,并为这些设备创建驱动程序实例,是最基本的Core Audio API,服务于其它3个APIs。
- WASAPI(控制播放和采集流)
应用程序可以通过它管理程序和音频终端设备之间音频数据的流。比如采集,回放音频。
- DeviceTopology API(webrtc中没用到)
应用程序可以遍历音频适配器设备和音频终端设备的内部拓扑,并单步执行将设备链接到另一台设备的连接。通过 DeviceTopology API 中的接口和方法,客户端程序可直接沿着音频适配器 (audio adapters) 的硬件设备里的数据通道进入布局特征(例如,沿着音频终端设备的数据路径上进行音量控制) 。
- EndpointVolume API(控制音量)
应用程序可以控制和监视音频终端设备的音量。
它们都以COM组件的方式提供,应用程序需要创建对应COM组件的实例,获取接口对象,再使用它们提供的方法。
AudioDeviceWindowCore
在webrtc中使用Core Audio APIs以下四个功能:
- 检索音频回放设备。
- 检索音频采集设备。
- 使用指定的音频设备回放声音。
- 使用指定的音频设备采集声音。
- 音频回放。
- 音频采集。
类图如下:

最低0.47元/天 解锁文章
3214

被折叠的 条评论
为什么被折叠?



