sgcWebRTC 機能マトリックス — 音声、映像、データチャネル | eSeGeCe

sgcWebRTC 機能マトリックス

sgcWebRTC が TsgcRTCPeerConnection に追加するすべてを、機能ごとに整理しています。シグナリングと接続性は sgcWebSockets Enterprise の基本コンポーネントに含まれています。このパックはその上にメディアエンジンを解放します。音声、映像、画面キャプチャ、データチャネル、暗号化、帯域幅推定です。すべての機能は Delphi と C++ Builder で同じように動作し、すべてのライセンスに完全なソースコードが付属します。

シグナリング

Enterprise の基本機能 & SDP

音声

Opus / G.711

映像

VP8 / H.264 / MJPEG

データチャネル

RFC 8831 / 8832

画面共有

キャプチャ & 描画

SRTP / DTLS

暗号化されたメディア

帯域幅推定

輻輳制御

Enterprise が提供するもの、sgcWebRTC が追加するもの

基本的な接続性はすでに sgcWebSockets に含まれています。sgcWebRTC は、同じコンポーネント上に SDP、データチャネル、メディアの領域を解放します。

機能提供元備考
STUN クライアント(TsgcSTUNClientsgcWebSockets Standardサーバーリフレクシブ候補の発見で、Enterprise 未満でも利用できます。
TURN クライアント & サーバー、ICE クライアント(TsgcTURNClientTsgcICEClientsgcWebSockets Enterpriseリレー候補と、完全な ICE 候補の収集・ノミネートです。
基本の TsgcRTCPeerConnection、従来型の WebSocket リレーシグナリングsgcWebSockets EnterpriseGatherCandidatesWriteData、そして OnRTCWebSocket… / OnRTCCandidatePairNominated / OnRTCConnect イベントが、内蔵の RTCPeerConnection プロトコルサーバーを通じて ICE 接続性と DTLS トランスポートを駆動します。SDP、データチャネル、メディアはありません。
手動の SDP オファー/アンサーシグナリングsgcWebRTCCreateOfferCreateAnswerSetLocalDescriptionSetRemoteDescriptionAddIceCandidateRestartIce。ブラウザーが期待する JSEP(RFC 8829)の状態機械です。
再ネゴシエーション & glare の解決sgcWebRTCAddTrack / RemoveTrack 後の再オファー、OnNegotiationNeeded、ロールバック、そして Polite による W3C の perfect-negotiation ルールです。
Trickle ICEsgcWebRTCTrickleICERTCOptions.TrickleICEAuto が、収集完了のタイムアウトを待たずに候補を見つかり次第ストリーミングします。
コネクションとシグナリングの状態sgcWebRTCConnectionState(W3C RTCPeerConnectionState のサブセット)と SignalingState(RTCSignalingState のサブセット)に加え、OnConnectionStateChangeOnError です。
SCTP データチャネル、RTP 音声/映像、SRTP 暗号化sgcWebRTC下記の各節を参照してください。3 つとも、Enterprise の基本機能に加えてこのパックが必要です。

Opus & G.711 音声トラック

1 回の AddTrack 呼び出しで音声トラックをピア接続に追加します。PCM を入力すると RTP が出力され、リモートトラックについても同じ経路が逆方向に動作します。

機能メンバー備考
音声トラックの追加AddTrack(rtctkAudio, aCodec)TsgcRTCTrack を返します。RemoveTrack で送信を停止します。
Opus コーデックcctAudioOpus48 kHz / ステレオ。動的にロードされる libopus バインディング経由です。
G.711 コーデックcctAudioPCMU / cctAudioPCMA8 kHz / モノラルの μ-law と A-law で、外部ライブラリなしで常に利用できます。
キャプチャした音声の送信TsgcRTCTrack.SendPCM(aPCM, aSamplesPerChannel)エンコーダーのサンプルレートとチャンネル数に合わせた 16 ビット符号付きインターリーブ PCM です。
デコードされた音声の受信OnAudio(aPCM, aSampleRate, aChannels, aSamplesPerChannel)RTP が到着してデコードされるたびに、リモートトラック上で発生します。
エンコーダー / デコーダーへのアクセスAudioEncoder / AudioDecoderその裏にある TsgcAudioEncoderBase / TsgcAudioDecoderBase オブジェクトで、トラックごとに差し替えられます。
トラックのライフサイクルEnabledEndedOnEndedEnabled := False は再ネゴシエーションなしでミュートします。Ended は、リモート側でトラックが破棄されたか再オファーされたことを反映します。
マイクのキャプチャTsgcMediaCaptureSource の派生クラスプラットフォームごとのネイティブキャプチャ(Windows の waveIn に加え、Linux、Apple、Android の各バックエンド)が SendPCM に直接供給します。

VP8、H.264 & Motion JPEG 映像トラック

映像も音声と同じ形をしています。フレームを入力すると RTP が出力されます。コーデックはトラックごとに選択でき、H.264 の場合はその下でプラットフォーム自身のハードウェアエンコーダーが動きます。

機能メンバー備考
映像トラックの追加AddTrack(rtctkVideo, aCodec)音声と同じ呼び出しで、映像用の TsgcCodecType を指定します。
VP8 コーデックcctVideoVP8動的にロードされる libvpx バインディングで、Windows と Linux で利用できます。
H.264 コーデックcctVideoH264プラットフォームごとのネイティブハードウェアエンコーダーです: Media Foundation(Windows)、VideoToolbox(iOS/macOS)、MediaCodec(Android)。Annex-B ストリーム、RFC 6184 のペイロード化で、SPS/PPS はすべてのキーフレームにインバンドで運ばれます。
Motion JPEG コーデックcctVideoJPEGGDI+ ベースで、Windows と Delphi XE 以降が対象です。
生フレームの送信TsgcRTCTrack.SendVideoFrame(aFrame, aForceKeyFrame)TsgcVideoFrame(I420/NV12/RGB/BGR 系)をエンコードして送信します。
エンコード済みフレームの送信SendEncodedFrame(aData, aIsKeyFrame)外部でエンコードされたフレームのために、トラック自身のエンコーダーをバイパスします。
デコード済み / 生フレームの受信OnVideoFrame / OnEncodedFrameデコードされた TsgcVideoFrame、またはキーフレームフラグ付きの生のエンコード済みビットストリームです。
キーフレームの要求RequestKeyFrameリモートの送信側に RTCP PLI を送ります。
エンコーダー / デコーダーへのアクセスVideoEncoder / VideoDecoderその裏にある TsgcVideoEncoderBase / TsgcVideoDecoderBase オブジェクトです。
カメラのキャプチャTsgcMediaCaptureSource の派生クラスプラットフォームごとのキャプチャバックエンド(Windows、Linux、Apple、Android)が SendVideoFrame に直接供給します。
描画TsgcMediaRenderer の派生クラスデコードされたリモート映像向けの、プラットフォームごとのレンダラーバックエンドです(Windows、Linux、Apple、Android)。

SCTP データチャネル(RFC 8831 / 8832)

SCTP-over-DTLS 上で、順序保証あり/なし、完全な信頼性、または再送回数か有効期間で制限された配送に対応します。

機能メンバー備考
チャネルを開くCreateDataChannel(aLabel, aOrdered, aMaxRetransmits, aMaxPacketLifeTime, aProtocol)TsgcRTCDataChannel を返し、RTCOptions.DTLS を強制的に有効にします。
リモート側が開いたチャネルOnDataChannel(aChannel)ピアがこのコネクション上でチャネルを開くと発生します。
テキスト / バイナリの送信Send(aText) / SendBytes(aBytes)チャネルがまだ開いていない場合は False を返します。
受信OnMessage(aText) / OnMessageBinary(aBytes)SCTP を駆動するスレッド上で発生します。
ライフサイクルイベントOnOpenOnCloseOnError(aError)W3C の RTCDataChannel のライフサイクルに一致します。
チャネルの状態StateHasIdIdSCTP のストリーム id は、DTLS の役割が確定して初めて確定します(RFC 8832 のパリティ)。
フロー制御BufferedAmountMaxMessageSizeMaxMessageSize はピア自身の a=max-message-size を追跡し、サイズ超過の送信をローカルで拒否します。
信頼性の確認ReliabilityReliabilityParamOrderedMaxRetransmitsMaxPacketLifeTimeチャネルがネゴシエートした内容をそのまま読み取れます。
クローズCloseRE-CONFIG ベースのクローズです。State は closing を経て closed になり、OnClose が発生します。
ピア接続レベルDataChannelCountDataChannels[i]コネクション上で開いているすべてのチャネルを列挙します。

デスクトップ、モニター、ウィンドウ & 領域のキャプチャ

キャプチャソースは、カメラと同じ SendVideoFrame の経路に供給します。画面の内容も、単なるもう 1 つの映像トラックです。

機能メンバー備考
キャプチャバックエンドTsgcScreenCapture_WinGDI ベースのデスクトップ、モニター、ウィンドウ、領域キャプチャです。現在は Windows のみです。
モニターの列挙GetMonitors / MonitorIndexモニターごとに 1 行(解像度、位置、プライマリフラグ)。-1 は仮想デスクトップ全体をキャプチャします。
領域のキャプチャRegionスクリーン座標の矩形です。空の矩形は領域モードを無効にします。
レイヤードウィンドウ / 透過ウィンドウCaptureLayeredCAPTUREBLT を使用するため、レイヤードウィンドウや透過ウィンドウも含まれます。
カーソルIncludeCursorキャプチャしたフレームにマウスカーソルを描画します。
ダウンスケーリングMaxWidth0 でダウンスケールを無効化します。それ以外の場合、幅の広いフレームはエンコード前に縮小されます。
フレームレートキャプチャソースの FrameRateデフォルトは 5 fps で、画面コンテンツでは最大 30 fps まで対応します。
エンコードと送信TsgcRTCTrack.SendVideoFrameキャプチャした BGRA32 フレームは、他のソースと同様にトラックの映像エンコーダーに供給されます。

必須のメディア暗号化

コネクション上のすべての RTP、RTCP、SCTP パケットは、DTLS ハンドシェイク以降、常に暗号化されています。平文モードはありません。

機能詳細
鍵交換指名された ICE 候補ペア上での DTLS ハンドシェイク(RFC 5764 DTLS-SRTP)が、SRTP の鍵材料を導出します。
DTLS の役割手動シグナリングでは、役割は a=setup から決まります(オファー側は passive、アンサー側は active)。IsDTLSClient が確定後にそれを報告します。
SRTP 保護プロファイルSRTP_AES128_CM_SHA1_80SRTP_AES128_CM_SHA1_32SRTP_AEAD_AES_128_GCMSRTP_AEAD_AES_256_GCM。DTLS ハンドシェイク中にネゴシエートされます。
SSRC ごとの暗号状態RFC 3711 3.2.3 節が要求する通り、SSRC ごとに 1 つの暗号コンテキスト(ロールオーバーカウンター、リプレイウィンドウ)を持ちます。BUNDLE によってすべての m 行が 1 つの DTLS-SRTP トランスポートにまとめられる場合でも同様です。
適用範囲RTP/RTCP メディアと、データチャネルを運ぶ SCTP アソシエーションの両方をカバーします。1 つの m 行だけでなく、コネクション全体です。
バックエンドOpenSSL による SRTP 実装です。

輻輳制御 & 損失耐性

Google Congestion Control 方式の遅延ベースの推定器がリンクを追跡し、映像エンコーダーの目標ビットレートを制御します。

機能メンバー備考
遅延ベースの推定器TsgcBWE_Estimatorパケットを 5 ms の送信バーストにグループ化し、グループ間の遅延に対してトレンドラインフィルターを実行し、リンクを normal、overuse、underuse に分類します。
レート制御AIMD コントローラーoveruse では確認済みレートの 85% まで低下し、underuse では維持し、normal では増加します(直近の既知の上限から遠いときは乗法的に、近いときは加法的に)。
損失時の上限損失率の追跡損失率が 10% を超えると上限が下がり、2% を下回ると MaxBitrate まで毎秒 8% ずつ回復します。
トランスポート全体のフィードバックTWCC(RTCP)BuildRTCP_TWCC / ParseRTCP_TWCC によるトランスポート全体の輻輳制御フィードバックで、それのみに対応するピア向けのフォールバック上限として REMB も備えます。
有効化RTCOptions.Media.CongestionControlリモートディスクリプションが対応するヘッダー拡張・フィードバックもネゴシエートした場合にのみ有効になります。
損失の回復RTCOptions.Media.RTXRTCP NACK を受けての、RFC 4588 による映像ストリームの再送です。
前方誤り訂正RTCOptions.Media.FEC送信映像ストリームに対する RED / ULPFEC 保護です。
ペーシングRTCOptions.Media.Pacing送信映像パケットを、バーストさせるのではなく推定ビットレートでペース配分します。
キーフレームの回復RTCP PLI受信側トラックでの RequestKeyFrame が、損失後に送信側へ新しいキーフレームを要求します。
最もお得な選択: All-AccesseSeGeCe の全製品にプレミアムサポートが付いて、年間 €1,059 からご利用いただけます。
All-Access の価格を見る

sgcWebRTC で構築する

無料体験版をダウンロードして、Delphi や C++ Builder から本物のピア接続を開きましょう。