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的内核中并不包含视频的渲染
视频的渲染都是在应用层或浏览器层完成
在本层中,所有模块(画虚线部分)都可以进行重载,可以通过自己编写方法来代替。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。