架构
整理分为两层:
应用层、核心层绿色部分是核心部分,
是WebRTC提供的核心功能;紫色部分是浏览器提供的JS的API层;
即
浏览器对WebRTC核心层的C++ API 做了一层封装,
封装成了JS接口;最上面的箭头是
上层应用
了,
上层应用
可以在 浏览器中 直接访问 浏览器提供的API;最终调用到核心层【蓝色虚线框、可重载!!】
WebRTC核心层
C++ API:API数量较少,主要是PeerConnection;
(PeerConnection的API又包含传输质量、传输质量报告、各种统计数据、各种流等)
【设计技巧:
对于上层来说,提供的API简单,方便应用层开发;
内部比较复杂;】Session层【上下文管理层】:
如应用创建了音频、视频、非音视频的数据传输,
都可以在Session层做处理,做管理相关的逻辑;-
【最重要】引擎层/传输层【核心】
音频、视频、传输 解耦
音频引擎:【Voice Engine】
ISAC/ILBC 编解码;
NetEQ 【Buffer】 网络适配、防止网络抖动;
回音消除(echo canceler):
音视频重点,决定产品质量,
WebRTC里提供了相关非常成熟的算法
,开发时只需要调节参数
即可;
降噪(Noise Reduction)、自动增益;视频引擎:【Video Engine】
VP8、openH264 编解码;
Video jitter buffer:防止视频抖动;
Image enhancements:图像增强;传输【Transport】
底层用的UDP,上层用的SRTP【即安全的、加密后的RTP】;
Multiplexing:多个流复用同一个通道;
P2P层【包括 STUN+TURN+ICE】;
所有的
音频视频的接收与发送,
都是通过传输层去做的,
传输层包括了泄漏的检测、网络链路质量检测,
根据情况估算网络带宽,根据网络带宽进行音视频、文件等非音视频
的传输;
- 硬件层
视频采集、渲染;
音频采集;
网