前言
音频采集和播放是和机器硬件设备强相关的。在 PC、移动设备上,由于操作系统的不同,操作硬件设备的 API 也是不同的。WebRTC 为了支持跨平台,对于音频设备操作层,抽象了一层公共接口。对于不同的平台的实现,采用桥接模式提供具体的实现。
本文分析 WebRTC 在 windows 系统中音频采集和播放过程。windows 系统是通过 MMDevice(Windows Multimedia Device) 来访问音频设备的,具体的 API 是一套 COM 风格的接口。API 的具体使用,参考 MSDN 即可。WebRTC windows 版本的代码也是有完整的实现,实现代码在 modulesaudio_devicewindows 目录下面。下文中源码分析,是基于 m66 版本。
音频采集依赖的系统库
库名称 库的说明
Strmiids.lib DirectShow 用到的库,导出 CLSID 和 IID
dmoguids.lib, msdmo.lib DirectX Media Object (DMO) 依赖库
wmcodecdspuuid.lib Vista+ DSP 依赖库
Winmm.lib timeGetTime 函数所在的库
音频设备封装
WebRTC 中音频设备部分是作为一个 Module 来封装的。实现代码在 WebRTC 源码的 modules/audio_device 目录下面。
类图: