Delphi WebRTC ライブラリ — P2P、ICE、STUN、TURN、DataChannel
WebRTC ピア・ツー・ピアスタックのネイティブ Pascal 実装: RTCPeerConnection、ICE 候補収集と接続性チェック、STUN と TURN のクライアント + サーバー、DTLS-SRTP 鍵合意、SCTP データチャネル — WebSocket シグナリングも既に結線済み。
WebRTC ピア・ツー・ピアスタックのネイティブ Pascal 実装: RTCPeerConnection、ICE 候補収集と接続性チェック、STUN と TURN のクライアント + サーバー、DTLS-SRTP 鍵合意、SCTP データチャネル — WebSocket シグナリングも既に結線済み。
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
RFC 8825 / 5245 / 5389 / 5766 / 6347 / 4960
Enterprise
ピア接続が主役ですが、補助部品も第一級コンポーネントです。
TsgcWSPClient_WebRTC は JavaScript API をミラーします: CreateOffer、CreateAnswer、SetLocalDescription、SetRemoteDescription、AddIceCandidate、CreateDataChannel。RTCPeerConnection 参照。
組み込みの SDP シリアライザーとパーサー。Chrome と Firefox が生成するのと同じワイヤー形式で、オファーを生成、アンサーを受け入れ、ICE 候補をトリクル送信。
完全な候補収集: ホスト、サーバー再帰(STUN 発見)、リレー(TURN 割り当て)。RFC 5245 に従ったペアリング、優先順位付け、接続性チェック。ICE ページ。
NAT 発見とキープアライブのためのスタンドアロン STUN クライアントと STUN サーバー。Pascal の 2 行で独自の STUN エンドポイントを実行。
リレー割り当て用の TURN クライアントとセルフホスト用の TURN サーバー。長期資格情報、IPv4 + IPv6。
必須の WebRTC 鍵合意プロトコル。同じ ICE ネゴシエート UDP パス上の DTLS 1.2 ハンドシェイクで、SRTP 用の鍵生成材料をエクスポート。
WebRTC メディアトランスポート上の信頼性/非信頼性、順序/非順序メッセージ — 任意のアプリケーションデータをピア・ツー・ピアで送信する標準方法。
同梱の TsgcWebSocketClient / TsgcWebSocketHTTPServer をシグナリングチャネルとして使用 — すべてに 1 つのライブラリ。
WebRTC はシグナリングプロトコルを定義しません — 自分で持ち込みます。慣例的な選択は、3 つのメッセージタイプを運ぶ WebSocket チャネルです: offer(呼び出し側からの SDP)、answer(着信側からの SDP)、ice-candidate(どちらかからトリクルされた候補)。sgcWebSockets はシグナリングサーバーの両端を既に含みます: マッチしたピア間で JSON メッセージをルーティングする Channels 実装を備えた TsgcWebSocketHTTPServer。
ピア接続コンポーネントとシグナリングサーバーは同じライブラリ内に存在するため、サードパーティ SDK を 1 つも統合せずに、完全な WebRTC アプリケーション — 協調的発見、NAT 越え、暗号化された P2P ペイロード — を立ち上げられます。
ブラウザが使用するのと同じ 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');
ほとんどのチームは公開 Google STUN とサードパーティ TURN サービス(Twilio、Xirsys、coturn)で開始します。トラフィックが増えると、リレー帯域請求も増えます — 実用上、TURN は WebRTC の中で唯一バイト単位で支払う部分です。ライブラリではセルフホスティングが可能です: TsgcSTUNServer と TsgcTURNServer はコンソールアプリや Windows サービスにドロップし、STUN は UDP 3478、TURN は構成可能ポート上の TCP/UDP/TLS でプロトコルを提供します。長期資格情報、IPv4 と IPv6 デュアルスタック、割り当てクォータ、ユーザーごとの帯域制限がすべて組み込まれています。
すべてのピア・ツー・ピアコンポーネントのランディングページ。
詳細なコンポーネントリファレンス。
候補収集と接続性チェック。
Delphi-to-Delphi データチャネルのエンド・ツー・エンドウォークスルー。
Delphi での独自 STUN/TURN インフラのセルフホスティング。
相互運用性テストのためのリファレンス C 実装の相互参照。