ブラウザー互換のシグナリング
CreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription and AddIceCandidate は本物の SDP を生成し、解釈します。再ネゴシエーション、ICE 再起動、W3C の Perfect Negotiation によるグレア処理も組み込み済みです。
sgcWebRTC は、Delphi と C++ Builder 向けの WebRTC メディアエンジンです。リアルタイムの音声通話とビデオ通話、画面共有、SCTP データチャネルをアプリケーションに追加でき、DTLS-SRTP で暗号化され、あらゆるブラウザーの RTCPeerConnection と相互運用できます。コンパイル済みの Object Pascal がオペレーティングシステム自身のメディア API を呼び出すため、プロセス内に WebView も JavaScript ブリッジもありません。
Delphi からのピアツーピアのメディアとデータチャネル。STUN、TURN、ICE、RTCPeerConnection を使った、ブラウザーとネイティブ間の接続を紹介します。ナレーションと字幕付きで、再生ボタンを押すまで何もダウンロードされません。
sgcWebRTC はパレットに新しいコンポーネントを追加しません。sgcWebSockets Enterprise に含まれる同じ TsgcRTCPeerConnection 上で、W3C 準拠の残りの機能(シグナリング、接続性、暗号化、データチャネル、メディア)を有効にします。
CreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription and AddIceCandidate は本物の SDP を生成し、解釈します。再ネゴシエーション、ICE 再起動、W3C の Perfect Negotiation によるグレア処理も組み込み済みです。
RTCOptions.ICEServers に対して Trickle ICE または非 Trickle ICE で候補を収集します。STUN からはサーバーリフレクシブ候補を、直接の経路が遮断された場合は TURN からリレー候補を取得します。
選択された ICE ペア上の DTLS ハンドシェイクで SRTP 鍵を導出し、RTP、RTCP、SCTP のすべてのパケットを最初のパケットから暗号化します。メディアの暗号化は無効にできません。ブラウザーが強制するのと同じモデルです。
AddTrack は、Opus または G.711 の音声トラック、あるいは VP8、H.264、Motion JPEG のビデオトラックを追加します。H.264 はプラットフォームのハードウェアエンコーダー(Media Foundation、VideoToolbox、MediaCodec)を使用します。
CreateDataChannel は、順序保証あり/なし、信頼性あり/部分的信頼性のチャネルを開きます(RFC 8831/8832)。Send、SendBytes、OnMessage、OnMessageBinary でテキストとバイナリのペイロードをやり取りできます。
Google Congestion Control 方式の遅延ベース推定器がビデオエンコーダーの目標ビットレートを制御し、RTCP NACK と PLI、RFC 4588 の RTX、RED/ULPFEC がそれを支えます。
ICE サーバーを設定し、SDP と ICE のイベントを接続し、データチャネルを開いてからオファーを作成します。Delphi と C++ Builder で同じ API を使えます。
uses
sgcP2P;
var
oRTC: TsgcRTCPeerConnection;
begin
oRTC := TsgcRTCPeerConnection.Create(nil);
oRTC.RTCOptions.ICEServers.AddURL('stun:stun.l.google.com:19302');
oRTC.OnLocalDescription := OnLocalDescriptionHandler;
oRTC.OnICECandidate := OnICECandidateHandler;
oRTC.OnConnectionStateChange := OnConnectionStateChangeHandler;
oRTC.OnDataChannel := OnDataChannelHandler;
oRTC.CreateDataChannel('chat'); // forces RTCOptions.DTLS on
oRTC.CreateOffer; // gathers ICE candidates, builds the SDP offer
end;
procedure TForm1.OnLocalDescriptionHandler(Sender: TObject;
const aType, aSDP: string);
begin
// send aType + aSDP to the remote peer over your own signaling channel
end;
procedure TForm1.OnDataChannelHandler(Sender: TObject;
aChannel: TsgcRTCDataChannel);
begin
aChannel.OnMessage := OnChannelMessageHandler;
aChannel.Send('hello');
end;
// includes: sgcP2P.hpp
TsgcRTCPeerConnection *oRTC = new TsgcRTCPeerConnection(NULL);
oRTC->RTCOptions->ICEServers->AddURL("stun:stun.l.google.com:19302");
oRTC->OnLocalDescription = OnLocalDescriptionHandler;
oRTC->OnICECandidate = OnICECandidateHandler;
oRTC->OnConnectionStateChange = OnConnectionStateChangeHandler;
oRTC->OnDataChannel = OnDataChannelHandler;
oRTC->CreateDataChannel("chat"); // forces RTCOptions->DTLS on
oRTC->CreateOffer(); // gathers ICE candidates, builds the SDP offer
void __fastcall TForm1::OnLocalDescriptionHandler(TObject *Sender,
const String aType, const String aSDP)
{
// send aType + aSDP to the remote peer over your own signaling channel
}
void __fastcall TForm1::OnDataChannelHandler(TObject *Sender,
TsgcRTCDataChannel *aChannel)
{
aChannel->OnMessage = OnChannelMessageHandler;
aChannel->Send("hello");
}
これはやり取りの片側です。もう一方の側、シグナリングリレー、その上のメディアトラックはタスクガイドで説明しています。
Delphi での他の WebRTC 手法は、完全なブラウザーエンジンを埋め込み、その JavaScript スタックを Pascal から操作します。sgcWebRTC はオペレーティングシステムのメディア API を直接呼び出すため、バイナリが小さく済み、ブラウザーがまったくインストールされていない環境でも同じコンポーネントが動作します。
標準の SDP と JSEP ステートマシン(RFC 8829)により、ネイティブの Delphi または C++ Builder クライアントから Web ページの RTCPeerConnection へ発信でき、その逆も可能です。
2 つのネイティブアプリケーションが音声、ビデオ、データチャネルを直接やり取りし、サーバーを通るのはシグナリングだけです。
タスクガイドを読む →Chromium バイナリを埋め込まないため、同じコンポーネントが Android と iOS、さらにブラウザーのないヘッドレスサービスやキオスク端末でも動作します。
Windows でデスクトップ、モニター、ウィンドウ、領域をカーソルごとキャプチャし、データチャネルと併せてビデオトラックとして配信できます。
Windows、Linux、Apple プラットフォーム、Android のネイティブなカメラとマイクのキャプチャバックエンドがトラックに直接入力し、レンダラーバックエンドがリモートのビデオを表示します。
データチャネル単体で、チャット、テレメトリ、ファイル転送、ゲーム状態の同期に使えます。信頼性と順序はチャネルごとに選べます。
sgcWebRTC は、sgcWebSockets Enterprise が ICE と TURN の接続機能とともにすでに搭載している TsgcRTCPeerConnection のメディアエンジンを有効にします。Standard と Professional では利用できません。すべてのライセンスにフルソースコードと 1 年間のアップデートが含まれます。
土台となるエディションです。STUN、TURN、ICE クライアント、基本の TsgcRTCPeerConnection に加え、WebSocket、HTTP/2、MQTT などライブラリの残りすべてを含みます。
SDP シグナリング、DTLS-SRTP、SCTP データチャネル、音声トラックとビデオトラック、画面キャプチャ、帯域推定。Single、Team、Site ライセンスを用意しています。
eSeGeCe のすべての製品を 1 年間利用できます。Delphi と .NET、sgcWebSockets Enterprise と sgcWebRTC を含み、Premium Support が付きます。
体験版インストーラーは IDE バージョンごとに用意されており、WebRTC コンポーネントがすでに含まれているため、別途ダウンロードは不要です。
sgcWebRTC の価格を見る音声、ビデオ、データチャネルを、エンドツーエンドで暗号化して、使い慣れた言語から利用できます。
sgcWebRTC は、Delphi、C++ Builder、Lazarus、.NET の開発者がネットワーク、署名、Web インターフェイス、API にすでに使っているコンポーネントの仲間に加わります。
Delphi、C++ Builder、Lazarus、.NET 向けの WebSocket、HTTP/2、MQTT、AMQP、WebRTC、AI、そして 30 を超える API 統合。sgcWebRTC の土台となる Enterprise ライセンスです。
生の QUIC トランスポートと、HTTP/3 クライアントおよびサーバー、WebTransport。sgcWebSockets Enterprise のアドオンです。
Delphi、C++ Builder、.NET 向けの 15 のネイティブ UI 製品: グリッド、チャート、ダッシュボード、プランナー、マップ、PDF、レポート。
Delphi、C++ Builder、.NET 向けの、Bootstrap 5 と htmx によるサーバーサイド HTML および UI コンポーネント。
ドキュメント向けの XAdES、PAdES、CAdES、ASiC と、コード向けの Authenticode、ClickOnce、NuGet、VSIX。
パック、アドオンなど