> 文章列表 > metaRTC新版本重构ICE全面兼容ICE协议

metaRTC新版本重构ICE全面兼容ICE协议

metaRTC新版本重构ICE全面兼容ICE协议

概述

metaRTC支持P2P的ICE不完善,老版本只实现了stun和turn,缺乏交互式连接实现,新版本重构ICE部分,实现了交互式连接,全面兼容ICE-FULL/ICE_LITE规范。

metaRTC ICE 流程

收集候选地址(Candidate)

  1. 通信前先搜集本地多个网卡的IP和端口号(canidate)
  2. 搜集stun的candidate以及对应的公网IP和端口号。
  3. 访问TURN server得到所有中继candidate以及公网IP和端口。
  4. 搜集webrtc tcp candidate
  5. 搜集Tcp连接的TURN中继candidate

通过上述的步骤,可以得到这个candiate是哪个网卡的,是否存在NAT,可以得到是否是relay。搜集到candidate后需要给这些candidate分配优先级。通常来说turn的candidate优先级最低。

很多路由对udp不太友好,udp被路由屏蔽时metaRTC ICE会智能切换到webrtc tcp或者turn tcp连接。

交换候选地址

通过MQTT/WEBSOCKET等交换candidate信令,建立local candidate队列和remote candidate队列。

连接检测

将local candidate和remote candidate配组(pair),进行多组连接检测,连接检测结束后取的可用连接组合开始webrtc通信。

metaRTC ICE 回调接口

typedef struct{void* context;void (*onIceStateChange)(void* context,int32_t uid,YangIceCandidateState iceState);void (*onConnectionStateChange)(void* context, int32_t uid,YangRtcConnectionState connectionState);void (*onIceCandidate)(void* context, int32_t uid,char* sdp);
}YangIceCallback;