WebRTC のためのスケーラブル映像符号化(SVC)拡張

W3C 作業草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/WD-webrtc-svc-20260914/
最新の公開バージョン:
https://www.w3.org/TR/webrtc-svc/
最新の編集者草案:
https://w3c.github.io/webrtc-svc/
履歴:
https://www.w3.org/standards/history/webrtc-svc/
コミット履歴
編集者:
Henrik Boström (Google)
元編集者:
Peter Thatcher (Microsoft Corporation) - まで
Bernard Aboba (Microsoft Corporation)
フィードバック:
GitHub w3c/webrtc-svc (プルリクエスト, 新しい課題, 未解決の課題)
public-webrtc@w3.org に件名を [webrtc-svc] … メッセージのトピック … として送信 (アーカイブ)
参加
メーリングリスト
IETF AVTCORE 作業部会

概要

この文書は、WebRTC 仕様を拡張して、Scalable Video Coding (SVC) のエンコーディングパラメーターの構成を可能にするための、 WebIDL による一連の ECMAScript API を定義する。SVC エンコーダーおよびデコーダーの能力の発見は、 Media Capabilities 仕様によって扱われる。

この文書の状態

この節では、この文書の公開時点における状態を 説明します。現在の W3C 公開文書の一覧およびこの技術報告書の最新版は、 W3C 標準および草案 索引で確認できます。

この API は、W3C ORTC コミュニティグループで行われた予備的な作業に基づいています。

この文書は、Web リアルタイム コミュニケーション作業部会によって、 勧告 トラックを使用した作業草案として公開されました。

作業草案としての公開は、 W3C およびその会員による承認を意味するものではありません。

これは草案文書であり、いつでも他の文書によって更新、置換、または廃止される 可能性があります。この文書を進行中の作業以外のものとして引用することは 適切ではありません。

この文書は、 W3C 特許 ポリシーの下で活動するグループによって作成されました。 W3C は、このグループの成果物に関連して 行われた特許開示の公開一覧を 維持しています。そのページには、 特許を開示するための手順も含まれています。ある特許に 必須請求項が含まれていると考え、 その特許について実際に知識を有する個人は、 W3C 特許ポリシーの第6節に従って情報を開示しなければなりません。

この文書には、 2025年8月18日付 W3C プロセス文書が適用されます。

1. はじめに

このセクションは規範的ではありません。

この仕様は、WebRTC 仕様 [WEBRTC] を拡張し、 スケーラブル映像符号化 (SVC) のエンコードパラメーターを 構成できるようにします。SVC エンコーダーおよびデコーダーの能力の検出は、 Media Capabilities API [Media-Capabilities] によって処理されます。

この仕様は WebRTC オブジェクトおよび メソッドの動作を変更しません。したがって、Offer/Answer ネゴシエーションおよび エンコードパラメーターに関する制約は、[WEBRTC] セクション 5.2 に記載されているとおり、引き続き適用されます: 「setParameters() は SDP の再ネゴシエーションを引き起こさず、 Offer/Answer によってネゴシエートされた範囲内でメディアスタックが送受信する内容を変更するためにのみ 使用できます。」

その結果、この仕様では、 VP8 [RFC6386]、VP9 [VP9]、AV1 [AV1] コーデックなど、 Offer/Answer で SVC サポートをネゴシエートしないコーデックの エンコードパラメーターを構成できます。 時間スケーラビリティの構成は、 H.264 [ITU-T-REC-H.264] および H.265 [ITU-T-REC-H.265] コーデックでもサポートできます。

2. 適合性

規範的ではないと明記されたセクションに加えて、この仕様のすべてのオーサリングガイドライン、図、例、および注記は 規範的ではありません。この仕様のそれ以外のすべては規範的です。

この文書におけるキーワード してもよい、しなければならない、および するべきである は、 BCP 14 [RFC2119] [RFC8174] に記載されているとおり、ここに示すように すべて大文字で表記されている場合に限って解釈されます。

この仕様は、単一の 製品、すなわち、この仕様に含まれるインターフェイスを実装する ユーザーエージェントに適用される適合基準を定義します。

アルゴリズムまたは特定の手順として記述された適合要件は、 最終結果が同等である限り、どのような方法でも実装できます。 特に、この仕様で定義されるアルゴリズムは 理解しやすいことを意図したものであり、高い性能を意図したものではありません。

この仕様で定義される API を ECMAScript を使用して実装する実装は、 Web IDL 仕様 [WEBIDL] で定義される ECMAScript バインディングと整合する方法で実装しなければなりません。 これは、この仕様がその仕様および用語を使用しているためです。

3. 用語

「simulcast envelope」という用語は、[WEBRTC] セクション 5.4.1 で定義されています。

この仕様は、[WEBRTC] で定義されるオブジェクト、メソッド、内部スロット および辞書を参照します。

スケーラブル映像符号化 (SVC) について、「single-session transmission」 (SST) および「multi-session transmission」(MST) という用語は、 [RFC6190] で定義されています。この仕様は SST のみをサポートし、 MST はサポートしません。

「Single Real-time Transport Protocol stream Single Transport」という用語 (SRST) は、 [RFC7656] セクション 3.7 で定義され、単一のトランスポート内ですべてのレイヤーを送信し、 単一のリアルタイムトランスポートプロトコル (RTP) ストリームと 同期ソース (SSRC) を使用する SVC 実装を指します。「Multiple RTP stream Single Transport」(MRST) という用語も、 [RFC7656] セクション 3.7 で定義され、 単一のトランスポート内ですべてのレイヤーを送信し、 各レイヤーに個別の SSRC を持つ複数の RTP ストリームを使用する実装を指します。 この仕様は SRST のみをサポートし、MRST はサポートしません。SRST をサポートする RTP ペイロード仕様を持つコーデックには VP8 [RFC7741]、VP9 [VP9-PAYLOAD]、AV1 [AV1-RTP-SPEC]、H.264 [RFC6184] および H.265 [RFC7798] が含まれます。

「S モード」という用語は、複数の エンコードが同じ SSRC 上で送信されるスケーラビリティモードを指します。これには、"S2T1"、"S2T1h"、 "S2T2"、 "S2T2h"、"S2T3"、"S2T3h"、"S3T1"、"S3T1h"、"S3T2"、"S3T2h"、 "S3T3" および "S3T3h" の scalabilityMode 値が含まれます。

選択的転送ミドルボックス (SFM) という用語は、[RFC7667] のセクション 3.7 で定義されています。

4. 構成

この仕様は、RTCRtpEncodingParameters 辞書を拡張することで、SVC のエンコードパラメーターを構成できるようにします。

4.1 RTCRtpEncodingParameters 辞書の拡張

WebIDLpartial dictionary RTCRtpEncodingParameters {
             DOMString scalabilityMode;
};

辞書 RTCRtpEncodingParameters のメンバー

scalabilityMode、型は DOMString

このメンバーは、送信側の kind が "video" の場合にのみ 存在できます。 存在する場合、このストリームで 使用されるスケーラビリティモードの 大文字と小文字を区別する識別子を示します。スケーラビリティモードは セクション 5 で定義されています。

4.2 動作

[WEBRTC] は、 addTransceiver() (セクション 5.1) および setParameters() (セクション 5.2) におけるエラー処理について説明しており、 サポートされていないエンコードパラメーターによる 「hardware-encoder-error」 を示すための RTCError の使用や、その他のエラーを含みます。 無効な scalabilityMode 値が setParameters() または addTransceiver() に提供された場合、実装は規定された方法で RTCError およびその他のエラーを 使用します。

4.2.1 addTransceiver()

[WEBRTC] セクション 5.1 は、 addTransceiver() 内の sendEncodings の検証について説明しています。 scalabilityMode を検証するには、 addTransceiver sendEncodings 検証手順の手順 3 の後に、次の手順を追加します:

  1. sendEncodings が、codec 値 codec が 存在し、かつ同じエンコードの scalabilityMode 値が codec でサポートされていないエンコードをいずれか 含む場合、OperationError を throw します。
  2. そうでなく、sendEncodings が、 scalabilityMode 値が kind の実装済み送信 コーデックのリスト内のどのコーデックによってもサポートされていないエンコードをいずれか 含む場合、OperationError を throw します。
  3. sendEncodings に格納されている RTCRtpEncodingParameters が、値 true の active メンバーを持つエンコードを 1 個より多く 含み、かつ sendEncodings が、 scalabilityMode 値が「S モード」を表し、かつ active メンバーの 値が true であるエンコードをいずれか 含む場合、 OperationError を throw します。

addTransceiver() および setCodecPreferences() メソッドが Offer/Answer ネゴシエーションの完了前に呼び出された場合、ネゴシエートされる コーデックおよびその能力は不明な場合があります。この状況では、 sendEncodings で構成された scalabilityMode 値は、 最終的にネゴシエートされたコーデックでサポートされない場合があります。ただし、要求された scalabilityMode 値が サポートされているすべてのコーデックに対して無効である場合、または混合サイマルキャストトランスポートが要求された場合にのみ エラーになります。

目的の scalabilityMode 値を適用できるようにするため、setCodecPreferences() を使用して、 目的の構成をサポートするコーデックを優先するか、それらのコーデックのみを含めることができます。 たとえば、空間サイマルキャストとともに時間スケーラビリティが必要な場合、 addTransceiver() が呼び出されるとき、 sendEncodings を、異なる解像度の複数の サイマルキャストストリームを送信し、それぞれのストリームが 時間スケーラビリティを利用するように構成できます。VP8、VP9、AV1 コーデック実装のみが 時間スケーラビリティをサポートしている場合、setCodecPreferences() を使用して H.264/AVC コーデックを Offer から削除でき、 時間スケーラビリティをサポートするコーデックがネゴシエートされる 可能性を高められます。

sendEncodings を使用して addTransceiver() により複数のサイマルキャストストリームの送信を 要求する場合、「S モード」を 要求することはできません。ブラウザーは、 複数の SSRC と RID を持つサイマルキャストエンコードを送信するか、 あるいは、すべてのサイマルキャストエンコードを単一の RTP ストリーム上で送信するようにのみ構成できます。両方のサイマルキャストトランスポート 技術を同時に使用することは許可されません。

4.2.2 setParameters()

[WEBRTC] セクション 5.2 は、 setParameters() 内の parameters の検証について説明しています。 操作が InvalidModificationError で拒否された promise を生じさせる条件のリスト (setParameters 検証 手順の手順 6) に、次の 条件を挿入します:

"L1T1" スケーラビリティモードでは、setParameters() を使用して SVC エンコードをオフにできます。 "L1T1" が setParameters() を使用して設定された場合、 getParameters() への応答で返されます。

4.2.3 getParameters()

初回ネゴシエーションが完了する前は、 getParameters() は、addTransceiver() または setParameters() によって最後に設定されたとおり、 encodings 内の各 エンコードの scalabilityMode 値を返します。 encodings 内のエンコードに scalabilityMode 値が提供されていなかった場合、 または値が正常に設定されなかった場合、 getParameters() はそのエンコードについて scalabilityMode 値を 返しません。

初回ネゴシエーションが完了した後、getParameters() は、初回ネゴシエーション前に値を持っていた encodings 内の各エンコードについて、 現在構成されている scalabilityMode 値を返します。これは、 addTransceiver() または setParameters() で要求された値とは異なっていてもよいです。 たとえば、ネゴシエーション中に選択されたコーデックに、目的の scalabilityMode 値をサポートするエンコーダーが含まれていない場合、ユーザーエージェントは別の値を選択してもよいです。構成が 満足できるものでない場合、setParameters() を使用して変更できます。

addTransceiver() または setParameters() が encodings 内のエンコードについて scalabilityMode 値を 提供しなかった場合、初回ネゴシエーションが 完了した後、getParameters() は scalabilityMode 値を返さず、エンコーダーは そのエンコードの RTP ストリームについて、コーデックの既定の scalabilityMode を使用します。 各コーデックの既定の scalabilityMode は実装依存です。既定の scalabilityMode は、時間スケーラビリティモードのいずれか (例: "L1T1"、"L1T2"、"L1T3" など) であるべきです。

4.2.4 ネゴシエーションの問題

このセクションは規範的ではありません。

SVC は、SFM などの会議 サーバーが、参加者のデバイス 特性および利用可能な帯域幅に基づいてレイヤーを選択的に転送するビデオ会議で最も頻繁に使用されます。このような環境では、 アプリケーションは会議サーバーと送受信する コーデックをネゴシエートします。しかし、スケーラビリティモードは Offer/Answer ではネゴシエートされないため、アプリケーションは ブラウザーおよび会議サーバーがどのスケーラビリティモードをサポートしているかを 別の手段で判断する必要があります。

[Media-Capabilities] API により、スケーラブル映像符号化に対する エンコーダーおよびデコーダーの サポートを検出できます。scalabilityMode は、エンコーダーが scalabilityMode 値をサポートしているかどうかを照会するために使用され、それが 「サポートされている」、「滑らかである」、および「電力効率が高い」かどうかを示します。

[Media-Capabilities] API は、空間スケーラビリティモードに対する デコーダーのサポートに関する情報も提供します。spatialScalability は、デコーダーが空間予測をサポートする能力を持つかどうかを示します。 これには、現在の解像度とは異なる解像度のフレームを 依存関係として使用する能力が必要です。spatialScalability が true に設定されている場合、デコーダーは、エンコーダーがサポートする任意の scalabilityMode 値をデコードできます。 spatialScalability が false に設定されているか存在しない場合、デコーダーは空間スケーラビリティモードをデコードできませんが、 エンコーダーがサポートするそれ以外のすべての scalabilityMode 値を デコードできます。

アプリケーションが、使用可能なコーデックと scalabilityMode 値の組み合わせを特定したら、 次に、これらの組み合わせのうちどれが SFM によってサポートされているかを判断する必要があります。 これを処理する方法の 1 つは、SFM が転送できるコーデックと スケーラビリティモードの組み合わせを受信能力の形式で示すことです。 SFM の能力を受信した後、アプリケーションは、 ブラウザーの RTCRtpSender と SFM の受信側がサポートするコーデックと scalabilityMode 値の積集合を計算できます。これは、 ブラウザーの addTransceiver() および setParameters() メソッドに渡される引数を決定するために使用できます。

以下にいくつかの例を示します:

  1. コーデックペイロードを解析する SFM は、 スケーラビリティなしの H.264/AVC コーデックと、 時間スケーラビリティを持つ VP8 コーデックのみをサポートする場合があります。一方、ブラウザーは、 時間スケーラビリティを持つ VP8、時間および空間スケーラビリティを持つ VP9 と AV1、 および時間スケーラビリティを持つ H.264/AVC をエンコードできる場合があります。 この例では、SVC を使用しようとするアプリケーションは、 時間スケーラビリティを持つ VP8 のみをエンコードできます。
  2. SFM は、AV1 コーデックで "S2T1" および "S2T1h" スケーラビリティ モードを使用する単一ストリームサイマルキャストのみをサポートする一方、ブラウザーは、 VP9 および AV1 の両方のコーデックで "S2T1"、"S2T1h"、"S3T1" および "S3T1h" モードを使用する単一 ストリームサイマルキャストのエンコードをサポートする場合があります。この 例では、 アプリケーションは AV1 コーデックで最大 2 レイヤーの 単一ストリームサイマルキャストのみを使用できます。アプリケーションが 3 レイヤーを利用することを望む場合、単一 ストリームサイマルキャストの使用を断念し、代わりにマルチストリームサイマルキャストをネゴシエートすることを選択できます。

ブラウザーと SFM の能力の積集合を計算する際に、RTP ヘッダー拡張を考慮する必要がある状況があります。 SFM がコーデックペイロードを解析できない場合 (そのように設計されていないため、またはペイロードが暗号化されているため)、 RTP ヘッダー拡張 ([AV1-RTP-SPEC] の付録 A で定義される AV1 Dependency Descriptor など) のネゴシエーションが、 SFM が特定のコーデックを転送するために必要になる場合があります。 これを考慮するため、コーデックの転送に必要な RTP ヘッダー拡張を SFM の受信能力に追加できます。その後、アプリケーションは、 ブラウザーの RTCRtpSender と SFM の受信側によってサポートされるコーデック、ヘッダー拡張、および scalabilityMode 値の積集合を計算できます。

5. スケーラビリティモード

この仕様でサポートされる scalabilityMode 値と、 それらに関連する識別子および特性を、以下の表に示します。 scalabilityMode 値の名前 (大文字と小文字を区別します)が、 [AV1] セクション 6.7.5 で割り当てられたスケーラビリティモード識別子、およびセクション 9 で提供される依存関係図へのリンクとともに示されています。

[AV1] および VP9 [VP9] 仕様は、表で定義されている すべての scalabilityMode 値を サポートしていますが、他のコーデック 仕様はそうではありません。たとえば、VP8 [RFC6386]、H.264 [RFC6184] および H.265 [RFC7798] は、 時間スケーラビリティ(例: "L1T2"、"L1T3")のみをサポートします。 また、VP8 [RFC6386]、H.264 [RFC6184] および H.265 [RFC7798] では、 異なる SSRC 上でのサイマルキャストの転送のみが許可されるため、「S」モード(複数のエンコードが 単一の RTP ストリーム上で転送されるモード)はサポートされません。

スケーラビリティモード識別子 空間レイヤー 解像度比 時間レイヤー レイヤー間依存関係 AV1 scalability_mode_idc
"L1T1" 1 1 該当なし
"L1T2" 1 2 SCALABILITY_L1T2
"L1T3" 1 3 SCALABILITY_L1T3
"L2T1" 2 2:1 1 はい SCALABILITY_L2T1
"L2T2" 2 2:1 2 はい SCALABILITY_L2T2
"L2T3" 2 2:1 3 はい SCALABILITY_L2T3
"L3T1" 3 2:1 1 はい SCALABILITY_L3T1
"L3T2" 3 2:1 2 はい SCALABILITY_L3T2
"L3T3" 3 2:1 3 はい SCALABILITY_L3T3
"L2T1h" 2 1.5:1 1 はい SCALABILITY_L2T1h
"L2T2h" 2 1.5:1 2 はい SCALABILITY_L2T2h
"L2T3h" 2 1.5:1 3 はい SCALABILITY_L2T3h
"L3T1h" 3 1.5:1 1 はい
"L3T2h" 3 1.5:1 2 はい
"L3T3h" 3 1.5:1 3 はい
"S2T1" 2 2:1 1 いいえ SCALABILITY_S2T1
"S2T2" 2 2:1 2 いいえ SCALABILITY_S2T2
"S2T3" 2 2:1 3 いいえ SCALABILITY_S2T3
"S2T1h" 2 1.5:1 1 いいえ SCALABILITY_S2T1h
"S2T2h" 2 1.5:1 2 いいえ SCALABILITY_S2T2h
"S2T3h" 2 1.5:1 3 いいえ SCALABILITY_S2T3h
"S3T1" 3 2:1 1 いいえ SCALABILITY_S3T1
"S3T2" 3 2:1 2 いいえ SCALABILITY_S3T2
"S3T3" 3 2:1 3 いいえ SCALABILITY_S3T3
"S3T1h" 3 1.5:1 1 いいえ SCALABILITY_S3T1h
"S3T2h" 3 1.5:1 2 いいえ SCALABILITY_S3T2h
"S3T3h" 3 1.5:1 3 いいえ SCALABILITY_S3T3h
"L2T2_KEY" 2 2:1 2 はい SCALABILITY_L3T2_KEY
"L2T2_KEY_SHIFT" 2 2:1 2 はい SCALABILITY_L3T2_KEY_SHIFT
"L2T3_KEY" 2 2:1 3 はい SCALABILITY_L3T3_KEY
"L2T3_KEY_SHIFT" 2 2:1 3 はい SCALABILITY_L3T3_KEY_SHIFT
"L3T1_KEY" 3 2:1 1 はい
"L3T2_KEY" 3 2:1 2 はい SCALABILITY_L4T5_KEY
"L3T2_KEY_SHIFT" 3 2:1 2 はい SCALABILITY_L4T5_KEY_SHIFT
"L3T3_KEY" 3 2:1 3 はい SCALABILITY_L4T7_KEY
"L3T3_KEY_SHIFT" 3 2:1 3 はい SCALABILITY_L4T7_KEY_SHIFT

5.1 scalabilityMode 値の追加に関するガイドライン

scalabilityMode 値を提案する場合、 次の原則に従うべきです:

  1. 提案される scalabilityMode は、セクション 5 の表に対する項目を定義しなければならず、 スケーラビリティモード識別子、空間および 時間レイヤー、解像度比、レイヤー間依存関係、および対応する AV1 scalability_mode_idc 値(割り当てられている場合)の値を含めなければなりません。
  2. スケーラビリティモード識別子は、既存の 命名方式と一貫しているべきです。この方式では、 2:1 の解像度比を使用する x 個の 空間レイヤーと y 個の時間レイヤーを持つ scalabilityMode を表すために LxTy を使用します。 LxTyh は、1.5:1 の解像度 比を持つ x 個の空間レイヤーと y 個の時間レイヤーを表します。SxTy は、 2:1 の解像度比を持つ x 個のサイマルキャストエンコードを持ち、それぞれの サイマルキャストエンコードに y 個の時間レイヤーを含む scalabilityMode を表します。SxTyh は 1.5:1 の解像度比を表します。LxTy_KEY は、 2:1 の解像度比を使用する x 個の空間レイヤーと y 個の時間レイヤーを持ち、 空間レイヤーがキーフレームでのみ下位の空間レイヤーに 依存する scalabilityMode を表します。LxTy_KEY_SHIFT モードは、 2:1 の解像度比を使用する x 個の空間レイヤーと y 個の時間レイヤーを持ち、空間レイヤーがキーフレームでのみ下位の空間レイヤーに依存し、 後続の フレームでは時間識別子が上方向にシフトされる scalabilityMode を表します。
  3. セクション 9 で提供される形式で、依存関係図を提供しなければなりません。

6. 例

6.1 空間サイマルキャスト および時間スケーラビリティ

このセクションは規範的ではありません。

この例では、[WEBRTC] セクション 7.1(例 1)を拡張し、 それぞれ 3 個の時間レイヤーを持つ 3 個の空間 サイマルキャストレイヤーを、各サイマルキャスト レイヤーに SSRC と RID を使用して送信する方法を示します。元の例から変更されているのは "sendEncodings" 属性のみです。

const signaling = new SignalingChannel(); // JSON.stringify/parse を処理する
const constraints = {audio: true, video: true};
const configuration = {'iceServers': [{'urls': 'stun:stun.example.org'}]};
let pc;

// start() を呼び出して開始する
async function start() {
  pc = new RTCPeerConnection(configuration);

  // "negotiationneeded" イベントによって Offer の生成をトリガーする
  pc.onnegotiationneeded = async () => {
    try {
      await pc.setLocalDescription();
      // Offer を相手のピアに送信する
      signaling.send({description: pc.localDescription});
    } catch (err) {
      console.error(err);
    }
  };

  try {
    // ローカルストリームを取得し、セルフビューに表示して送信対象として追加する
    const stream = await navigator.mediaDevices.getUserMedia(constraints);
    selfView.srcObject = stream;
    pc.addTransceiver(stream.getAudioTracks()[0], {direction: 'sendonly'});
    pc.addTransceiver(stream.getVideoTracks()[0], {
      direction: 'sendonly',
      sendEncodings: [
        {rid: 'q', scaleResolutionDownBy: 4.0, scalabilityMode: 'L1T3'},
        {rid: 'h', scaleResolutionDownBy: 2.0, scalabilityMode: 'L1T3'},
        {rid: 'f', scalabilityMode: 'L1T3'}
      ]
    });
  } catch (err) {
    console.error(err);
  }
}

signaling.onmessage = async ({data: {description, candidate}}) => {
  try {
    if (description) {
      await pc.setRemoteDescription(description);
      // Offer を受信した場合は Answer で応答する必要がある
      if (description.type == 'offer') {
        await pc.setLocalDescription();
        signaling.send({description: pc.localDescription});
      }
    } else if (candidate) {
      await pc.addIceCandidate(candidate);
    }
  } catch (err) {
    console.error(err);
  }
};

これは、2 個の空間レイヤー(2:1 の比率)と 3 個の時間レイヤーを持つ例です。

let sendEncodings = [
  {scalabilityMode: 'L2T3'}
];

これは、各サイマルキャストレイヤーが 3 個の時間レイヤーを持つ、混合コーデックサイマルキャストの例です。

let sendEncodings = [
  {rid: 'q', codec: {clockRate: 90000, mimeType: 'video/AV1'}, scaleResolutionDownBy: 4.0, scalabilityMode: 'L1T3'},
  {rid: 'h', codec: {clockRate: 90000, mimeType: 'video/VP8'}, scaleResolutionDownBy: 2.0, scalabilityMode: 'L1T3'},
  {rid: 'f', codec: {clockRate: 90000, mimeType: 'video/VP8'}, scalabilityMode: 'L1T3'}
];

これは、単一の SSRC 上で、それぞれ 3 個の時間レイヤーを持つ 3 個の空間サイマルキャストレイヤーの例です。

let sendEncodings = [
  {scalabilityMode: 'S3T3'}
]

6.2 SVC エンコーダーの能力

このセクションは規範的ではありません。

これは、[WEBRTC] および [Media-Capabilities] を実装するブラウザーによって返される encodingInfo(configuration) の例です。

const contentType = 'video/VP9';

const configuration = {
  type: 'webrtc',
  video: {
    contentType,
    width: 640,
    height: 480,
    bitrate: 10000,
    framerate: 29.97,
    scalabilityMode: 'L3T3_KEY'
  }
};

try {
  const info = await navigator.mediaCapabilities.encodingInfo(configuration);

  if (!info.supported) {
    console.log(`${contentType} はサポートされていません。`);
    return;
  }
  console.log(`${contentType} は ${info.smooth || '非'}スムーズであり、` +
              `${info.powerEfficient || '非'}電力効率的です`);
} catch (err) {
  console.error(err, ' が encodingInfo の失敗を引き起こしました');
}

6.3 SFM の能力

このセクションは規範的ではありません。

これは、VP8、VP9、および AV1 の時間スケーラビリティモードの転送のみを サポートする SFM によって返される受信能力の例です。

 "codecs": [
    {
      "clockRate": 90000,
      "mimeType": "video/VP8",
      "scalabilityModes": [
        "L1T1",
        "L1T2",
        "L1T3"
      ]
    },
    {
      "clockRate": 90000,
      "mimeType": "video/VP9",
      "scalabilityModes": [
        "L1T1",
        "L1T2",
        "L1T3"
      ]
    },
    {
      "clockRate": 90000,
      "mimeType": "video/AV1",
      "scalabilityModes": [
        "L1T1",
        "L1T2",
        "L1T3"
      ]
    }
]

7. プライバシーに関する考慮事項

このセクションは規範的ではありません。

このセクションは規範的ではなく、新しい動作を規定するものではありません。代わりに、 仕様の他の部分にすでに存在する情報を 要約します。WebRTC API に関するプライバシー上の考慮事項は、 [WEBRTC] セクション 13 で説明されています。

7.1 永続的な情報

WebRTC では、スケーラブル符号化ツールの使用は ピア間でネゴシエートされないため、サポートされている scalabilityMode 値も、 空間予測に対する デコーダーのサポートも SDP には公開されません。

setParameters() API を使用して各コーデックに scalabilityMode 値を 設定しようとすることで、 アプリケーションは、どの構成の試行が成功し、 どれが失敗するかを確認して、エンコーダーがサポートする値を判断できます。 ただし、これによって scalabilityMode 値がハードウェアまたはソフトウェアのエンコーダー (あるいはその両方)でサポートされているかどうかは分かりません。setParameters() は RTCRtpReceiver ではサポートされていないため、 デコーダーのサポートを判断するための同等の 実験を行うことはできません。

ソフトウェアエンコーダーによってサポートされる scalabilityMode 値は通常、ハードウェアでサポートされる値の スーパーセットであるため、これらの実験から得られる情報は、 Web ページですでに利用可能な、使用中のブラウザーとの 高い相関があります。メディアの送受信が開始された後は、 パフォーマンス特性、または使用中のコーデックについて scalabilityMode 値を デコードできるかどうかに関する情報を取得でき、 ハードウェア能力についてより多くの情報が得られます。

[Media-Capabilities] セクション 3.1 で述べられているように、Media Capabilities API は、この 仕様から得られる情報よりも「より正確で 一貫した情報を提供する可能性があります」。また、 [Media-Capabilities] セクション 3.1 で述べられているように、「特定のクラスの デバイスは非常によく似たデコード/エンコード 能力を持つことが予想されるため、この情報は Web ページですでに利用可能な他の情報と高い相関を持つことが 予想されます。」

8. セキュリティに関する考慮事項

このセクションは規範的ではありません。

このセクションは規範的ではなく、新しい動作を規定するものではありません。代わりに、 仕様の他の部分にすでに存在する情報を 要約します。WebRTC プロトコルのセキュリティに関する考慮事項は、 [RFC8827] で説明されており、WebRTC API に関するセキュリティおよびプライバシー上の考慮事項は、 [WEBRTC] セクション 13 で説明されています。

9. スケーラビリティモードの依存関係 図

この仕様で定義されるスケーラビリティモードの依存関係図を 以下に示します。

9.1 L1T1

L1T1: 単一レイヤー
図 1 L1T1: 1 レイヤーのエンコード

9.2 L1T2

L1T2: 2 レイヤーの時間スケーラビリティエンコード
図 2 L1T2: 1 レイヤーの空間および 2 レイヤーの時間スケーラビリティエンコード

9.3 L1T3

L1T3: 3 レイヤーの時間スケーラビリティエンコード
図 3 L1T3: 1 レイヤーの空間および 3 レイヤーの時間スケーラビリティエンコード

9.4 L2T1 および L2T1h

L2T1 および L2T1h: 2 レイヤーの空間および 1 レイヤーの時間スケーラビリティエンコード
図 4 L2T1 および L2T1h: 2 レイヤーの空間および 1 レイヤーの時間スケーラビリティエンコード

9.5 L2T1_KEY

L2T1_KEY: 2 レイヤーの空間および 1 レイヤーの時間スケーラビリティ K-SVC エンコード
図 5 L2T1_KEY: 2 レイヤーの空間および 1 レイヤーの時間スケーラビリティ K-SVC エンコード

9.6 L2T2 および L2T2h

L2T2 および L2T2h: 2 レイヤーの空間および 2 レイヤーの時間スケーラビリティエンコード
図 6 L2T2 および L2T2h: 2 レイヤーの空間および 2 レイヤーの時間スケーラビリティエンコード

9.7 L2T2_KEY

L2T2_KEY: 2 レイヤーの空間および 2 レイヤーの時間スケーラビリティ K-SVC エンコード
図 7 L2T2_KEY: 2 レイヤーの空間および 2 レイヤーの時間スケーラビリティ K-SVC エンコード

9.8 L2T2_KEY_SHIFT

L2T2_KEY_SHIFT: 時間シフトを伴う 2 レイヤーの空間および 2 レイヤーの時間スケーラビリティ K-SVC シフトエンコード
図 8 L2T2_KEY_SHIFT: 時間シフトを伴う 2 レイヤーの空間および 2 レイヤーの時間スケーラビリティ K-SVC エンコード

9.9 L2T3 および L2T3h

L2T3 および L2T3h: 2 レイヤーの空間および 3 レイヤーの時間スケーラビリティエンコード
図 9 L2T3 および L2T3h: 2 レイヤーの空間および 3 レイヤーの時間スケーラビリティエンコード

9.10 L2T3_KEY

L2T3_KEY: 2 レイヤーの空間および 3 レイヤーの時間スケーラビリティ K-SVC エンコード
図 10 L2T3_KEY: 2 レイヤーの空間および 3 レイヤーの時間スケーラビリティ K-SVC エンコード

9.11 L2T3_KEY_SHIFT

L2T3_KEY_SHIFT: 時間シフトを伴う 2 レイヤーの空間および 3 レイヤーの時間スケーラビリティ K-SVC シフトエンコード
図 11 L2T3_KEY_SHIFT: 時間シフトを伴う 2 レイヤーの空間および 3 レイヤーの時間スケーラビリティ K-SVC エンコード

9.12 L3T1 および L3T1h

L3T1 および L3T1h: 3 レイヤーの空間および 1 レイヤーの時間スケーラビリティエンコード
図 12 L3T1 および L3T1h: 3 レイヤーの空間および 1 レイヤーの時間スケーラビリティエンコード

9.13 L3T1_KEY

L3T1_KEY: 3 レイヤーの空間および 1 レイヤーの時間スケーラビリティ K-SVC エンコード
図 13 L3T1_KEY: 3 レイヤーの空間および 1 レイヤーの時間スケーラビリティ K-SVC エンコード

9.14 L3T2 および L3T2h

L3T2 および L3T2h: 3 レイヤーの空間および 2 レイヤーの時間スケーラビリティエンコード
図 14 L3T2 および L3T2h: 3 レイヤーの空間および 2 レイヤーの時間スケーラビリティエンコード

9.15 L3T2_KEY

L3T2_KEY: 3 レイヤーの空間および 2 レイヤーの時間スケーラビリティ K-SVC エンコード
図 15 L3T2_KEY: 3 レイヤーの空間および 2 レイヤーの時間スケーラビリティ K-SVC エンコード

9.16 L3T2_KEY_SHIFT

L3T2_KEY_SHIFT: 時間シフトを伴う 3 レイヤーの空間および 2 レイヤーの時間スケーラビリティ K-SVC
図 16 L3T2_KEY_SHIFT: 時間シフトを伴う 3 レイヤーの空間および 2 レイヤーの時間スケーラビリティ K-SVC

9.17 L3T3 および L3T3h

L3T3 および L3T3h: 3 レイヤーの空間および 3 レイヤーの時間スケーラビリティエンコード
図 17 L3T3 および L3T3h: 3 レイヤーの空間および 3 レイヤーの時間スケーラビリティエンコード

9.18 L3T3_KEY

L3T3_KEY: 3 レイヤーの空間および 3 レイヤーの時間スケーラビリティ K-SVC エンコード
図 18 L3T3_KEY: 3 レイヤーの空間および 3 レイヤーの時間スケーラビリティ K-SVC エンコード

9.19 L3T3_KEY_SHIFT

L3T3_KEY_SHIFT: 時間シフトを伴う 3 レイヤーの空間および 3 レイヤーの時間スケーラビリティ K-SVC
図 19 L3T3_KEY_SHIFT: 時間シフトを伴う 3 レイヤーの空間および 3 レイヤーの時間スケーラビリティ K-SVC

9.20 S2T1 および S2T1h

S2T1 および S2T1h: 2 レイヤーの空間サイマルキャストエンコード
図 20 S2T1 および S2T1h: 2 レイヤーの空間サイマルキャストエンコード

9.21 S2T2 および S2T2h

S2T2 および S2T2h: 2 レイヤーの空間サイマルキャストおよび 2 レイヤーの時間スケーラビリティエンコード
図 21 S2T2 および S2T2h: 2 レイヤーの空間サイマルキャストおよび 2 レイヤーの時間スケーラビリティエンコード

9.22 S2T3 および S2T3h

S2T3 および S2T3h: 2 レイヤーの空間サイマルキャストおよび 3 レイヤーの時間スケーラビリティエンコード
図 22 S2T3 および S2T3h: 2 レイヤーの空間サイマルキャストおよび 3 レイヤーの時間スケーラビリティエンコード

9.23 S3T1 および S3T1h

S3T1 および S3T1h: 3 レイヤーの空間サイマルキャストエンコード
図 23 S3T1 および S3T1h: 3 レイヤーの空間サイマルキャストエンコード

9.24 S3T2 および S3T2h

S3T2 および S3T2h: 3 レイヤーの空間サイマルキャストおよび 2 レイヤーの時間スケーラビリティエンコード
図 24 S3T2 および S3T2h: 3 レイヤーの空間サイマルキャストおよび 2 レイヤーの時間スケーラビリティエンコード

9.25 S3T3 および S3T3h

S3T3 および S3T3h: 3 レイヤーの空間サイマルキャストおよび 3 レイヤーの時間スケーラビリティエンコード
図 25 S3T3 および S3T3h: 3 レイヤーの空間サイマルキャストおよび 3 レイヤーの時間スケーラビリティエンコード

A. 謝辞

編集者は、この仕様への貢献について Robin Raymond、Michael Horowitz、Harald Alvestrand、 Chris Cunningham、Danil Chapovalov、Florent Castelli、Erik Språng および Henrik Boström に感謝する。 この仕様は、W3C ORTC CG で開発された ORTC API から発展したものである。

B. 参考文献

B.1 規範的参考文献

[infra]
Infra 標準. Anne van Kesteren; Domenic Denicola. WHATWG. 現行標準. URL: https://infra.spec.whatwg.org/
[RFC2119]
要件レベルを示すために RFC で使用する キーワード. S. Bradner. IETF. 1997年3月. 現行のベストプラクティス. URL: https://www.rfc-editor.org/info/rfc2119/
[RFC7656]
リアルタイムトランスポートプロトコル (RTP) ソースのセマンティクスおよびメカニズムの分類. J. Lennox; K. Gross; S. Nandakumar; G. Salgueiro; B. Burman, 編. IETF. 2015年11月. 情報提供. URL: https://www.rfc-editor.org/info/rfc7656/
[RFC7667]
RTP トポロジー. M. Westerlund; S. Wenger. IETF. 2015年11月. RFC. URL: https://datatracker.ietf.org/doc/html/rfc7667
[RFC8174]
RFC 2119 キーワードにおける大文字と小文字の曖昧さ. B. Leiba. IETF. 2017年5月. 現行のベストプラクティス. URL: https://www.rfc-editor.org/info/rfc8174/
[WEBIDL]
Web IDL 標準. Edgar Chen; Timothy Gu. WHATWG. 現行標準. URL: https://webidl.spec.whatwg.org/
[WEBRTC]
WebRTC: ブラウザーにおけるリアルタイム通信. Cullen Jennings; Jan-Ivar Bruaroey; Henrik Boström; Florent Castelli. W3C. 2025年3月13日. W3C 勧告. URL: https://www.w3.org/TR/webrtc/

B.2 参考情報

[AV1]
AV1 ビットストリームおよびデコード 処理仕様. Peter de Rivaz; Jack Haughton. AOM. 2019年1月8日. 標準. URL: https://aomediacodec.github.io/av1-spec/av1-spec.pdf
[AV1-RTP-SPEC]
AV1 向け RTP ペイロード形式. Alliance for Open Media. 成果物草案. URL: https://aomediacodec.github.io/av1-rtp-spec/
[ITU-T-REC-H.264]
H.264 : 汎用 視聴覚サービス向け高度映像符号化. ITU. 2019年6月. URL: https://www.itu.int/rec/T-REC-H.264
[ITU-T-REC-H.265]
H.265 : 高効率映像符号化. ITU. 2021年8月. URL: https://www.itu.int/rec/T-REC-H.265
[Media-Capabilities]
メディア能力. Jean-Yves Avenard; Mark Foltz. W3C. 2026年6月9日. W3C 作業草案. URL: https://www.w3.org/TR/media-capabilities/
[RFC6184]
H.264 映像向け RTP ペイロード形式. Y.-K. Wang; R. Even; T. Kristensen; R. Jesup. IETF. 2011年5月. 標準化提案. URL: https://www.rfc-editor.org/info/rfc6184/
[RFC6190]
スケーラブル映像 符号化向け RTP ペイロード形式. S. Wenger; Y.-K. Wang; T. Schierl; A. Eleftheriadis. IETF. 2011年5月. 標準化提案. URL: https://www.rfc-editor.org/info/rfc6190/
[RFC6386]
VP8 データ形式およびデコード ガイド. J. Bankoski; J. Koleszar; L. Quillio; J. Salonen; P. Wilkins; Y. Xu. IETF. 2011年11月. 情報提供. URL: https://www.rfc-editor.org/info/rfc6386/
[RFC7741]
VP8 映像向け RTP ペイロード形式. P. Westin; H. Lundin; M. Glover; J. Uberti; F. Galligan. IETF. 2016年3月. 標準化提案. URL: https://www.rfc-editor.org/info/rfc7741/
[RFC7798]
高効率 映像符号化 (HEVC) 向け RTP ペイロード形式. Y.-K. Wang; Y. Sanchez; T. Schierl; S. Wenger; M. M. Hannuksela. IETF. 2016年3月. 標準化提案. URL: https://www.rfc-editor.org/info/rfc7798/
[RFC8827]
WebRTC セキュリティアーキテクチャ. E. Rescorla. IETF. 2021年1月. 標準化提案. URL: https://www.rfc-editor.org/info/rfc8827/
[VP9]
VP9 ビットストリームおよびデコード処理仕様. A. Grange; P. de Rivaz; J. Hunt. Google. 2016年2月. バージョン 0.6. URL: https://storage.googleapis.com/downloads.webmproject.org/docs/vp9/vp9-bitstream-specification-v0.6-20160331-draft.pdf
[VP9-PAYLOAD]
VP9 映像向け RTP ペイロード形式. J. Uberti; S. Holmer; M. Flodman; J. Lennox; D. Hong. IETF. 2021年6月10日. インターネットドラフト(進行中の作業). URL: https://datatracker.ietf.org/doc/html/draft-ietf-payload-vp9