Copyright © 2024 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 公開物の一覧と、この技術レポートの最新リビジョンは、 https://www.w3.org/TR/ にある W3C 技術 レポート索引で確認できる。
この API は、W3C ORTC コミュニティグループで行われた予備作業に基づいている。
この文書は、Web Real-Time Communications Working Group により、 Recommendation track を用いる 作業草案として公開された。
作業草案としての公開は、 W3C およびその会員による承認を意味しない。
これは草案文書であり、いつでも他の文書によって更新、置換、または廃止される可能性がある。 この文書を、進行中の作業以外のものとして引用することは不適切である。
この文書は、 W3C Patent Policy の下で運営されるグループによって作成された。 W3C は、このグループの成果物に関連して行われた 特許開示の公開リスト を維持している。そのページには、 特許を開示するための手順も含まれている。ある個人が、 Essential Claim(s) を含むと当該個人が考える特許について実際の知識を有している場合、その個人は、 W3C Patent Policy の第 6 節に従って その情報を開示しなければならない。
この文書は、 2023 年 11 月 03 日付 W3C Process Document によって管理される。
この節は非規範的である。
この仕様は、WebRTC 仕様 [WEBRTC] を拡張し、 Scalable Video Coding (SVC) のエンコーディングパラメーターの設定を可能にする。 SVC エンコーダーおよびデコーダーの能力の発見は、 Media Capabilities API [Media-Capabilities] によって扱われる。
この仕様は、WebRTC オブジェクトおよびメソッドの挙動を変更しない。
したがって、Offer/Answer 交渉および
エンコーディングパラメーターに関する制約は、[WEBRTC] Section
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] コーデックについてもサポートされ得る。
非規範的であると記された節に加え、この仕様におけるすべての著作ガイドライン、図、例、および注は 非規範的である。この仕様のそれ以外のすべては規範的である。
この文書におけるキーワード MAY、MUST、および SHOULD は、 ここに示すようにすべて大文字で出現する場合に限り、 BCP 14 [RFC2119] [RFC8174] に記述されているように解釈される。
この仕様は、この仕様に含まれるインターフェイスを実装する ユーザーエージェントという単一の製品に適用される適合性基準を定義する。
アルゴリズムまたは特定の手順として表現された適合性要件は、 最終結果が同等である限り、任意の方法で実装できる。 特に、この仕様で定義されるアルゴリズムは 追いやすいことを意図しており、性能を意図したものではない。
ECMAScript を用いてこの仕様で定義される API を実装する実装は、 Web IDL 仕様 [WEBIDL] で定義される ECMAScript Bindings と整合する方法でそれらを実装しなければならない(MUST)。 これは、この仕様がその仕様および用語を使用するためである。
「simulcast envelope」という用語は、[WEBRTC] Section 5.4.1 で定義される。
この仕様は、[WEBRTC] で定義される オブジェクト、メソッド、内部スロット および辞書を参照する。
Scalable Video Coding (SVC) については、「single-session transmission」 (SST) および「multi-session transmission」 (MST) という用語は、 [RFC6190] で定義される。この仕様は SST のみをサポートし、 MST はサポートしない。
「Single Real-time Transport Protocol stream Single Transport」 (SRST) という用語は、 [RFC7656] Section 3.7 で定義され、 単一のトランスポート内で、 単一の Real-time Transport Protocol (RTP) ストリームおよび 同期ソース (SSRC) を使用してすべてのレイヤーを送信する SVC 実装を指す。「Multiple RTP stream Single Transport」 (MRST) という用語も [RFC7656] Section 3.7 で定義され、 単一のトランスポート内で、 各レイヤーごとに異なる SSRC を持つ複数の RTP ストリームを使用して すべてのレイヤーを送信する実装を指す。 この仕様は SRST のみをサポートし、MRST はサポートしない。 SRST をサポートする RTP ペイロード仕様を持つコーデックには、VP8 [RFC7741]、VP9 [VP9-PAYLOAD]、AV1 [AV1-RTP-SPEC]、H.264 [RFC6184] および H.265 [RFC7798] が含まれる。
「S mode」という用語は、同じ SSRC 上で複数の
エンコーディングが送信されるスケーラビリティモードを指す。これには、"S2T1"、"S2T1h"、
"S2T2"、
"S2T2h"、"S2T3"、"S2T3h"、"S3T1"、"S3T1h"、"S3T2"、"S3T2h"、
"S3T3"
および "S3T3h" の scalabilityMode 値が含まれる。
Selective Forwarding Middlebox (SFM) という用語は、[RFC7667] の Section 3.7 で定義される。
この仕様は、RTCRtpEncodingParameters
辞書を拡張することにより、SVC のためのエンコーディングパラメーターの設定を可能にする。
RTCRtpEncodingParameters
辞書拡張WebIDLpartial dictionary RTCRtpEncodingParameters {
DOMString scalabilityMode;
};
RTCRtpEncodingParameters
メンバーscalabilityMode、型 DOMStringこのストリームに使用されるスケーラビリティモードの 大文字小文字を区別する識別子。スケーラビリティモードは Section 5 で定義される。
[WEBRTC] は、
addTransceiver()
(Section 5.1) および setParameters()
(Section 5.2) におけるエラー処理を記述しており、
サポートされていないエンコーディングパラメーターによる
"hardware-encoder-error"
を示すための RTCError の使用、
およびその他のエラーを含む。
実装は、無効な
scalabilityMode 値が
setParameters()
または addTransceiver()
に提供された場合、規定された方法で
RTCError およびその他のエラーを利用する。
addTransceiver()
[WEBRTC] Section 5.1 は、
sendEncodings
の検証を
addTransceiver()
内で記述している。
scalabilityMode
を検証するため、
addTransceiver
sendEncodings validation steps
の step 3 の後に次の手順を追加する:
RTCRtpEncodingParameters.codec
値 codec が 存在するエンコーディングであって、同じエンコーディングの scalabilityMode
値が codec によってサポートされていないものを含む場合、
throw an OperationError.
scalabilityMode
値が
kind に対する 実装済み送信コーデックの一覧
内のいずれのコーデックによってもサポートされていないエンコーディングを含む場合、
throw an OperationError.
RTCRtpEncodingParameters
が、値が true である
active
メンバーを持つエンコーディングを 2 つ以上含み、
かつ sendEncodings が、
scalabilityMode
値が
"S mode" を表し、かつその
active
メンバーの値が
true であるエンコーディングを含む場合、throw an
OperationError.
addTransceiver()
および
setCodecPreferences()
メソッドが Offer/Answer 交渉の完了前に呼び出される場合、
交渉されるコーデックおよびその能力は知られていないことがある。この状況では、
scalabilityMode
values configured
in sendEncodings
に設定された値が、最終的に交渉されるコーデックによってサポートされないことがある。
しかし、要求された scalabilityMode
値が
サポートされるいずれのコーデックに対しても無効である場合、または混合サイマルキャストトランスポートが要求された場合にのみ、
エラーが発生する。
目的の scalabilityMode
値を適用できることを確保するために、setCodecPreferences()
を使用して、目的の設定をサポートするコーデックを優先する、またはそれらのみを含めることができる。
たとえば、時間的スケーラビリティが空間サイマルキャストとともに必要な場合、
addTransceiver()
が呼び出されるときに、
sendEncodings
を、異なる解像度を持つ複数の
サイマルキャストストリームを送信し、各ストリームが時間的スケーラビリティを利用するように設定できる。
VP8、VP9 および AV1 コーデック実装のみが時間的スケーラビリティをサポートする場合、
setCodecPreferences()
を使用して H.264/AVC コーデックを Offer から削除し、時間的スケーラビリティをサポートするコーデックが
交渉される可能性を高めることができる。
sendEncodings
を使用して
addTransceiver()
により複数のサイマルキャストストリームの送信を要求する場合、
"S mode" は要求できない。ブラウザーは、
複数の SSRC と RID を持つサイマルキャストエンコーディングを送信するように、
または代替として、すべてのサイマルキャストエンコーディングを単一の
RTP ストリームで送信するようにのみ設定できる。両方のサイマルキャストトランスポート技法を
同時に使用することは許可されない。
setParameters()
[WEBRTC] Section 5.2 は、
setParameters()
内での parameters の検証を記述している。
操作が InvalidModificationError
で拒否された promise を生じさせる
次の条件を、
setParameters validation
steps
の (step 4) に挿入する:
RTCRtpEncodingParameters.codec
値 codec を持つエンコーディングであって、その同じエンコーディングの
scalabilityMode
値が codec によってサポートされていないものを含む場合。
[[SendCodecs]] が 空である
かつ encodings が、
scalabilityMode
値が
kind に対する
実装済み送信コーデックの一覧
内のいずれのコーデックによってもサポートされていないエンコーディングを含む場合。
[[SendCodecs]] が 空でない
かつ encodings が、そのエンコーディングの RTP ストリームに使用されるコーデックによって
scalabilityMode
値が
サポートされていないエンコーディングを含む場合。
RTCRtpEncodingParameters
が、値が true である
active
メンバーを持つエンコーディングを 2 つ以上含み、
かつ encodings が、
scalabilityMode
値が
"S mode" を表し、かつその
active
メンバーの値が
true であるエンコーディングを含む場合。
"L1T1" スケーラビリティモードは、
setParameters()
を使用して SVC エンコーディングをオフにすることを可能にする。
"L1T1" が
setParameters()
を使用して設定された場合、
getParameters()
への応答として返される。
getParameters()
初期交渉が完了する前、
getParameters()
は、encodings 内の各エンコーディングについて、
scalabilityMode
値を、
addTransceiver()
または
setParameters()
によって最後に設定されたものとして返す。
encodings 内のエンコーディングに
scalabilityMode
値が提供されていない場合、
または値が正常に設定されなかった場合、
getParameters()
はそのエンコーディングについて
scalabilityMode
値を返さない。
初期交渉が完了した後、getParameters()
は、初期交渉前に値を持っていた encodings 内の各エンコーディングについて、
現在設定されている scalabilityMode
値を返す。これは、
addTransceiver()
または setParameters()
で要求された値と異なることがある(MAY)。
たとえば、交渉中に選択されたコーデックに、目的の scalabilityMode
値をサポートするエンコーダーが含まれていない場合、ユーザーエージェントは別の値を選択することがある(MAY)。
設定が満足できない場合、setParameters()
を使用して変更できる。
addTransceiver()
または setParameters()
が、encodings 内の
エンコーディングについて scalabilityMode
値を提供しなかった場合、
初期交渉が完了した後、
getParameters()
は
scalabilityMode
値を返さず、エンコーダーは
そのエンコーディングの RTP ストリームに対するコーデックの
デフォルトの scalabilityMode
を使用する。
各コーデックのデフォルトの scalabilityMode
は実装依存である。デフォルトの
scalabilityMode
は、時間的スケーラビリティモードのいずれか
(例: "L1T1"、"L1T2"、"L1T3" など)であるべきである(SHOULD)。
この節は非規範的である。
SVC は、ビデオ会議で最もよく用いられる。そこでは、 SFM のような会議サーバーが、参加者のデバイス特性および利用可能な帯域幅に基づいて レイヤーを選択的に転送する。そのような環境では、 アプリケーションは会議サーバーとの間で送受信されるコーデックを交渉する。 しかし、スケーラビリティモードは Offer/Answer で交渉されないため、 アプリケーションは、ブラウザーおよび会議サーバーがどのスケーラビリティモードをサポートするかを 他の手段によって判断する必要がある。
[Media-Capabilities] API は、
スケーラブル映像符号化に対するエンコーダーおよびデコーダーの
サポートの発見を可能にする。scalabilityMode
は、エンコーダーが
scalabilityMode
値をサポートするかどうかを問い合わせるために使用され、それが
"supported"、"smooth" および "power efficient" であるかどうかを示す。
[Media-Capabilities] API は、
空間スケーラビリティモードに対するデコーダーサポートに関する情報も提供する。
spatialScalability
は、デコーダーが空間予測をサポートする能力を持つかどうかを示す。
これには、現在の解像度とは異なる解像度のフレームを依存関係として使用する能力が必要である。
spatialScalability
が true に設定されている場合、デコーダーはエンコーダーによってサポートされる任意の
scalabilityMode
値をデコードできる。
spatialScalability
が false
に設定されている、または存在しない場合、デコーダーは空間スケーラビリティモードをデコードできないが、
エンコーダーによってサポートされるその他すべての
scalabilityMode
値をデコードできる。
アプリケーションが、利用可能なコーデックと
scalabilityMode
値の組み合わせを判断した後、
これらの組み合わせのどれが SFM によってサポートされるかを判断する必要がある。
これを処理する一つの方法は、SFM が転送できるコーデックと
スケーラビリティモードの組み合わせを受信側能力の形で示すことである。
SFM の能力を受け取った後、アプリケーションは、
ブラウザーの RTCRtpSender と
SFM の受信側によってサポートされる
コーデックおよび scalabilityMode
値の共通部分を計算できる。これは、ブラウザーの
addTransceiver()
および setParameters()
メソッドに渡される引数を判断するために使用できる。
以下はいくつかの例である:
ブラウザーと SFM の能力の共通部分を計算する際に、
RTP ヘッダー拡張を考慮に入れる必要がある状況がある。
SFM がコーデックペイロードを解析できない場合
(解析するように設計されていないため、またはペイロードが暗号化されているため)、
[AV1-RTP-SPEC] の Appendix A で定義される
AV1 Dependency Descriptor のような RTP ヘッダー拡張の交渉が、
SFM が特定のコーデックを転送するために必要となることがある。
これを考慮するため、コーデックの転送に必要な RTP ヘッダー拡張を
SFM の受信側能力に追加できる。するとアプリケーションは、
ブラウザーの RTCRtpSender と
SFM の受信側によってサポートされる
コーデック、ヘッダー拡張および
scalabilityMode
値の共通部分を計算できる。
この仕様でサポートされる scalabilityMode 値は、
それらに関連付けられた識別子および特性とともに、下の表に示される。
scalabilityMode 値の名前
(大文字小文字を区別する)が、[AV1] Section 6.7.5 で割り当てられた
スケーラビリティモード識別子、および Section 9 で提供される依存関係図へのリンクとともに提供される。
[AV1] および VP9 [VP9] 仕様は、
表で定義されるすべての
scalabilityMode 値をサポートするが、
他のコーデック仕様はそうではない。たとえば、VP8 [RFC6386]、H.264 [RFC6184] および
H.265 [RFC7798] は、
時間的スケーラビリティ(例: "L1T2"、"L1T3")のみをサポートする。
また、VP8 [RFC6386]、H.264 [RFC6184] および H.265 [RFC7798] は、
異なる SSRC 上でのサイマルキャストの転送のみを許可するため、
(複数のエンコーディングが単一の RTP ストリーム上で転送される)"S" モードはサポートされない。
| スケーラビリティモード識別子 | 空間レイヤー | 解像度比 | 時間レイヤー | レイヤー間依存関係 | 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 は、
Section 5 の表に対するエントリーを定義しなければならない(MUST)。
これには、Scalability Mode Identifier、空間および時間レイヤー、
Resolution Ratio、Inter-layer dependency、および対応する
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] Section 7.1 (Example 1) を拡張し、各サイマルキャストレイヤーに SSRC と RID を使用して、 それぞれが 3 つの時間レイヤーを持つ 3 つの空間 サイマルキャストレイヤーを送信することを示す。 元の例から変更されているのは "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 {
// ローカルストリームを取得し、self-view に表示して送信用に追加する
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} is unsupported.`);
return;
}
console.log(`${contentType} is ${info.smooth || 'NOT '}smooth, and ` +
`${info.powerEfficient || 'NOT '}power efficient`);
} catch (err) {
console.error(err, ' caused encodingInfo to fail');
}
この節は非規範的である。
これは、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] Section 13 に記述されている。
WebRTC では、スケーラブル符号化ツールの使用は
ピア間で交渉されないため、サポートされる
scalabilityMode 値も
空間予測に対するデコーダーサポートも SDP には公開されない。
setParameters()
API を使用して各コーデックに対する
scalabilityMode 値を
設定しようとすることで、
アプリケーションは、どの設定試行が成功し、
どの設定試行が失敗するかを記録することにより、
エンコーダーによってサポートされる値を判断できる。
しかし、これは
scalabilityMode
値がハードウェアエンコーダーまたはソフトウェアエンコーダー
(またはその両方)によってサポートされているかどうかを示すものではない。
setParameters()
は RTCRtpReceiver では
サポートされないため、デコーダーサポートを判断するために同等の
実験を実行することはできない。
ソフトウェアエンコーダーによってサポートされる
scalabilityMode
値は通常、ハードウェアでサポートされる値の
上位集合であるため、これらの実験から得られる情報は、
使用中のブラウザーと高い相関を持つ。この情報はすでに
ウェブページに利用可能である。メディアが流れ始めると、
使用中のコーデックに対する性能特性、または
scalabilityMode 値が
デコード可能であるかどうかに関する情報を取得でき、
これはハードウェア能力に関するさらなる情報を提供する。
[Media-Capabilities] Section 3.1 で述べられているように、Media Capabilities API は、この仕様から利用可能な情報よりも 「より正確で一貫した情報を提供する可能性が高い」。 [Media-Capabilities] Section 3.1 で述べられているように、 「この情報は、特定の種類のデバイスが非常に類似したデコード/エンコード 能力を持つことが期待されるため、ウェブページにすでに利用可能な他の情報と 高い相関を持つことが予想される」。
この節は非規範的である。
この節は非規範的である。これは新しい挙動を規定するものではなく、 代わりに、この仕様の他の部分にすでに存在する情報を 要約するものである。WebRTC プロトコルのセキュリティ上の考慮事項は [RFC8827] に記述されており、WebRTC API に関するセキュリティおよびプライバシー上の考慮事項は [WEBRTC] Section 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: