细化架构
在 4.1 节中介绍了 WebRTC
一对一通信的整体结构及其过程,下面对其进一步细化,看看它内部又做了什么,如图 4.2 所示。
从图 4.2 中可以看到它与图 4.1 的架构是类似的,只不过将每个端的内部进行了细化。图中通信的双方称为 Call
和 Called
,即一个主叫,一个被叫。实际上,两个终端内部的逻辑是一样的,这里以 Call
端为例,来看一下它内部的结构及其运转机制。
在 Call
端内部,首先调用音视频设备检测模块检测终端是否有可用的音视频设备,即步骤❶;然后执行第❷步,调用音视频采集模块从设备中采集音视频数据;采集到数据后,执行第❸步开启客户端录制(是否开启录制是可选的,用户可以根据自己的需求选择录制或不录制);当数据采集相关的工作就绪后,执行第❹步,通过信令模块与信令服务器建立连接;紧接着执行第❺步,创建 RTCPeerConnection
对象(RTCPeerConnection
对象是 WebRTC
最核心的对象,后面音视频数据的传输都靠它来完成)。RTCPeerConnection
创建好后,系统要先将它与之前采集的音视频数据绑定到一起,这样 RTCPeerConnection
才知道从哪里获取要发送的数据。以上就是图 4.2 中前五步所完成的工作。

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