Webrtc音频模块(四) 音频采集

音频的采集还是封装在AudioDeviceWindowsCore中,相关的Core Audio API接口是下面几个:

IAudioClient* _ptrClientIn
IAudioCaptureClient* _ptrCaptureClient
rtc::scoped_refptr<IMediaObject> _dmo
rtc::scoped_refptr<IMediaBuffer> _mediaBuffer

音频的采集一样的通过Core Audio API实现,上面的_ptrClientIn和_ptrCaptureClient就是采集接口对象。_dmo是DMO接口对象,_mediaBuffer是它使用的buffer接口对象,它们也用于采集。

webrtc中实现两种模式的音频采集

  • 通过IAudioCaptureClient,通过_ptrClientIn和_ptrCaptureClient实现。
  • 通过IMediaObject从DMO取音频数据,通过_dmo实现。

这篇文章只介绍通过DMO的方式采集音频数据。

DMO

DMO 是 DirectX Media Object,看一看官方说明,如下:

DirectX Media Objects (DMOs) are COM-based multimedia and data-streaming components. In some respects, DMOs are similar to DirectShow filters. Like DirectShow filters, DMOs take input data and use it to produce output data. As the APIs for DMOs are much simpler than the corresponding APIs for DirectShow, they are easier to create, test, and use. For encoding/decoding, audio capture, audio processing and video processing effects, Microsoft encourages developers to write a DMO instead of a DirectShow filter.

它是一个COM组件,用来处理音视频数据,在webrtc中使用了音频处理功能。

一些高档的麦克风,很多都标注提供了回声消除,降噪等功能,通过DMO就可以利用这些硬件提供的功能。

Webrtc中使用DMO

AudioDeviceWinodwsCode中与DMO相关的变量是下面三个:

复制代码
rtc::scoped_refptr<IMediaObject> _dmo;
rtc::scoped_refptr<IMediaBuffer> _mediaBuffer;
bool _builtInAecEnabled;

一个是DMO的COM接口对象,一个是用于从DMO取数据的Buffer接口,一个是否使用DMO的使能标志。

默认情况下_builIntAecEnabled为true,音频的采集将会从DMO中取处理后的音频数据,通过IMediaBuffer接口取数据。

初始化代码可以看看AudioDeviceWindowsCore::InitRecordingDMO()中的实现。在AudioDeviceWindowsCore::InitRecordingDMO()中,会设置DMO的数据输出的格式,用的也是前面介绍过的WAVEFORMATEX结构来描述音频的参数。

在AudioDeviceWindowsCore::SetDMOProperties()方法中,设置了DMO要开启的音频处理功能,webrtc会使用DMO的回声消除,降噪音频处理功能。

从DMO中取数据

音频的采集就是从DMO中取经过处理后的音频数据,它包括以下几步:

  1. 需要创建一个IMediaBuffer接口对象的实例。
  2. 将DMO_OUPUT_DATA_BUFFER中pBuffer成员指向自己的Buffer。
  3. 将DMO_OUPUT_DATA_BUFFER对象传给IMediaObject的ProcessOutPut接口。
  4. 调用IMediaObject的GetBufferAndLength接口来获取数据。

DMO数据采集线程实现DoCaptureThreadPollDMO,如下流程:

相关推荐
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
2601_955662463 天前
短剧多人对白怎么配?2026年多角色配音工具对比
大数据·人工智能·音视频·语音识别
开发笔记-阿牛3 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L
人工智能·单片机·嵌入式硬件·音视频·音频
旺仔小馒头wang3 天前
AI 智能手机发布会:赋予人类的五种新能力
人工智能·学习·音视频
纳祥科技3 天前
拆机拆到芯片级:ARC功放机里的NX7026、NX8420、NX6805
单片机·音视频·智能音箱
youandyouyou3 天前
律所内部培训共享的内网部署方案:架构、参数与三步落地
音视频
爱吃提升3 天前
文生视频核心
人工智能·音视频
2601_955662463 天前
抖音视频怎么做多语言配音?2026年AI配音工具与制作流程详解
人工智能·音视频·语音识别·视频
音视频牛哥3 天前
Android与HarmonyOS NEXT如何接入GB28181:从SIP到PS/RTP的完整链路
音视频·gb28181-2022对接·鸿蒙next gb28181·gb/t 28181-2022·gb/t 28181-2016·gb28181-2022平台
美狐美颜SDK开放平台3 天前
直播APP源码与视频美颜sdk如何配合?一套完整开发思路
android·人工智能·计算机视觉·音视频·直播美颜sdk