WebRTC 整体结构
在 WebRTC 官网上的 WebRTC 架构图清晰的说明了其整体的架构和设计思路。
可以看到,这张图被分为了紫色和绿色两大部分。其中紫色部分为浏览器提供的 JavaScript Api,紫色箭头为上层应用。绿色部分为 WebRTC 的核心部分,是封装好的 WebRTC 库。
WebRTC 核心层(绿色部分)
WebRTC 核心层,分为了四个层级
C++ Api 层
通过观察源码可以看到,Api 层主要提供了 PeerConnection 功能,其中包括传输质量、数据、流等。此外本层还提供了音视频采集、非音视频传输、设备管理的接口等。
可以看到,WebRTC 对外暴露的接口非常少,极大的降低了使用的难度
Session 层
在创建了音频、视频,或进行数据传输时,需要在 Session 层处理。
Session 层有相关的处理逻辑。
核心层
在核心层,包含了音频引擎(Voice Engine)、视频引擎(Video Engine)和传输(Transport)
可以看到,核心层的音频、视频、传输引擎相互独立。
音频引擎
编解码模块(iSAC/iLBC),可将 Opus 和 aac 加入到模块中。
缓冲模块(NetEQ)是音频缓冲的 Buffer,用于网络防抖。
回音消除与降噪(Echo Canceler/Noise Reduction)。
视频引擎
目前支持了 H264、OpenH264,对于 XH264 可添加对应模块.
视频 Buffer,用于网络防抖。
视频、图像增强模块会有对应的接口,可以自己实现美颜、人脸识别等功能。
传输引擎
底层使用 UDP,上层使用 RTP。
多流复用通道。
P2P 协议。
硬件相关层
包含了音频的采集与渲染、视频的采集(没有渲染),网络 i /o
在 WebRTC 的内核中并不包含视频的渲染
视频的渲染都是在应用层或浏览器层完成
在本层中,所有模块(画虚线部分)都可以进行重载,可以通过自己编写方法来代替。