- 本文基于 WebRTC M89

p2p 連接
上篇文章簡(jiǎn)要的看了一下視頻從采集到發(fā)送到網(wǎng)絡(luò)的整個(gè) pipeline。從本篇開(kāi)始分析從用戶(hù)進(jìn)入房間到成功建立 P2P 連接收發(fā)數(shù)據(jù)的過(guò)程。由于信令服務(wù)不是 WebRTC 的一部分,本文將從 Candidate 收集開(kāi)始。

candidate 收集
Candidate 分類(lèi)
Candidate 分為四類(lèi)
- host
- srflx
- relay
- prflx
其中是經(jīng)過(guò)對(duì)端反射得到的 Candidate,不在本文討論之列。
PortConfiguration
PortConfiguration 中有兩個(gè)重要成員 stun_servers 和 relays,其中分別記錄了可用的 Stun Server 和 Turn Server 的地址。它們用于在收集階段探測(cè) srflx candidate 和創(chuàng)建 relay candidate 。
struct RTC_EXPORT PortConfiguration : public rtc::MessageData {
rtc::SocketAddress stun_address;
ServerAddresses stun_servers;
typedef std::vector<RelayServerConfig> RelayList;
RelayList relays;
};
ALLOCATION PHASE
針對(duì)每個(gè) NetWork Candidate 收集分為三個(gè)階段:PHASE_UDP、PHASE_RELAY 和 PHASE_TCP 。
PHASE UDP
PHASE_UDP 中又分為 host 和 srflx :
case PHASE_UDP:
CreateUDPPorts();
CreateStunPorts();
break;
Create***Ports 是創(chuàng)建不同類(lèi)型的 Port,Port 創(chuàng)建完成之后會(huì)調(diào)用 port->PrepareAddress()。
UDPPort 添加 Local Address 之后會(huì)一路回調(diào)到 PeerConnection:OnIceCandidate 完成 Candidate 添加。而 StunPort 還要與 StunServers 通信完成 Candidate 收集。
PHASE RELAY
略
PHASE TCP
略