WebRtcVoiceMediaChannel模块介绍(新版本webrtc)

WebRtcVoiceMediaChannel 是 WebRTC 媒体引擎(Media Engine)中负责管理单个 PeerConnection 音频会话的核心类。 与AudioDeviceModule 、AudioCodec 、AudioMixer 和AudioProcessing 等几个核心模块,共同构成webrtc_voice_engine模块

一,核心角色

• 一对一映射:每个 PeerConnection 通常对应一个 WebRtcVoiceMediaChannel 实例。

• 流管理器:它内部管理着多个发送流(WebRtcAudioSendStream)和接收流(WebRtcAudioReceiveStream)。在大多数语音通话中,通常只有一个发送流(本地麦克风)和一个或多个接收流(远程参与者)。

• 网络适配器:作为 webrtc::Transport 的实现,它接收来自底层网络栈的 RTP/RTCP 包,并将其分发给对应的接收流;同时也负责将编码后的音频包通过底层网络栈发送出去。

二,主要功能模块

2.1 编码器协商与管理

• SetSendParameters / SetRecvParameters:

根据 SDP Offer/Answer 协商的结果,配置本地支持的发送和接收编解码器列表(如 OPUS, G711 等)。

初始化解码器映射表 (decoder_map_),以便根据 RTP Payload Type 快速找到对应的解码器。

• send_codecs_ / recv_codecs_: 缓存当前会话协商好的编解码器信息。

2.2 音频流生命周期管理

• 发送流 (Send Streams):

AddSendStream: 当本地添加音频轨道(Audio Track)时调用,创建 WebRtcAudioSendStream。

SetAudioSend: 控制是否真正发送音频数据(静音/取消静音)。

RemoveSendStream: 移除本地音频轨道时调用,销毁发送流。

• 接收流 (Receive Streams):

AddRecvStream: 当远程描述中包含特定的 SSRC 时调用,预先创建接收流。

OnPacketReceived: 当收到第一个 RTP 包但尚未建立接收流时(Unsignaled Stream),动态创建接收流。

RemoveRecvStream: 移除远程音频轨道时调用。

2.3 网络传输 (Transport Interface)

• SendRtp / SendRtcp:

这是底层 AudioSendStream 回调的入口。

它将音频数据包封装,设置 DSCP(服务质量标记),并通过 VoiceMediaChannel::SendPacket 发送给底层的网络传输层(如 P2P Transport Channel)。

• OnPacketReceived:

这是底层网络层回调的入口。

当网卡收到 RTP/RTCP 包时,调用此方法。它解析包头,根据 SSRC 找到对应的 WebRtcAudioReceiveStream,并将数据送入 jitter buffer 和解码器。

2.4 运行时控制与状态

• 播放与录制开关:

SetPlayout(bool): 控制是否将远程音频混合后输出到扬声器。

SetSend(bool): 控制是否从麦克风采集并发送音频。

• 音量控制:

SetOutputVolume(ssrc, volume): 设置特定远程参与者的音量。

SetDefaultOutputVolume: 设置新加入参与者的默认音量。

• DTMF (双音多频):

InsertDtmf: 支持发送电话按键音(RFC 4733)。

2.5 高级特性

• 端到端加密 (E2EE):

SetFrameEncryptor / SetFrameDecryptor: 允许在编码后/解码前对音频帧进行自定义加密或解密,用于实现插入式端到端加密。

• 音频 sink:

SetRawAudioSink: 允许应用层直接获取原始的远程音频数据(例如用于语音识别或可视化波形),绕过默认的扬声器输出。

• 抖动缓冲区控制:

SetBaseMinimumPlayoutDelayMs: 调整最小播放延迟,以平衡实时性和抗抖动能力。

三, 工作流程介绍

  1. 初始化: PeerConnection 创建时,WebRtcVoiceEngine::CreateMediaChannel 生成此对象。

  2. 协商: SDP 交换后,SetSendParameters 和 SetRecvParameters 被调用,确定使用 OPUS 还是其他编码。

  3. 发送路径:

本地 Audio Track 产生数据 -> AudioSource -> WebRtcAudioSendStream -> 编码 -> SendRtp -> 网络。

  1. 接收路径:

网络收到包 -> OnPacketReceived -> WebRtcAudioReceiveStream -> Jitter Buffer -> 解码 -> AudioMixer -> AudioDeviceModule -> 扬声器。

相关推荐
换个昵称都难5 小时前
WebRtcVideoChannel (新版webrtc)
webrtc
Fisher3Star1 天前
带宽分配策略解析:保音频弃视频
webrtc
换个昵称都难1 天前
webrtc 的audio process介绍(新版本webrtc)
音视频·webrtc
Fisher3Star3 天前
mediasoup WebRtcTransport核心机制解析
webrtc
小小前端--可笑可笑3 天前
【Web 流媒体三部曲之一】直播、点播与 WebRTC 是什么?
前端·webrtc
hz567893 天前
实时音视频SDK选型指南:TRTC、WebRTC与音视频PaaS能力对比
安全·音视频·webrtc·实时音视频·信息与通信·paas
Fisher3Star4 天前
WebRTC回声消除定位方法
webrtc
Fisher3Star4 天前
WebRTC音频模块替换方案
webrtc
Fisher3Star4 天前
WebRTC Android音频播放三方案解析
webrtc