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