自 sgcWebSockets 2022.6 起,库中新增了一个组件——实现了 RFC8445 的 ICE 客户端。ICE 是 WebRTC 中使用的协议之一(与 STUN、TURN、WebSockets 等已支持的协议配合使用)。交互式连接建立(ICE)是一种计算机网络技术,用于在对等网络中寻找两台计算机之间尽可能直接通信的方式。该技术最常用于交互式媒体,如 VoIP、点对点通信、视频和即时消息。在此类应用中,通过中央服务器通信速度慢且成本高,而由于 NAT、防火墙和其他网络障碍,互联网上客户端应用程序之间的直接通信非常复杂。
收集候选地址
ICE 开始收集候选地址,通常会获取本地 IP 地址、通过 STUN 协议获取自反地址,以及通过 TURN 协议获取中继地址。
调用 GatherCandidates 方法开始收集,这将启动一个内部计时器:首先获取本地 IP 地址,然后连接 STUN 服务器获取自反 IP 地址,最后连接 TURN 服务器获取中继 IP 地址。
每次获取到新的候选地址时,事件 OnICECandidate 将被异步调用;若收集候选地址时发生任何错误,将触发事件 OnICECandidateError。
oICE := TsgcICEClient.Create(nil);
oTURN := TsgcTURNClient.Create(nil);
oTURN.Host := 'www.esegece.com';
oTURN.Port := 3478;
oTURN.TURNOptions.Authentication.Credentials := stauLongTermCredential;
oTURN.TURNOptions.Authentication.Username := 'sgc';
oTURN.TURNOptions.Authentication.Password := 'secret';
oICE.GatherCandidates();
procedure OnICECandidate(Sender: TObject; const aCandidate: TsgcICE_Candidate);
begin
DoLog('[#Candidate] ' + aCandidate.AsString);
end;
配对候选地址
获取到本地和远端候选地址且设置了 SDP 描述后,ICE 发起方客户端可以开始处理所有候选地址对,以找到能够交换数据的地址对。调用 ProcessCandidates 方法启动此过程。
ProcessCandidates 方法通过发送 STUN 绑定数据包来评估所有候选地址对;若从另一对等端收到 STUN 绑定数据包作为应答,则表明这两个对等端之间可以建立连接,该地址对即被提名。
配对成功时,事件 OnICECandidatePairNominated 将被异步触发;若配对发生错误或超时无法连接,则触发事件 OnICECandidatePairFailed。
