乐趣区

WebRTC入门二-架构

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 的内核中并不包含视频的渲染
视频的渲染都是在应用层或浏览器层完成 


在本层中,所有模块(画虚线部分)都可以进行重载,可以通过自己编写方法来代替。

退出移动版