WebRTC 源码分析 二 本地 Candidate 收集

2021-05-24  本文已影响0人  iBOBO
p2p 连接

上篇文章简要的看了一下视频从采集到发送到网络的整个 pipeline。从本篇开始分析从用户进入房间到成功建立 P2P 连接收发数据的过程。由于信令服务不是 WebRTC 的一部分,本文将从 Candidate 收集开始。

candidate 收集

Candidate 分类

Candidate 分为四类

其中是经过对端反射得到的 Candidate,不在本文讨论之列。

PortConfiguration

PortConfiguration 中有两个重要成员 stun_servers 和 relays,其中分别记录了可用的 Stun Server 和 Turn Server 的地址。它们用于在收集阶段探测 srflx candidate 和创建 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

针对每个 NetWork Candidate 收集分为三个阶段:PHASE_UDP、PHASE_RELAY 和 PHASE_TCP 。

PHASE UDP

PHASE_UDP 中又分为 host 和 srflx :

case PHASE_UDP:
      CreateUDPPorts();
      CreateStunPorts();
      break;

Create***Ports 是创建不同类型的 Port,Port 创建完成之后会调用 port->PrepareAddress()。
UDPPort 添加 Local Address 之后会一路回调到 PeerConnection:OnIceCandidate 完成 Candidate 添加。而 StunPort 还要与 StunServers 通信完成 Candidate 收集。

PHASE RELAY

PHASE TCP

上一篇下一篇

猜你喜欢

热点阅读