二 、第一节 WebRTC架构.mp4

WEBRTC整体架构

我们可以简单的将这张图分成两大部分,最核心的是绿色部分,这是WebRTC库所提供的核心功能,紫色部分是浏览器提供的JavaScript API层,也就是说浏览器对WEBRTC核心层的C++API 做了一层封装,封装成了javascript接口,上层应用就是一个个箭头,有很多应用都可以在这浏览器中直接访问浏览器所提供的API,那么这样最终就调到了核心层去获取音频视频,去编解码通过传输去发送,这就是他的整体的一个分层,也就是说分层两次,一个是应用层一个是核心层。

而我们要讲解的WebRTC库他属于这个核心层的部分,那如果我们自己去做应用的话,其实也是参考整个浏览器它的实现模式,那么在上层你可以实现一个自己的API,最终是调核心层的C++API,也就是我们通常所说的Native API, 它在内部就会一层层的调下来,最终实现整个音视频的逻辑.

下面我们看一下核心层,核心层就比较复杂了,它也是按层级来区分的,它分成了四层,第一层是C++ API,也就是说提供给外面的API接口,这些API其实非常的少,我们可以通过查看它的源码就可以看到,最主要的是PeerConnection,WebRTC最主要的就是P2P进行传输,它可以往服务端传,你也可以认为服务端是一个端,也是从一个终端到服务端的P2P,在PeerConnection又包括了很多的接口,包括你的传输质量,传输质量报告,各种统计数据和流都是封装在PeerConnection里的,那除了这个连接之外,还可以有设备管理,音视频数据的采集,还有我们普通的非音视频数据传输,基本上就分成这几大类API就可以了。

通过这一点就可以看出wenrtc这一点设计的非常好,很有技巧,对上层来说,你提供的API越简单,那么对应用层来说它就比较方便,这样对它的开发就降低了难度,那么对于内部来说它就比较复杂了,上面我们说了第一层,那么第二层是Session层,Session management / Abstract signaling,也就是上下文管理层,包括你创建了音频,创建了视频,还有非音视频的数据传输,那都可以在Session层去做处理,也就是说这一层去管理相关的逻辑,那这一层也不是很重。

最重的是第三层,第三层有包括了音频引擎,视频引擎,还有传输,那音频引擎里面又包括了一堆,稍后我们看一下。

最后一层是与硬件相关的,包括了音频的采集与渲染 ,视频的采集,这里需要注意的一点在WEBRTC库里核心层是没有视频的渲染的,那么所有的渲染都需要应用层或者浏览器层自己去做;那么最后一个是网络 I/O。

下面有个说明,所有划虚线的,都是可以可重载的,这样增加了它更大的灵活度,也就是说当你不需要Webrtc这些引擎库的时候,可以自己实现一个模块代替它,所以浏览器一般都是自己实现了一套,比如chrome,它会使用自己的音频采集与渲染,视频采集与渲染,I/O当然也可以自己做,那么一般情况下还是用的WebRTC自己的这个网络I /O,通过这四层我们就可以了解到这个WebRTC包括了哪些东西。

那么最后我们再来看一下其中的第三层,最复杂的这一层都做了哪些事情,那它这样的设计,它首先将视频、音频、还有传输分开这个设计就特别好,我传输的时候我只关心我的传输而不需要了解其他的业务逻辑 ,而音频和视频 显然又应该分开,那音频走音频相关的逻辑,视频走视频相关的逻辑,那这里涉及到一个东西就是音频与视频的同步,实际上视频与音频的同步不是在它的引擎层所做的。

那对与音频来说,它首先是包括了编解码,它这里列举了iSAC/iLBC Codec,另外呢 就是NetEQ,这是一个音频缓冲的buffer,用于做网络适配的,防止抖动,那么这里面涉及到很多算法,这块都是放在NetEQ里面,在接下来就是大家头疼的一下处理,包括回音消除等,这是大家最头疼的,我们在开发的时候回音消除是非常关键的一个点,如果你做不好的话,大家会觉得你这个质量很差,但是如果你想做好回音消除,确实好花不少的功夫。当然WebRTC里面它提供了非常成熟的回音消除的算法,那我们需要做的就是调一些参数,在后面我会给大家讲解怎么处理这种回音消除和降噪自动增益、机型检测等等。这些都是在音频模块里做的。

我们再来看视频引擎,视频引擎此前推出的是VP  8,VP 9,包括现在最新的AV one也是谷歌联合其他公司一起研究的新的编解码器,还有 H264现在也支持了,open H264,XH 264在官方的WEBrtc里面是不支持的,如果想支持的话,可以按照open H264的模式去添加进去,这是视频的编解码器。对于视频也有相关的buffer,防止视频抖动,这块是 与传输相关的。还包括图像的处理和图像增强,但是WebRTC的图像增加相对来说做的比较薄,它把相应的接口也留出来了,如果你想做类似美颜、贴图等等这些操作的话,也可以在相应的里面实现,它接口已经提供出来了,你还可以做人脸识别,这些东西都可以加进去,非常的灵活,这是视频引擎方面。

最后是传输,传输底层用的是UDP,在上层用的是RTP,由于浏览器的关系,浏览器需要非常安全的传输,所以有这个SRTP,安全加密后的RTP,为了控制整个流,还有RTPCP,可以把相应的接收和发送的数据报告发给对方,那么对方就可以做留库,Multiplexing可以多个流复用一个通道,下面是P2P相关的,这个包括了STUN TURN ICE,主要就是P2P的一套协议了。

通过这个整体的架构图,大家会对WebRTC 有个初步的了解 ,那他最核心的部分就是这个第三层,包括音频引擎、视频引擎和传输,所有音频、视频的接收与发送都是通过传输去做的,那在传输层包括了线路的检测,有没有丢包 ,网络抖动如何等,通过这些计算去估算你的网络带宽,根据你的网络带宽然后进行音视频的传输,当然不仅仅是音频与视频的传输,还有非音视频数据,或者文件、文本、文字、二进制数据,比方说我们玩游戏的时候可以传输二进制数据,那都可以通过传输层去传输数据 。对于音频视频的传输,他可以通过接口去调用传输层的接口然后进行传输,通过这样一个讲解,大家就会明白,WebRTC他是按照一个分层设计,在底层又划分了各个模块,音频模块、视频模块 和传输模块,各个模块之间 又有相互的调用关系,那么对于上层需要访问的是WebRTC Native  API层。

以上就是WEBRTC整体结构的粗略介绍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章