WebRTC音视频实时互动技术:原理、实战与源码分析
上QQ阅读APP看书,第一时间看更新

2.2 WebRTC客户端架构

实际上,2.1节所讲的所有功能WebRTC都已经实现了。下面让我们看一下WebRTC架构图,如图2.5所示。

图2.5 WebRTC架构图

从WebRTC架构图中可以了解到,它大体上可以分成四层:接口层、Session层、核心引擎层和设备层。下面简要介绍一下每一层的作用。

接口层包括两部分:一是Web层接口;二是Native层接口。也就是说,你既可以使用浏览器开发音视频直播客户端,也可以使用Native(C++、Android、OC等)开发音视频直播客户端。基于浏览器开发音视频直播客户端的知识将在第5章中详细介绍;而关于Native开发的内容则分别在第8章和第12章中详细介绍。

Session层的主要作用是控制业务逻辑,如媒体协商、收集Candidate等,这些操作都是在Session层处理的;这些内容在第5章以及第6章中进行详细讲解。

核心引擎层包括的内容比较多。从大的方面说,它包括音频引擎、视频引擎和网络传输层。音频引擎层包括NetEQ、音频编解码器(如Opus、iLBC)、3A等;视频引擎包括JitterBufer、视频编解码器(VP8、VP9、H264)等;网络传输层包括SRTP、网络I/O多路复用、P2P等。以上这些内容中,本书重点介绍了网络相关的内容,它们分布在第3章、第6章、第9章、第10章等几章中。限于篇幅,其他内容我会陆续发布在我的个人主站 作者个人主站地址:https://avdancedu.com。上。

设备层主要与硬件打交道,它涉及的内容包括:在各终端设备上进行音频的采集与播放,视频的采集,以及网络层等。这部分内容会在本书的最后一章详细介绍。

从上面的描述中可以看到,在WebRTC架构的四层中,最复杂、最核心的是第三层,即引擎层,因此在这里再对引擎层内部的关系做简要介绍。引擎层包括三部分内容,分别是音频引擎、视频引擎以及网络传输。其中音视引擎和视频引擎是相对比较独立的,但它们都需要与网络传输层(transport)打交道。也就是说,它们都需要将自己产生的数据通过网络传输层发送出去;同时,也需要通过网络传输层接收其他端发过来的数据。此外,音频引擎与视频引擎由于要进行音视频同步,所以它们之间也存在着关联关系。

最后,我们再次以音频为例,看一下WebRTC中的数据流是如何流转的(见图2.6)。一方面,当WebRTC作为发送端时,它通过音频设备采集到音频数据后,先要进行3A处理,处理后的数据交由音频编码器编码,编码后由网络传输层将数据发送出去;另一方面,当网络传输层收到数据后,它要判断数据的类型是什么,如果是音频,它会将数据交给音频引擎模块处理,数据首先被放入NetEQ模块做平滑处理及音频补偿处理,之后进行音频解码,最终将解码后的数据通过扬声器播放出来。视频的处理流程与音频的处理流程是类似的。

图2.6 音频数据流图

[1] 作者个人主站地址:https://avdancedu.com。