您现在的位置是:首页 >学无止境 >metaRTC新版本重构ICE全面兼容ICE协议网站首页学无止境
metaRTC新版本重构ICE全面兼容ICE协议
简介metaRTC新版本重构ICE全面兼容ICE协议
概述
metaRTC支持P2P的ICE不完善,老版本只实现了stun和turn,缺乏交互式连接实现,新版本重构ICE部分,实现了交互式连接,全面兼容ICE-FULL/ICE_LITE规范。
metaRTC ICE 流程
收集候选地址(Candidate)
- 通信前先搜集本地多个网卡的IP和端口号(canidate)
- 搜集stun的candidate以及对应的公网IP和端口号。
- 访问TURN server得到所有中继candidate以及公网IP和端口。
- 搜集webrtc tcp candidate
- 搜集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;
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。