ICE 客户端
在 Delphi/C++Builder 中运行完整的 ICE 算法 — 收集主机、服务器反射和中继候选,执行 STUN 连接检查,按 RFC 8445 提名最佳候选对。
在 Delphi/C++Builder 中运行完整的 ICE 算法 — 收集主机、服务器反射和中继候选,执行 STUN 连接检查,按 RFC 8445 提名最佳候选对。
实现 RFC 8445 ICE 状态机 — 候选收集、优先级排序、候选对生成、连接检查(带 USE-CANDIDATE 的 BindingRequest)、提名和同意刷新。
TsgcICEClient
Windows, macOS, Linux, iOS, Android
Professional / Enterprise
配置 STUN/TURN ICE 服务器,调用 GatherCandidates,与对端带外交换候选列表,然后 StartChecks 提名可用候选对。
uses
sgcP2P;
var
ICE: TsgcICEClient;
begin
ICE := TsgcICEClient.Create(nil);
ICE.IceServers.Add('stun:stun.l.google.com:19302');
ICE.IceServers.Add('turn:turn.example.com', 'alice', 'secret');
ICE.OnICELocalCandidate := procedure(Sender: TObject;
const aCandidate: string)
begin
SignalToPeer(aCandidate); // 带外 SDP / WebSocket 信令
end;
ICE.OnICEConnectionStateChanged := procedure(Sender: TObject;
const aState: TsgcICEConnectionState)
begin
Memo1.Lines.Add('ICE: ' + GetEnumName(TypeInfo(TsgcICEConnectionState), Ord(aState)));
end;
ICE.GatherCandidates;
end;
// uses: sgcP2P
TsgcICEClient *ICE = new TsgcICEClient(this);
ICE->IceServers->Add("stun:stun.l.google.com:19302");
ICE->GatherCandidates();
可复用的 ICE 引擎,在 TsgcRTCPeerConnection 下层运行 — 或独立用于非 WebRTC 的 P2P。
并行枚举来自每个本地接口的主机候选、来自每个 STUN 服务器的服务器反射候选以及来自每个 TURN 服务器的中继候选。
按 RFC 8445 §6.1.2 计算候选对优先级并排序检查列表。冻结的候选对在其基础取得进展时解冻。
按标准发送带 PRIORITY、ICE-CONTROLLING / ICE-CONTROLLED、USE-CANDIDATE 属性的 STUN BindingRequest。触发检查在入站刺激时触发。
当候选对成功且控制代理标记 USE-CANDIDATE 时,组件以 iceConnected 触发 OnICEConnectionStateChanged,然后在最终选定对上触发 iceCompleted。
实现 RFC 7675 同意刷新探测 — 在提名对上定期发送 STUN BindingRequest,同意丢失时触发 OnICEConnectionStateChanged(iceFailed)。
组件不假定特定的信令通道 — 您通过 WebSocket / SIP / HTTP 信令编组本地候选,并将远程候选反馈回来。