WebRTC(Web Real-Time Communication)是 Google于2010你那以$6829万从 Global IP Solutions 公司购买,并于2011年将其开源,旨在建立一个互联网浏览器间的实时通信的平台,让 WebRTC技术成为 H5标准之一。
- 基于浏览器的 WebRTC应用开发
- C 层面的移植和开发,可将其集成到多种平台的应用中,实现语音通话功能。
WebRTC集成了多种 audio codec,例如 ISAC、ILBC、G711、G722...
ISAC(Internet Speech Audio Codec)是一种宽带和超宽带音频编解码器,是 WebRTC音频引擎的默认编解码器。
ILBC(Internet Low Bitrate Codec)是一种窄带语音编解码器,可保证低带宽条件下较好的音质,采样频率为8kHZ,20ms 每帧时比特率为15.2kbps,30ms 每帧比特率为13.33kbps。
NetEQ 实现自适应抖动控制算法以及语音包丢失隐藏算法,用于适应不断变化的网络环境,确保音质有没且缓冲延迟最小。
AEC(Acoustic Echo Cancelling) 将回声估计值从话筒的输入信号中减去,从而达到消除回声的目的。
NS(Noise Suppression) 探测出背景固定频率的杂音并消除背景噪音。
VAD(Voice Activity Detection) 检测到当前为静音,将只编码生成数量小的静音包,可大大节省编码时间和带宽。
AGC(Automatic Gain Control) 自动调麦克风的收音量,避免声音忽大忽小。
RTP/RTCP(WebRTC Voice Engine) 成熟的 RTP 协议来传输实时音频数据。
混音 WebRTC 支持接收多人得语音数据并混音后播放的功能。
WebRTC Voice 模块
- AudioDeviceModule 负责采集和播放音频数据
- AudioProcessModule 用于处理编码前和解码后的数据
- AudioCodingModule 用于编码或解码音频数据
- AudioConferenceMixer 当有多路音频时完成混音工作
- RtpRtcpModule 编码数据通过 RTP 协议传输
WebRTC音频通话链路
WebRTC将每个音频通话抽象为一个 channel,若开启多个 channel 则播放时会将这几个 channel 的音频数据混音后再播放。
对一个 channel 而言,处理这个 channel 的数据将包含三个线程:采集线程、接收线程、播放线程。
- 采集线程用于采集编码数据
- 接收线程用于接收RTP数据并解码
- 播放线程用于播放音频数据