WebRTC音视频开发:React+Flutter+Go实战
上QQ阅读APP看书,第一时间看更新

2.4 连接建立的流程

介绍完ICE框架中各个部分的含义之后,让我们来看一看WebRTC连接建立的流程,大致步骤如下所示。

1)连接双方(Peer)通过第三方服务器来交换(signaling)各自的SDP数据。

2)连接双方通过STUN协议从STUN服务器那里获取到自己的NAT结构、子网IP和公网IP、端口,即Candidate信息。

3)连接双方通过第三方服务器来交换各自的Candidate,如果连接双方在同一个NAT下,那它们仅通过内网Candidate就能建立起连接;如果它们处于不同NAT下,就需要通过STUN服务器识别出的公网Candidate进行通信。

4)如果仅通过STUN服务器发现的公网Candidate仍然无法建立连接,这就需要寻求TURN服务器提供的转发服务,然后将转发形式的Candidate共享给对方。

5)连接双方向目标IP端口发送报文,通过SDP数据中涉及的密钥以及期望传输的内容建立起加密长连接。

下面用一个例子描述连接双方的具体步骤。A(local)和B(remote)代表两个人,初始化并分别创建PeerConnection,并向PeerConnection添加本地媒体流,连接流程如下所示。

1)A创建Offer

2)A保存Offer(设置本地描述)

3)A发送Offer给B

4)B保存Offer(设置远端描述)

5)B创建Answer

6)B保存Answer(设置本地描述)

7)B发送Answer给A

8)A保存Answer(设置远端描述)

9)A发送ICE Candidate给B

10)B发送ICE Candidate给A

11)A、B收到对方的媒体流并播放

这里我们不介绍具体API的使用及代码编写,只需要理解连接建立的流程即可。