webrtc音频模块介绍(二) ADM

不同操作系统管理音频设备及提供的音频接口方式各不同,ADM用于屏蔽音频设备管理及接口的差异,抽象统一接口。它的全称是Adio Device Module。

设备管理模块(ADM)

类结构图

首先它肯定是个接口类,不同平台的实现都继承于它,实现具体的接口。如下为整个ADM体系的类结构图。

AudioDeviceWindowCoreAudiDeviceMac就分属windows和mac下的实现,linux下的实现为AudioDeviceLinuxALSA

ADM的接口分为三大类:

  1. 音频设备管理:检索音频设备,初始化音频设备,指定使用的音频设备。
  2. 音频回放。
  3. 音频采集。

在整个音频模块中,它属于最底层,将上层的处理后的音频数据给到音频设备进行回放或采集音频给到上层处理。

创建时机

全局只有一个ADM对象,由所有的pc(peerconnection)对象所共享。

相关堆栈

创建ADM的具体代码可以看看webrtc_voice_engine.cc文件中的void WebRtcVoiceEngine::Init()方法。

windows下的实现

windows下的实现具有代表性,也方便调试。后面回放,采集的流程都以windows下的实现来分析。

对应的实现类是AudioDeviceWindowCore,类图如下:

作为windows下的具体实现,它直接管理Windows提供的音频COM对象。

以I开头的都是属于windows下的音频设备相关的接口。

  • IMMDevice代表一个音频设备。
  • IMMDeviceCollection音频设备集。
  • IMMDeviceEnumerator用于枚举音频设备。
  • IMMEndpoint代表一个音频终端设备。

以上为ADM基本架构图及它主要功能的介绍。

相关推荐
晚霞的不甘10 分钟前
Flutter for OpenHarmony 可视化教学:A* 寻路算法的交互式演示
人工智能·算法·flutter·架构·开源·音视频
听麟36 分钟前
HarmonyOS 6.0+ 跨端智慧政务服务平台开发实战:多端协同办理与电子证照管理落地
笔记·华为·wpf·音视频·harmonyos·政务
晚霞的不甘1 小时前
Flutter for OpenHarmony 实现计算几何:Graham Scan 凸包算法的可视化演示
人工智能·算法·flutter·架构·开源·音视频
零一iTEM2 小时前
MAX98357A_音频输出测试
单片机·嵌入式硬件·开源·音视频·硬件工程
Android系统攻城狮3 小时前
Android16进阶之获取播放位置MediaPlayer.getCurrentPosition调用流程与实战(二百二十八)
音视频·android16·音频进阶·音频性能实战
愚公搬代码5 小时前
【愚公系列】《AI短视频创作一本通》020-AI短视频创作实例精解(文旅宣传AI短视频实例精解)
人工智能·音视频
有位神秘人5 小时前
Android获取设备中本地音频
android·音视频
硫酸锌015 小时前
使用ffmpeg合并文件夹内的所有*.mp4格式视频
ffmpeg·音视频
源文雨5 小时前
shell调用ffmpeg递归转换所有wav至flac的脚本
ffmpeg·bash·音视频·音频·unix·shell·音频编码
愚公搬代码6 小时前
【愚公系列】《AI短视频创作一本通》019-AI语音及音乐的创作(AI短视频语音创作实例)
人工智能·音视频