diff --git a/index.html b/index.html index 40ccf97..e25a2bf 100644 --- a/index.html +++ b/index.html @@ -65,8 +65,7 @@

Introduction

Terminology

- The term "simulcast envelope" refers to the maximum number of - simulcast streams and the order of the encoding parameters. + The term "simulcast envelope" is defined in [[!WEBRTC]] Section 5.4.1.

This specification references objects, methods, internal slots @@ -276,19 +275,22 @@

{{RTCRtpSender/getParameters()}}

implementation dependent. The default {{RTCRtpEncodingParameters/scalabilityMode}} SHOULD be one of the temporal scalability modes (e.g. [="L1T1"=],[="L1T2"=],[="L1T3"=], etc.). -

+

+

+ The [="L1T1"=] scalability mode enables SVC encoding to be turned off + using {{RTCRtpSender/setParameters()}}. If [="L1T1"=] is set using + {{RTCRtpSender/setParameters()}} then it will be returned in response + to {{RTCRtpSender/getParameters()}}. +

Discovery

- The SVC capabilities of an encoder can be discovered using - extensions to the {{RTCRtpCodecCapability}} dictionary. -

-

- {{RTCRtpSender.getCapabilities(kind)}} provides information on what - codecs and scalability modes and scalability modes an application can send. + The [[?Media-Capabilities]] API provides information on encoder support + for spatial scalability modes. {{VideoConfiguration//scalabilityMode}} is + used to query whether an encoder has the ability to support this mode. The SFM can provide information on the codecs and scalability modes it can decode by providing its receiver capabilities. @@ -301,7 +303,7 @@

Discovery

methods.

- The [[?Media-Capabilities]] API provides information on decoder support + The [[?Media-Capabilities]] API also provides information on decoder support for spatial scalablity modes. {{VideoConfiguration/spatialScalability}} indicates whether a decoder has the ability to support spatial prediction, which requires the ability to use frames of a resolution different than @@ -313,42 +315,6 @@

Discovery

can decode all other {{RTCRtpEncodingParameters/scalabilityMode}} values supported by the encoder.

-
-

{{RTCRtpCodecCapability}} Dictionary Extensions

-
-
partial dictionary RTCRtpCodecCapability {
-             sequence<DOMString> scalabilityModes;
-};
-
-

Dictionary {{RTCRtpCodecCapability}} Members

-
-
scalabilityModes of type sequence<{{DOMString}}>
-
-

- A sequence of the scalability modes (defined in Section 6) supported by the encoder - implementation. -

-

- In response to {{RTCRtpSender.getCapabilities(kind)}}, implementations of this - specification MUST return a sequence of scalability modes supported by each codec - of that kind. If a codec does not support encoding of scalability modes - other than [="L1T1"=], then the {{scalabilityModes}} member is not provided. The - [="L1T1"=] scalability mode enables SVC encoding to be turned off using - {{RTCRtpSender/setParameters()}}, so that it MUST be included within the sequence - of scalability modes returned by {{RTCRtpSender.getCapabilities(kind)}} in order - for it to be considered valid within {{RTCRtpSender/setParameters()}}. If [="L1T1"=] - is set using {{RTCRtpSender/setParameters()}} then it will be returned in response - to {{RTCRtpSender/getParameters()}}. -

-

- In response to {{RTCRtpReceiver.getCapabilities(kind)}}, {{scalabilityModes}} are not provided. -

-
-
-
-
-

Negotiation

@@ -378,14 +344,14 @@

Negotiation

For an SFM the supported - {{RTCRtpCodecCapability/scalabilityModes}} may depend on the negotiated RTP header - extensions. For example, if the SFM + {{RTCRtpEncodingParameters/scalabilityMode}} values may depend on the negotiated RTP + header extensions. For example, if the SFM cannot parse codec payloads (either because it is not designed to do so, or because the payloads are encrypted), then negotiation of an RTP header extension (such as the AV1 Dependency Descriptor defined in Appendix A of [[AV1-RTP]]) could be a prerequisite for the SFM - to forward {{RTCRtpCodecCapability/scalabilityModes}}. As a result, the - {{RTCRtpCodecCapability/scalabilityModes}} supported by an + to forward a {{RTCRtpEncodingParameters/scalabilityMode}} value. As a result, + the {{RTCRtpEncodingParameters/scalabilityMode}} values supported by an SFM may not be determined until completion of the Offer/Answer negotiation.

@@ -394,19 +360,19 @@

Negotiation

Scalability modes

- The scalability modes supported in this specification, as well as their associated - identifiers and characteristics, are provided in the table below. The names of the - scability modes (which are case sensitive) are provided, along with the scalability - mode identifiers assigned in [[?AV1]] Section 6.7.5, and links to dependency diagrams - provided in Section 9. + The {{RTCRtpEncodingParameters/scalabilityMode}} values supported in this specification, + as well as their associated identifiers and characteristics, are provided in the table + below. The names of the {{RTCRtpEncodingParameters/scalabilityMode}} values (which are + case sensitive) are provided, along with the scalability mode identifiers assigned in + [[?AV1]] Section 6.7.5, and links to dependency diagrams provided in Section 9.

- While the [[?AV1]] and VP9 [[?VP9]] specifications support all the modes - defined in the table, other codec specifications do not. For example, VP8 - [[?RFC6386]] only supports temporal scalability (e.g. [="L1T2"=], [="L1T3"=]); H.264/SVC - [[?RFC6190]], which supports both temporal and spatial scalability, only permits - transport of simulcast on distinct SSRCs, so that it does not support the - "S" modes, where multiple encodings are transported on a single RTP stream. + While the [[?AV1]] and VP9 [[?VP9]] specifications support all the + {{RTCRtpEncodingParameters/scalabilityMode}} values defined in the table, other codec + specifications do not. For example, VP8 [[?RFC6386]] only supports temporal scalability + (e.g. [="L1T2"=], [="L1T3"=]); H.264/SVC [[?RFC6190]], which supports both temporal and + spatial scalability, only permits transport of simulcast on distinct SSRCs, so that it + does not support "S" modes, where multiple encodings are transported on a single RTP stream.

@@ -421,7 +387,7 @@

Scalability modes

- + @@ -429,7 +395,7 @@

Scalability modes

- + @@ -437,7 +403,7 @@

Scalability modes

- + @@ -445,7 +411,7 @@

Scalability modes

- + @@ -453,7 +419,7 @@

Scalability modes

- + @@ -461,7 +427,7 @@

Scalability modes

- + @@ -469,7 +435,7 @@

Scalability modes

- + @@ -477,7 +443,7 @@

Scalability modes

- + @@ -485,7 +451,7 @@

Scalability modes

- + @@ -493,7 +459,7 @@

Scalability modes

- + @@ -501,7 +467,7 @@

Scalability modes

- + @@ -509,7 +475,7 @@

Scalability modes

- + @@ -517,7 +483,7 @@

Scalability modes

- + @@ -525,7 +491,7 @@

Scalability modes

- + @@ -533,7 +499,7 @@

Scalability modes

- + @@ -541,7 +507,7 @@

Scalability modes

- + @@ -549,7 +515,7 @@

Scalability modes

- + @@ -557,7 +523,7 @@

Scalability modes

- + @@ -565,7 +531,7 @@

Scalability modes

- + @@ -573,7 +539,7 @@

Scalability modes

- + @@ -581,7 +547,7 @@

Scalability modes

- + @@ -589,7 +555,7 @@

Scalability modes

- + @@ -597,7 +563,7 @@

Scalability modes

- + @@ -605,7 +571,7 @@

Scalability modes

- + @@ -613,7 +579,7 @@

Scalability modes

- + @@ -621,7 +587,7 @@

Scalability modes

- + @@ -629,7 +595,7 @@

Scalability modes

- + @@ -637,7 +603,7 @@

Scalability modes

- + @@ -645,7 +611,7 @@

Scalability modes

- + @@ -653,7 +619,7 @@

Scalability modes

- + @@ -661,7 +627,7 @@

Scalability modes

- + @@ -669,7 +635,7 @@

Scalability modes

- + @@ -704,7 +670,7 @@

Guidelines for addition of {{RTCRtpEncodingParameters/scalabilityMode}} valu frames have their temporal identifier shifted upward.
  • - A dependency diagram MUST be supplied, in the format provided in Section 9. + A dependency diagram MUST be supplied, in the format provided in Section 10.
  • @@ -787,101 +753,39 @@

    Spatial Simulcast and Temporal Scalability

    ] -
    +

    SVC Encoder Capabilities

    - This is an example of {{RTCRtpSender}}.getCapabilities}}('video').codecs[] - returned by a browser implementing [[WEBRTC]]. Only the scalabilityModes - attribute is defined in this specification. + This is an example of {{MediaCapabilities/encodingInfo(configuration)}} + returned by a browser implementing [[WEBRTC]] and [[Media-Capabilities]].

    -[
    -    {
    -      "clockRate": 90000,
    -      "mimeType": "video/VP8",
    -      "scalabilityModes": [
    -        "L1T1",
    -        "L1T2",
    -        "L1T3"
    -      ]
    -    },
    -    {
    -      "clockRate": 90000,
    -      "mimeType": "video/rtx"
    -    },
    -    {
    -      "clockRate": 90000,
    -      "mimeType": "video/VP9",
    -      "scalabilityModes": [
    -        "L1T1",
    -        "L1T2",
    -        "L1T3"
    -      ],
    -      "sdpFmtpLine": "profile-id=0"
    -    },
    -    {
    -      "clockRate": 90000,
    -      "mimeType": "video/VP9",
    -      "sdpFmtpLine": "profile-id=2"
    -    },
    -    {
    -      "clockRate": 90000,
    -      "mimeType": "video/H264",
    -      "sdpFmtpLine": "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f"
    -    },
    -    {
    -      "clockRate": 90000,
    -      "mimeType": "video/H264",
    -      "sdpFmtpLine": "level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f"
    -    },
    -    {
    -      "clockRate": 90000,
    -      "mimeType": "video/H264",
    -      "sdpFmtpLine": "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f"
    -    },
    -    {
    -      "clockRate": 90000,
    -      "mimeType": "video/H264",
    -      "sdpFmtpLine": "level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f"
    -    },
    -    {
    -      "clockRate": 90000,
    -      "mimeType": "video/AV1",
    -      "scalabilityModes": [
    -        "L1T1",
    -        "L1T2",
    -        "L1T3",
    -        "L2T1",
    -        "L2T1h",
    -        "L2T1_KEY",
    -        "L2T2",
    -        "L2T2_KEY",
    -        "L2T2_KEY_SHIFT",
    -        "L3T1",
    -        "L3T3",
    -        "L3T3_KEY",
    -        "S2T1"
    -      ]
    -    },
    -    {
    -      "clockRate": 90000,
    -      "mimeType": "video/H264",
    -      "sdpFmtpLine": "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f"
    -    },
    -    {
    -      "clockRate": 90000,
    -      "mimeType": "video/H264",
    -      "sdpFmtpLine": "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f"
    -    },
    -    {
    -      "clockRate": 90000,
    -      "mimeType": "video/red"
    -    },
    -    {
    -      "clockRate": 90000,
    -      "mimeType": "video/ulpfec"
    -    }
    -]
    +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');
    +}
            
    @@ -938,24 +842,14 @@

    Privacy Considerations

    Persistent information

    -

    - The WebRTC API exposes information about the underlying media system - via the {{RTCRtpSender.getCapabilities()}} method, including detailed - and ordered information about the codecs that the system is able to - produce. The WebRTC-SVC extension adds the - {{RTCRtpCodecCapability/scalabilityModes}} supported by the {{RTCRtpSender}} - to that information, which is persistent across time, therefore increasing - the fingerprint surface. Additional information is not provided relating to - the {{RTCRtpReceiver}}. -

    Since for SVC codecs implemented in WebRTC the use of scalable coding tools is not negotiated and is independent of the supported profiles, and since SVC is rarely supported in hardware encoders, knowledge of the - {{RTCRtpCodecCapability/scalabilityModes}} supported by the {{RTCRtpSender}} + {{RTCRtpEncodingParameters/scalabilityMode}} supported by the {{RTCRtpSender}} does not provide additional information on the underlying hardware. However, since browsers may differ in their support for SVC modes, the supported - {{RTCRtpCodecCapability/scalabilityModes}} may permit differentiation + {{RTCRtpEncodingParameters/scalabilityMode}} may permit differentiation between browsers. This additional fingerprint surface is expected to decrease over time as this specification is more widely implemented.

    diff --git a/svc-respec-config.js b/svc-respec-config.js index 187c6a5..318029f 100644 --- a/svc-respec-config.js +++ b/svc-respec-config.js @@ -11,7 +11,7 @@ var respecConfig = { } ], formerEditors: [ - { name: "Peter Thatcher", company: "Google", w3cid: "68236", retiredDate: "2019-12-31" } + { name: "Peter Thatcher", company: "Microsoft Corporation", w3cid: "68236", retiredDate: "2019-12-31" } ], authors: [ ],
    "L1T1""L1T1" 1 1 N/A
    "L1T2""L1T2" 1 2 SCALABILITY_L1T2
    "L1T3""L1T3" 1 3 SCALABILITY_L1T3
    "L2T1""L2T1" 2 2:1 1 SCALABILITY_L2T1
    "L2T2""L2T2" 2 2:1 2 SCALABILITY_L2T2
    "L2T3""L2T3" 2 2:1 3 SCALABILITY_L2T3
    "L3T1""L3T1" 3 2:1 1 SCALABILITY_L3T1
    "L3T2""L3T2" 3 2:1 2 SCALABILITY_L3T2
    "L3T3""L3T3" 3 2:1 3 SCALABILITY_L3T3
    "L2T1h""L2T1h" 2 1.5:1 1 SCALABILITY_L2T1h
    "L2T2h""L2T2h" 2 1.5:1 2 SCALABILITY_L2T2h
    "L2T3h""L2T3h" 2 1.5:1 3 SCALABILITY_L2T3h
    "S2T1""S2T1" 2 2:1 1 SCALABILITY_S2T1
    "S2T2""S2T2" 2 2:1 2 SCALABILITY_S2T2
    "S2T3""S2T3" 2 2:1 3 SCALABILITY_S2T3
    "S2T1h""S2T1h" 2 1.5:1 1 SCALABILITY_S2T1h
    "S2T2h""S2T2h" 2 1.5:1 2 SCALABILITY_S2T2h
    "S2T3h""S2T3h" 2 1.5:1 3 SCALABILITY_S2T3h
    "S3T1""S3T1" 3 2:1 1 SCALABILITY_S3T1
    "S3T2""S3T2" 3 2:1 2 SCALABILITY_S3T2
    "S3T3""S3T3" 3 2:1 3 SCALABILITY_S3T3
    "S3T1h""S3T1h" 3 1.5:1 1 SCALABILITY_S3T1h
    "S3T2h""S3T2h" 3 1.5:1 2 SCALABILITY_S3T2h
    "S3T3h""S3T3h" 3 1.5:1 3 SCALABILITY_S3T3h
    "L2T2_KEY""L2T2_KEY" 2 2:1 2 SCALABILITY_L3T2_KEY
    "L2T2_KEY_SHIFT""L2T2_KEY_SHIFT" 2 2:1 2 SCALABILITY_L3T2_KEY_SHIFT
    "L2T3_KEY""L2T3_KEY" 2 2:1 3 SCALABILITY_L3T3_KEY
    "L2T3_KEY_SHIFT""L2T3_KEY_SHIFT" 2 2:1 3 SCALABILITY_L3T3_KEY_SHIFT
    "L3T2_KEY""L3T2_KEY" 3 2:1 2 SCALABILITY_L4T5_KEY
    "L3T2_KEY_SHIFT""L3T2_KEY_SHIFT" 3 2:1 2 SCALABILITY_L4T5_KEY_SHIFT
    "L3T3_KEY""L3T3_KEY" 3 2:1 3 SCALABILITY_L4T7_KEY
    "L3T3_KEY_SHIFT""L3T3_KEY_SHIFT" 3 2:1 3