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

4.2 细化架构

4.1节中介绍了WebRTC一对一通信的整体结构及其过程,下面对其进一步细化,看看它内部又做了什么,如图4.2所示。

图4.2中可以看到它与图4.1的架构是类似的,只不过将每个端的内部进行了细化。图中通信的双方称为Call和Called,即一个主叫,一个被叫。实际上,两个终端内部的逻辑是一样的,这里以Call端为例,来看一下它内部的结构及其运转机制。

在Call端内部,首先调用音视频设备检测模块检测终端是否有可用的音视频设备,即步骤❶;然后执行第❷步,调用音视频采集模块从设备中采集音视频数据;采集到数据后,执行第❸步开启客户端录制(是否开启录制是可选的,用户可以根据自己的需求选择录制或不录制);当数据采集相关的工作就绪后,执行第❹步,通过信令模块与信令服务器建立连接;紧接着执行第❺步,创建RTCPeerConnection对象(RTCPeerConnection对象是WebRTC最核心的对象,后面音视频数据的传输都靠它来完成)。RTCPeerConnection创建好后,系统要先将它与之前采集的音视频数据绑定到一起,这样RTCPeerConnection才知道从哪里获取要发送的数据。以上就是图4.2中前五步所完成的工作。

图4.2 WebRTC 1:1架构图细化

接下来再来看一下RTCPeerConnection创建socket连接的过程。要建立socket连接,RTCPeerConnection首先要执行图4.2中的第❻步,向STUN/TRUN服务器发送请求。STUN/TURN服务器收到Call的请求后,会将Call的外网IP地址和端口号作为应答消息返回去;之后终端执行第❼步,通过信令服务器将Call的连接地址发送给对端。同理,Called也会将它的IP地址和端口发给Call。当通信双方都获得对端的地址后,执行第❽步,此时socket连接就被建立起来了。至此,RTCPeerConnection就可以将音视频数据源源不断地发送给对端。以上就是WebRTC一对一通信的完整过程。