Copyright © 2026 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
この文書は、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 プロセス文書が適用されます。
このセクションは規範的ではありません。
この仕様は、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] コーデックでもサポートできます。
規範的ではないと明記されたセクションに加えて、この仕様のすべてのオーサリングガイドライン、図、例、および注記は 規範的ではありません。この仕様のそれ以外のすべては規範的です。
この文書におけるキーワード してもよい、しなければならない、および するべきである は、 BCP 14 [RFC2119] [RFC8174] に記載されているとおり、ここに示すように すべて大文字で表記されている場合に限って解釈されます。
この仕様は、単一の 製品、すなわち、この仕様に含まれるインターフェイスを実装する ユーザーエージェントに適用される適合基準を定義します。
アルゴリズムまたは特定の手順として記述された適合要件は、 最終結果が同等である限り、どのような方法でも実装できます。 特に、この仕様で定義されるアルゴリズムは 理解しやすいことを意図したものであり、高い性能を意図したものではありません。
この仕様で定義される API を ECMAScript を使用して実装する実装は、 Web IDL 仕様 [WEBIDL] で定義される ECMAScript バインディングと整合する方法で実装しなければなりません。 これは、この仕様がその仕様および用語を使用しているためです。
「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 で定義されています。
この仕様は、RTCRtpEncodingParameters
辞書を拡張することで、SVC のエンコードパラメーターを構成できるようにします。
RTCRtpEncodingParameters
辞書の拡張WebIDLpartial dictionary RTCRtpEncodingParameters {
DOMString scalabilityMode;
};
RTCRtpEncodingParameters
のメンバー
[WEBRTC] は、
addTransceiver()
(セクション 5.1) および setParameters()
(セクション 5.2) におけるエラー処理について説明しており、
サポートされていないエンコードパラメーターによる
「hardware-encoder-error」
を示すための RTCError の使用や、その他のエラーを含みます。
無効な
scalabilityMode 値が
setParameters()
または addTransceiver()
に提供された場合、実装は規定された方法で RTCError およびその他のエラーを
使用します。
addTransceiver()
[WEBRTC] セクション 5.1 は、
addTransceiver()
内の
sendEncodings
の検証について説明しています。
scalabilityMode
を検証するには、
addTransceiver
sendEncodings 検証手順の手順 3 の後に、次の手順を追加します:
codec
値 codec が 存在し、かつ同じエンコードの scalabilityMode
値が codec でサポートされていないエンコードをいずれか 含む場合、OperationError を throw します。
scalabilityMode
値が
kind の実装済み送信
コーデックのリスト内のどのコーデックによってもサポートされていないエンコードをいずれか 含む場合、OperationError を throw します。
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 ストリーム上で送信するようにのみ構成できます。両方のサイマルキャストトランスポート
技術を同時に使用することは許可されません。
setParameters()
[WEBRTC] セクション 5.2 は、
setParameters()
内の parameters の検証について説明しています。
操作が InvalidModificationError
で拒否された promise を生じさせる条件のリスト
(setParameters 検証
手順の手順 6) に、次の
条件を挿入します:
codec
値
codec が 存在する encoding をいずれか 含み、
その encoding の
scalabilityMode
値が
codec によってサポートされていない。
[[SendCodecs]] が 空であり、
encodings が、
scalabilityMode
値が
kind の
実装済み
送信コーデックのリスト内のどのコーデックによってもサポートされていないエンコードをいずれか 含む。
[[SendCodecs]] が 空ではなく、
encodings が、
scalabilityMode
値を
sender.[[SendCodecs]]
内のどのコーデックでも満たせないエンコードをいずれか 含む。
true の active
メンバーを持つエンコードを 1 個より多く 含み、かつ
encodings が、
scalabilityMode
値が
「S モード」を表し、かつ
active
メンバーの
値が true であるエンコードをいずれか含む。
"L1T1" スケーラビリティモードでは、setParameters()
を使用して SVC エンコードをオフにできます。
"L1T1" が
setParameters()
を使用して設定された場合、
getParameters()
への応答で返されます。
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" など) であるべきです。
このセクションは規範的ではありません。
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()
メソッドに渡される引数を決定するために使用できます。
以下にいくつかの例を示します:
ブラウザーと
SFM の能力の積集合を計算する際に、RTP ヘッダー拡張を考慮する必要がある状況があります。
SFM がコーデックペイロードを解析できない場合
(そのように設計されていないため、またはペイロードが暗号化されているため)、
RTP ヘッダー拡張 ([AV1-RTP-SPEC] の付録 A で定義される AV1 Dependency Descriptor
など) のネゴシエーションが、
SFM が特定のコーデックを転送するために必要になる場合があります。
これを考慮するため、コーデックの転送に必要な RTP ヘッダー拡張を
SFM の受信能力に追加できます。その後、アプリケーションは、
ブラウザーの RTCRtpSender と
SFM の受信側によってサポートされるコーデック、ヘッダー拡張、および
scalabilityMode
値の積集合を計算できます。
この仕様でサポートされる 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 |
scalabilityMode
値の追加に関するガイドラインscalabilityMode
値を提案する場合、
次の原則に従うべきです:
scalabilityMode
は、セクション 5 の表に対する項目を定義しなければならず、
スケーラビリティモード識別子、空間および
時間レイヤー、解像度比、レイヤー間依存関係、および対応する
AV1 scalability_mode_idc 値(割り当てられている場合)の値を含めなければなりません。
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
を表します。
このセクションは規範的ではありません。
この例では、[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'}
]
このセクションは規範的ではありません。
これは、[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 の失敗を引き起こしました');
}
このセクションは規範的ではありません。
これは、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"
]
}
]
このセクションは規範的ではありません。
このセクションは規範的ではなく、新しい動作を規定するものではありません。代わりに、 仕様の他の部分にすでに存在する情報を 要約します。WebRTC API に関するプライバシー上の考慮事項は、 [WEBRTC] セクション 13 で説明されています。
WebRTC では、スケーラブル符号化ツールの使用は
ピア間でネゴシエートされないため、サポートされている
scalabilityMode 値も、
空間予測に対する
デコーダーのサポートも SDP には公開されません。
setParameters()
API を使用して各コーデックに
scalabilityMode 値を
設定しようとすることで、
アプリケーションは、どの構成の試行が成功し、
どれが失敗するかを確認して、エンコーダーがサポートする値を判断できます。
ただし、これによって
scalabilityMode
値がハードウェアまたはソフトウェアのエンコーダー
(あるいはその両方)でサポートされているかどうかは分かりません。setParameters()
は RTCRtpReceiver
ではサポートされていないため、
デコーダーのサポートを判断するための同等の
実験を行うことはできません。
ソフトウェアエンコーダーによってサポートされる
scalabilityMode
値は通常、ハードウェアでサポートされる値の
スーパーセットであるため、これらの実験から得られる情報は、
Web ページですでに利用可能な、使用中のブラウザーとの
高い相関があります。メディアの送受信が開始された後は、
パフォーマンス特性、または使用中のコーデックについて
scalabilityMode 値を
デコードできるかどうかに関する情報を取得でき、
ハードウェア能力についてより多くの情報が得られます。
[Media-Capabilities] セクション 3.1 で述べられているように、Media Capabilities API は、この 仕様から得られる情報よりも「より正確で 一貫した情報を提供する可能性があります」。また、 [Media-Capabilities] セクション 3.1 で述べられているように、「特定のクラスの デバイスは非常によく似たデコード/エンコード 能力を持つことが予想されるため、この情報は Web ページですでに利用可能な他の情報と高い相関を持つことが 予想されます。」
このセクションは規範的ではありません。
このセクションは規範的ではなく、新しい動作を規定するものではありません。代わりに、 仕様の他の部分にすでに存在する情報を 要約します。WebRTC プロトコルのセキュリティに関する考慮事項は、 [RFC8827] で説明されており、WebRTC API に関するセキュリティおよびプライバシー上の考慮事項は、 [WEBRTC] セクション 13 で説明されています。
この仕様で定義されるスケーラビリティモードの依存関係図を 以下に示します。
編集者は、この仕様への貢献について Robin Raymond、Michael Horowitz、Harald Alvestrand、 Chris Cunningham、Danil Chapovalov、Florent Castelli、Erik Språng および Henrik Boström に感謝する。 この仕様は、W3C ORTC CG で開発された ORTC API から発展したものである。
Referenced in:
Referenced in: