原因:根据源码进行分析,在此记录一下webrtc中ice连接流程。
概述:Agent首先获取需要的地址,然后地址进行交换,随后进行连通性测试,最终选择一个最合理的连接用于数据传输。
ICE:interactive connectivity establishment交互式连接建立。是一组基于offer/answer模式解决NAT穿越的协议集合。在此简单介绍一下NAT,NAT(Network Address Translation网络地址转换)。目前NAT类型主要分为完全锥型,地址限制锥型,端口限制锥型,对称型,每种类型数据交互模式也不同,需要记住对称型NAT会存在打洞失败的问题。其中ICE主要包含STUN+TURN等协议,TURN协议的主要作用就是用于NAT打洞失败后,利用Relay进行转发。
接下来进行源码分析:
1:首先agent获取地址,其中地址包括host address,srvflx address,relay address 三种。host地址就是我们本地的地址,可以用于局域网内angent之间通信。srvflx address为经过NAT进行反射后的对应的公网地址,通过该地址进行agent之间进行通信。relay address则是经过TURN服务器分配的代理地址,用于进行转发使用。其中使用的优先级为host > srvflx > relay。
通过创建UDPPort,在创建过程中就会进行本地host信息的采集,并按照candidate进行组合。并通过sigslot进行数据回调。
PeerConnection::SetLocalDescription
WebRtcSession::MayStartGathering
P2PTransportChannel::MaybeSta