ICE Client

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

TsgcICEClient

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

コンポーネントクラス

TsgcICEClient

プロトコル

ICE (RFC 8445)

対応プラットフォーム

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); // out-of-band 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();

主な機能

TsgcRTCPeerConnection の下層で動作する再利用可能な ICE エンジンです。WebRTC 以外の P2P でも単独で使用できます。

候補収集

すべてのローカルインターフェースからホスト候補を、各 STUN サーバーからサーバーリフレクシブ候補を、各 TURN サーバーからリレー候補を、並行して収集します。

ペア生成と優先順位付け

RFC 8445 §6.1.2 に従って候補ペアの優先度を計算し、確認リストを順序付けします。フリーズしたペアはそのファウンデーションが進むにつれてアンフリーズされます。

接続確認

標準に従い、PRIORITY、ICE-CONTROLLING / ICE-CONTROLLED、USE-CANDIDATE 属性付きの STUN BindingRequest を送信します。トリガーされた確認は受信刺激によって発火します。

選定

ペアが成功してコントロールエージェントが USE-CANDIDATE をフラグすると、コンポーネントが iceConnectedOnICEConnectionStateChanged を発火し、最終的に選択されたペアで iceCompleted を発火します。

同意の新鮮さ確認

RFC 7675 の同意新鮮さプローブを実装しています。選定されたペアに定期的な STUN BindingRequest を送信し、同意が失われると OnICEConnectionStateChanged(iceFailed) を発火します。

シグナリング非依存

コンポーネントは特定のシグナリングチャネルを前提としません。WebSocket / SIP / HTTP シグナリングでローカル候補を転送し、リモート候補を受け取って入力してください。

仕様・参考資料

このコンポーネントが実装するプロトコルの公式ソースです。

ドキュメント・デモ

コンポーネントリファレンスへの直接リンク、すぐに実行できるデモプロジェクトの入手、体験版のダウンロードができます。

オンラインヘルプ — TsgcICEClient このコンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。
デモプロジェクト — Demos\35.P2P\04.ICE すぐに実行できるサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています。以下から体験版をダウンロードできます。
技術ドキュメント (PDF) このコンポーネントの機能、クイックスタート、Delphi および C++ Builder 向けのコードサンプル、一次資料のリファレンスを掲載しています。
ユーザーマニュアル (PDF) ライブラリのすべてのコンポーネントを網羅した総合マニュアルです。

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

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