Delphi 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
Enterprise
STUN/TURN の ICE サーバーを設定し、GatherCandidates を呼び出して候補リストをピアと(帯域外で)交換した後、ProcessCandidates を実行してチェックを行い、動作するペアを選定してください。
uses
sgcP2P, sgcP2P_ICE_Classes;
// TFormICE は FClient: TsgcICEClient と FLog: TStringList を保持します
procedure TFormICE.Gather;
begin
FClient := TsgcICEClient.Create(nil);
FClient.ICEServers.AddURL('stun:stun.l.google.com:19302');
FClient.ICEServers.AddURL('turn:turn.example.com', 'alice', 'secret');
FClient.OnICECandidate := OnICECandidate;
FClient.OnICECandidatePairNominated := OnICECandidatePairNominated;
FClient.GatherCandidates;
end;
procedure TFormICE.OnICECandidate(Sender: TObject;
const aCandidate: TsgcICE_Candidate);
begin
// AsString は candidate 行です。シグナリングチャネルにそのまま渡せます
SignalToPeer(aCandidate.AsString);
end;
// リモート候補はシグナリングチャネル経由で到着します
procedure TFormICE.AddRemoteCandidate(const aCandidate: string);
begin
FClient.AddRTCIceCandidate(aCandidate);
FClient.ProcessCandidates;
end;
procedure TFormICE.OnICECandidatePairNominated(Sender: TObject;
const aCandidatePair: TsgcICE_CandidatePair);
begin
FLog.Add('nominated: ' + aCandidatePair.Local.Address + ' -> ' +
aCandidatePair.Remote.Address);
end;
// includes: sgcP2P.hpp, sgcP2P_ICE_Classes.hpp
TsgcICEClient *Client = new TsgcICEClient(this);
Client->ICEServers->AddURL("stun:stun.l.google.com:19302");
Client->OnICECandidate = OnICECandidate;
Client->GatherCandidates();
TsgcRTCPeerConnection の下層で動作する再利用可能な ICE エンジンです。WebRTC 以外の P2P でも単独で使用できます。
すべてのローカルインターフェースからホスト候補を、各 STUN サーバーからサーバーリフレクシブ候補を、各 TURN サーバーからリレー候補を、並行して収集します。
RFC 8445 §6.1.2 に従って候補ペアの優先度を計算し、確認リストを順序付けします。フリーズしたペアはそのファウンデーションが進むにつれてアンフリーズされます。
標準に従い、PRIORITY、ICE-CONTROLLING / ICE-CONTROLLED、USE-CANDIDATE 属性付きの STUN BindingRequest を送信します。トリガーされた確認は受信刺激によって発火します。
ペアが成功し、controlling エージェントが USE-CANDIDATE を設定すると、コンポーネントは選定されたペアとともに OnICECandidatePairNominated を発火します。aCandidatePair.Local / Remote から、選ばれた 2 つのアドレスを確認できます。
RFC 7675 の同意新鮮さプローブを実装しています。選定されたペアに対して ConsentInterval ミリ秒ごとに Binding リクエストを送信し、ConsentTimeout を過ぎても応答がない場合は、理由 Consent Freshness Timeout とともに OnICECandidatePairFailed を発火します。
コンポーネントは特定のシグナリングチャネルを前提としません。aCandidate.AsString を WebSocket、SIP、HTTP のシグナリングに載せて送信し、返ってきた内容を AddRTCIceCandidate に渡してから ProcessCandidates を呼び出してください。
コンポーネントリファレンスへの直接リンク、すぐに実行できるデモプロジェクトの入手、体験版のダウンロードができます。
| オンラインヘルプ — TsgcICEClient このコンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。 | 開く | |
| デモプロジェクト — Demos\35.P2P\04.ICE すぐに実行できるサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています。以下から体験版をダウンロードできます。 | 開く | |
| 技術ドキュメント (PDF) このコンポーネントの機能、クイックスタート、Delphi および C++ Builder 向けのコードサンプル、一次資料のリファレンスを掲載しています。 | 開く | |
| ユーザーマニュアル (PDF) ライブラリのすべてのコンポーネントを網羅した総合マニュアルです。 | 開く |