Delphi ICE クライアント

Delphi/C++ Builder で完全な ICE アルゴリズムを実行します。ホスト候補、サーバーリフレクシブ候補、リレー候補を収集し、STUN 接続確認を実行して RFC 8445 に従って最適なペアを選定します。

TsgcICEClient

RFC 8445 ICE ステートマシンを実装しています。候補収集、優先順位付け、ペア生成、接続確認(USE-CANDIDATE 付き BindingRequest)、選定、同意の新鮮さ確認をサポートします。

コンポーネントクラス

TsgcICEClient

プロトコル

ICE (RFC 8445)

対応プラットフォーム

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) ライブラリのすべてのコンポーネントを網羅した総合マニュアルです。
最もお得な選択: All-AccesseSeGeCe の全製品にプレミアムサポートが付いて、年間 €1,059 からご利用いただけます。
All-Access の価格を見る

Delphi で ICE を使い始めませんか?

体験版をダウンロードして、Delphi アプリケーションに ICE の完全な候補収集と接続確認を追加してください。