Delphi WebRTC ライブラリ — P2P、ICE、STUN、TURN、DataChannel

WebRTC ピア・ツー・ピアスタックのネイティブ Pascal 実装: RTCPeerConnection、ICE 候補収集と接続性チェック、STUN と TURN のクライアント + サーバー、DTLS-SRTP 鍵合意、SCTP データチャネル — WebSocket シグナリングも既に結線済み。

Pascal のためのピア・ツー・ピア、エンド・ツー・エンド

Chromium をバンドルせずに、ブラウザグレードの P2P を Delphi にもたらします。

Delphi WebRTC ライブラリにより、2 つの Delphi プロセス(または Delphi プロセスとブラウザ)が、中央サーバーを通さずに直接、NAT を越えてエンド・ツー・エンドで暗号化されたチャネルを確立できます。sgcWebSockets はすべての WebRTC 構成要素を Pascal コンポーネントとして提供します: TsgcWSPClient_WebRTC は JavaScript の RTCPeerConnection API をミラーし、TsgcSTUNClient / TsgcSTUNServer は RFC 5389 を実装し、TsgcTURNClient / TsgcTURNServer は RFC 5766 を実装し、完全な ICE エージェントがそれらを結びつけます。

ブラウザベースのスタック(Chromium または libwebrtc — 数十メガバイトのネイティブコードと複雑なビルドを必要とする)と異なり、sgcWebSockets 実装は OpenSSL の上の純粋な Pascal で、バイナリにコンパイルされます。Delphi 7 から Delphi 13 まで動作し、Win32/Win64、Linux64、macOS、iOS、Android 用のネイティブバイナリを出荷します。

ピア接続

TsgcWSPClient_WebRTC

ICE / STUN / TURN

P2P コンポーネント

標準

RFC 8825 / 5245 / 5389 / 5766 / 6347 / 4960

エディション

Enterprise

すべての WebRTC コンポーネントを公開

ピア接続が主役ですが、補助部品も第一級コンポーネントです。

RTCPeerConnection

TsgcWSPClient_WebRTC は JavaScript API をミラーします: CreateOfferCreateAnswerSetLocalDescriptionSetRemoteDescriptionAddIceCandidateCreateDataChannelRTCPeerConnection 参照。

SDP オファー / アンサー

組み込みの SDP シリアライザーとパーサー。Chrome と Firefox が生成するのと同じワイヤー形式で、オファーを生成、アンサーを受け入れ、ICE 候補をトリクル送信。

ICE エージェント

完全な候補収集: ホスト、サーバー再帰(STUN 発見)、リレー(TURN 割り当て)。RFC 5245 に従ったペアリング、優先順位付け、接続性チェック。ICE ページ

STUN クライアント + サーバー

NAT 発見とキープアライブのためのスタンドアロン STUN クライアントSTUN サーバー。Pascal の 2 行で独自の STUN エンドポイントを実行。

TURN クライアント + サーバー

リレー割り当て用の TURN クライアントとセルフホスト用の TURN サーバー。長期資格情報、IPv4 + IPv6。

DTLS-SRTP

必須の WebRTC 鍵合意プロトコル。同じ ICE ネゴシエート UDP パス上の DTLS 1.2 ハンドシェイクで、SRTP 用の鍵生成材料をエクスポート。

SCTP データチャネル

WebRTC メディアトランスポート上の信頼性/非信頼性、順序/非順序メッセージ — 任意のアプリケーションデータをピア・ツー・ピアで送信する標準方法。

WebSocket シグナリング

同梱の TsgcWebSocketClient / TsgcWebSocketHTTPServer をシグナリングチャネルとして使用 — すべてに 1 つのライブラリ。

WebSocket シグナリング: 標準パターン

WebRTC はシグナリングプロトコルを定義しません — 自分で持ち込みます。慣例的な選択は、3 つのメッセージタイプを運ぶ WebSocket チャネルです: offer(呼び出し側からの SDP)、answer(着信側からの SDP)、ice-candidate(どちらかからトリクルされた候補)。sgcWebSockets はシグナリングサーバーの両端を既に含みます: マッチしたピア間で JSON メッセージをルーティングする Channels 実装を備えた TsgcWebSocketHTTPServer

ピア接続コンポーネントとシグナリングサーバーは同じライブラリ内に存在するため、サードパーティ SDK を 1 つも統合せずに、完全な WebRTC アプリケーション — 協調的発見、NAT 越え、暗号化された P2P ペイロード — を立ち上げられます。

ICE サーバーの構成

ブラウザが使用するのと同じ IceServers コレクション — 公開サーバーと独自のプライベート TURN の両方で。

uses
  sgcWebSocket, sgcWebSocket_Protocol_WebRTC_Client,
  sgcWebSocket_Protocol_WebRTC_Types;

var
  WSClient: TsgcWebSocketClient;
  RTC: TsgcWSPClient_WebRTC;
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.URL := 'wss://signal.example.com/rtc';

  RTC := TsgcWSPClient_WebRTC.Create(nil);
  RTC.Client := WSClient;

  // Public Google STUN for NAT discovery
  RTC.IceServers.Add.URL := 'stun:stun.l.google.com:19302';

  // Your own TURN for relay when P2P fails
  with RTC.IceServers.Add do
  begin
    URL        := 'turn:turn.example.com:3478';
    UserName   := 'alice';
    Credential := 's3cret';
  end;

  RTC.OnDataChannelMessage := DoMessage;

  WSClient.Active := True;

  // Create a reliable, ordered data channel
  RTC.CreateDataChannel('chat', True, True);
  RTC.CreateOffer;
end;

procedure TForm1.DoMessage(Sender: TObject;
  const aChannel, aText: string);
begin
  Memo1.Lines.Add(aChannel + ': ' + aText);
end;

// Send a message peer-to-peer
RTC.SendDataChannelMessage('chat', 'Hello from Delphi');

Delphi で独自の STUN / TURN を実行

ほとんどのチームは公開 Google STUN とサードパーティ TURN サービス(Twilio、Xirsys、coturn)で開始します。トラフィックが増えると、リレー帯域請求も増えます — 実用上、TURN は WebRTC の中で唯一バイト単位で支払う部分です。ライブラリではセルフホスティングが可能です: TsgcSTUNServerTsgcTURNServer はコンソールアプリや Windows サービスにドロップし、STUN は UDP 3478、TURN は構成可能ポート上の TCP/UDP/TLS でプロトコルを提供します。長期資格情報、IPv4 と IPv6 デュアルスタック、割り当てクォータ、ユーザーごとの帯域制限がすべて組み込まれています。

sgcWebSockets での P2P 詳細

P2P / WebRTC ハブ

すべてのピア・ツー・ピアコンポーネントのランディングページ。

RTCPeerConnection

詳細なコンポーネントリファレンス。

ICE エージェント

候補収集と接続性チェック。

STUNTURN

NAT 発見とリレーサーバー。

ブログ: RTCPeerConnection P2P

Delphi-to-Delphi データチャネルのエンド・ツー・エンドウォークスルー。

ブログ: STUN + TURN サーバーとクライアント

Delphi での独自 STUN/TURN インフラのセルフホスティング。

ブログ: Windows での coturn

相互運用性テストのためのリファレンス C 実装の相互参照。

最初の P2P チャネルを構築

トライアルをダウンロード — WebRTC、STUN、TURN デモはコンパイル可能な Delphi プロジェクトとして同梱。