sgcWebRTC 通話もデータも、 ピアツーピアで。 ブラウザーは不要。

sgcWebRTC は、Delphi と C++ Builder 向けの WebRTC メディアエンジンです。リアルタイムの音声通話とビデオ通話、画面共有、SCTP データチャネルをアプリケーションに追加でき、DTLS-SRTP で暗号化され、あらゆるブラウザーの RTCPeerConnection と相互運用できます。コンパイル済みの Object Pascal がオペレーティングシステム自身のメディア API を呼び出すため、プロセス内に WebView も JavaScript ブリッジもありません。

  • Delphi
  • C++ Builder
  • Windows、Linux、macOS
  • iOS と Android
  • STUN / TURN / ICE
  • WebView 不要
独自のシグナリングチャネル WebSocket、HTTP、何でも可 SDP オファー SDP アンサー + Trickle ICE 候補 Delphi アプリ TsgcRTCPeerConnection 音声 · Opus ビデオ · H.264 データチャネル 'chat' プロセス内に WebView なし ブラウザーまたは Delphi RTCPeerConnection OnAudio OnVideoFrame OnMessage JSEP, RFC 8829 DTLS-SRTP RTP メディア + SCTP データ STUN 公開アドレス TURN 遮断時は中継 ICE シグナリングはサーバーを経由し、メディアはピア間を直接流れます。
  • 1ピア接続全体をまかなうコンポーネント
  • 5対応プラットフォーム: Windows、Linux、macOS、iOS、Android
  • 5コーデック: Opus、G.711、VP8、H.264、Motion JPEG
  • 100%の RTP、RTCP、SCTP パケットを暗号化
  • 0プロセス内のブラウザーや WebView
動作を見る

sgcWebRTC を 2 分で紹介します。

Delphi からのピアツーピアのメディアとデータチャネル。STUN、TURN、ICE、RTCPeerConnection を使った、ブラウザーとネイティブ間の接続を紹介します。ナレーションと字幕付きで、再生ボタンを押すまで何もダウンロードされません。

ひとつのコンポーネント

ピア接続のすべてを、ひとつのオブジェクトに。

sgcWebRTC はパレットに新しいコンポーネントを追加しません。sgcWebSockets Enterprise に含まれる同じ TsgcRTCPeerConnection 上で、W3C 準拠の残りの機能(シグナリング、接続性、暗号化、データチャネル、メディア)を有効にします。

ブラウザー互換のシグナリング

CreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription and AddIceCandidate は本物の SDP を生成し、解釈します。再ネゴシエーション、ICE 再起動、W3C の Perfect Negotiation によるグレア処理も組み込み済みです。

コンポーネントを見る →

STUN、TURN、ICE

RTCOptions.ICEServers に対して Trickle ICE または非 Trickle ICE で候補を収集します。STUN からはサーバーリフレクシブ候補を、直接の経路が遮断された場合は TURN からリレー候補を取得します。

DTLS-SRTP 暗号化

選択された ICE ペア上の DTLS ハンドシェイクで SRTP 鍵を導出し、RTP、RTCP、SCTP のすべてのパケットを最初のパケットから暗号化します。メディアの暗号化は無効にできません。ブラウザーが強制するのと同じモデルです。

音声トラックとビデオトラック

AddTrack は、Opus または G.711 の音声トラック、あるいは VP8、H.264、Motion JPEG のビデオトラックを追加します。H.264 はプラットフォームのハードウェアエンコーダー(Media Foundation、VideoToolbox、MediaCodec)を使用します。

コーデックとプラットフォームのマトリックス →

SCTP データチャネル

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");
}
  1. STUN または TURN サーバーを指定するRTCOptions.ICEServers に ICE サーバーを追加します。候補はそれらに対して、順次または一括で収集されます。
  2. SDP を独自のチャネルで運ぶOnLocalDescription でオファーまたはアンサーが、OnICECandidate で各候補が渡されます。ブラウザーアプリケーションと同じように、任意のシグナリングサーバー経由で送信してください。
  3. ピアツーピアで通信するDTLS ハンドシェイクが完了すると、データチャネルが開き、音声トラックとビデオトラックが暗号化されたままピア間を直接流れます。

これはやり取りの片側です。もう一方の側、シグナリングリレー、その上のメディアトラックはタスクガイドで説明しています。

2 つの Delphi アプリをピアツーピアで接続

活用シーン

ブラウザーを埋め込まない WebRTC。

Delphi での他の WebRTC 手法は、完全なブラウザーエンジンを埋め込み、その JavaScript スタックを Pascal から操作します。sgcWebRTC はオペレーティングシステムのメディア API を直接呼び出すため、バイナリが小さく済み、ブラウザーがまったくインストールされていない環境でも同じコンポーネントが動作します。

Delphi アプリからブラウザーへ

標準の SDP と JSEP ステートマシン(RFC 8829)により、ネイティブの Delphi または C++ Builder クライアントから Web ページの RTCPeerConnection へ発信でき、その逆も可能です。

Delphi アプリ同士

2 つのネイティブアプリケーションが音声、ビデオ、データチャネルを直接やり取りし、サーバーを通るのはシグナリングだけです。

タスクガイドを読む →

モバイル、ヘッドレス、キオスク

Chromium バイナリを埋め込まないため、同じコンポーネントが Android と iOS、さらにブラウザーのないヘッドレスサービスやキオスク端末でも動作します。

画面共有とリモートサポート

Windows でデスクトップ、モニター、ウィンドウ、領域をカーソルごとキャプチャし、データチャネルと併せてビデオトラックとして配信できます。

音声通話とビデオ通話

Windows、Linux、Apple プラットフォーム、Android のネイティブなカメラとマイクのキャプチャバックエンドがトラックに直接入力し、レンダラーバックエンドがリモートのビデオを表示します。

低遅延のデータリンク

データチャネル単体で、チャット、テレメトリ、ファイル転送、ゲーム状態の同期に使えます。信頼性と順序はチャネルごとに選べます。

ライセンス

sgcWebSockets Enterprise のアドオン。

sgcWebRTC は、sgcWebSockets Enterprise が ICE と TURN の接続機能とともにすでに搭載している TsgcRTCPeerConnection のメディアエンジンを有効にします。Standard と Professional では利用できません。すべてのライセンスにフルソースコードと 1 年間のアップデートが含まれます。

sgcWebSockets Enterprise

土台となるエディションです。STUN、TURN、ICE クライアント、基本の TsgcRTCPeerConnection に加え、WebSocket、HTTP/2、MQTT などライブラリの残りすべてを含みます。

€699 / 開発者

sgcWebRTC

SDP シグナリング、DTLS-SRTP、SCTP データチャネル、音声トラックとビデオトラック、画面キャプチャ、帯域推定。Single、Team、Site ライセンスを用意しています。

€299 / 開発者

All-Access バンドル

eSeGeCe のすべての製品を 1 年間利用できます。Delphi と .NET、sgcWebSockets Enterprise と sgcWebRTC を含み、Premium Support が付きます。

€1,059 / 開発者

体験版インストーラーは IDE バージョンごとに用意されており、WebRTC コンポーネントがすでに含まれているため、別途ダウンロードは不要です。

sgcWebRTC の価格を見る

Delphi アプリに本物のピア接続を。

音声、ビデオ、データチャネルを、エンドツーエンドで暗号化して、使い慣れた言語から利用できます。

ブログの最新記事

すべての記事を見る →

現在は eSeGeCe の sgcWebRTC ビューを表示しています。

別の切り口を見る →
30日間返金保証ご満足いただけない場合は、ご購入から30日以内に全額返金をリクエストできます。 返金ポリシーを見る