From 5cb7d8d8328691bb4d66f0596392dd92a2b487f7 Mon Sep 17 00:00:00 2001 From: Dominique Hazael-Massieux Date: Wed, 21 Aug 2024 11:16:15 +0200 Subject: [PATCH 01/18] Add support for listing proposed amendments --- amendments.js | 59 +++++++++++++++++++++++++++------------------------ webrtc.html | 12 ++++++++--- 2 files changed, 40 insertions(+), 31 deletions(-) diff --git a/amendments.js b/amendments.js index 3b62afd55..7108b42ae 100644 --- a/amendments.js +++ b/amendments.js @@ -103,7 +103,7 @@ async function listAmendments(config, _, {showError}) { } let m; let i = 0; - let consolidatedAmendments = {}; + let consolidatedAmendments = {proposed: {}, candidate: {}}; for (let id of Object.keys(amendments)) { // validate that an amendment is not embedded in another const container = document.getElementById(id) ?? baseRec.querySelector("#" + id); @@ -130,35 +130,38 @@ async function listAmendments(config, _, {showError}) { // Group by candidate id for listing in the appendix for (let amendment of amendments[id]) { - if (!consolidatedAmendments[amendment.id]) { - consolidatedAmendments[amendment.id] = []; + if (!consolidatedAmendments[amendment.status][amendment.id]) { + consolidatedAmendments[amendment.status][amendment.id] = []; } - consolidatedAmendments[amendment.id].push({...amendment, section: id}); + consolidatedAmendments[amendment.status][amendment.id].push({...amendment, section: id}); } } - if (document.getElementById("changes")) { - const ul = document.createElement("ul"); - Object.values(consolidatedAmendments).forEach((amendment) => { - const {status, id, type} = amendment[0]; - const li = document.createElement("li"); - const entriesUl = document.createElement("ul"); - li.appendChild(document.createTextNode(`${capitalize(status)} ${capitalize(type)} ${id}: `)); - amendment.forEach(({description, section, pr, testUpdates}, i) => { - const entryLi = document.createElement("li"); - entryLi.innerHTML = description; - const link = document.createElement("a"); - entryLi.appendChild(document.createTextNode(" - ")); - link.href = "#" + section; - link.textContent = `section ${titleFromId(section)}`; - entryLi.appendChild(link); - entryLi.appendChild(listPRs(pr, config.github.repoURL)); - entryLi.appendChild(listTestUpdates(testUpdates)); - entriesUl.appendChild(entryLi); - }); - li.appendChild(entriesUl); - ul.appendChild(li); - }); - document.getElementById("changes").appendChild(ul); + for (const status of ["proposed", "candidate"]) { + const section = document.getElementById(`${status}-amendments`); + if (section) { + const ul = document.createElement("ul"); + for (const amendment of Object.values(consolidatedAmendments[status])) { + const {status, id, type} = amendment[0]; + const li = document.createElement("li"); + const entriesUl = document.createElement("ul"); + li.appendChild(document.createTextNode(`${capitalize(status)} ${capitalize(type)} ${id}: `)); + amendment.forEach(({description, section, pr, testUpdates}, i) => { + const entryLi = document.createElement("li"); + entryLi.innerHTML = description; + const link = document.createElement("a"); + entryLi.appendChild(document.createTextNode(" - ")); + link.href = "#" + section; + link.textContent = `section ${titleFromId(section)}`; + entryLi.appendChild(link); + entryLi.appendChild(listPRs(pr, config.github.repoURL)); + entryLi.appendChild(listTestUpdates(testUpdates)); + entriesUl.appendChild(entryLi); + }); + li.appendChild(entriesUl); + ul.appendChild(li); + } + section.appendChild(ul); + } } } @@ -191,7 +194,7 @@ async function showAmendments(config, _, {showError}) { continue; } const amendmentDiv = document.createElement("div"); - amendmentDiv.className = type; + amendmentDiv.className = `${status} ${type}`; const marker = document.createElement("span"); marker.className = "marker"; marker.textContent = `${capitalize(status)} ${capitalize(type)} ${id}:`; diff --git a/webrtc.html b/webrtc.html index 24af0515d..86f2db00b 100644 --- a/webrtc.html +++ b/webrtc.html @@ -43,7 +43,7 @@

-

This document includes Candidate Amendments to the current W3C Recommendation dated January 26, 2021.

+

This document includes Proposed Amendments and Candidate Amendments to the current W3C Recommendation dated January 26, 2021.

Its associated @@ -18172,11 +18172,17 @@

effectively and consistently standardise RTT support internationally.

-
+
+

+ Proposed Amendments +

+

Since its publication as a W3C Recommendation in January 2021, the following proposed amendments have been integrated in this document.

+
+

Candidate Amendments

-

Since its publication as a W3C Recommendation in January 2021, the following candidate amendments have been integrated in this document.

+

Since its publication as a W3C Recommendation in January 2021, the following candidate amendments have been integrated in this document.

From 8fc2de1d59067efe26f5f14ac00d115a99fff55e Mon Sep 17 00:00:00 2001 From: Dominique Hazael-Massieux Date: Wed, 21 Aug 2024 11:43:36 +0200 Subject: [PATCH 02/18] Mark as proposed amendments with 2 implementation experience based on https://w3c.github.io/webrtc-interop-reports/webrtc-update.html as of today --- amendments.json | 74 ++++++++++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/amendments.json b/amendments.json index 2ffd5fd13..c0f48f53b 100644 --- a/amendments.json +++ b/amendments.json @@ -12,14 +12,14 @@ "web-platform-tests/wpt#43166" ], "type": "correction", - "status": "candidate", + "status": "proposed", "id": 1 }, { "description": "Allow an implementation-defined limited to the number of configured ICE Servers", "pr": 2679, "type": "correction", - "status": "candidate", + "status": "proposed", "testUpdates": "not-testable", "id": 2 } @@ -37,7 +37,7 @@ "web-platform-tests/wpt#43166" ], "type": "correction", - "status": "candidate", + "status": "proposed", "id": 1 }, { @@ -50,7 +50,7 @@ "web-platform-tests/wpt#43167" ], "type": "correction", - "status": "candidate", + "status": "proposed", "id": 6 }, { @@ -70,7 +70,7 @@ ], "testUpdates": "already-tested", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 3 } ], @@ -83,7 +83,7 @@ ], "testUpdates": "already-tested", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 3 }, { @@ -96,7 +96,7 @@ "web-platform-tests/wpt#43171" ], "type": "correction", - "status": "candidate", + "status": "proposed", "id": 4 } ], @@ -109,7 +109,7 @@ ], "testUpdates": "already-tested", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 3 } ], @@ -153,7 +153,7 @@ "pr": [2686, 2700], "testUpdates": "not-testable", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 7 } ], @@ -163,7 +163,7 @@ "pr": [2686, 2700], "testUpdates": "not-testable", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 7 } ], @@ -173,7 +173,7 @@ "pr": 2704, "type": "correction", "testUpdates": "not-testable", - "status": "candidate", + "status": "proposed", "id": 8 } ], @@ -183,7 +183,7 @@ "pr": 2742, "testUpdates": "already-tested", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 9 } ], @@ -199,7 +199,7 @@ "web-platform-tests/wpt#43172" ], "type": "correction", - "status": "candidate", + "status": "proposed", "id": 10 } ], @@ -210,7 +210,7 @@ "testUpdates": "not-testable", "difftype": "modify", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 11 } ], @@ -253,7 +253,7 @@ "testUpdates": "not-testable", "difftype": "modify", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 28 } ], @@ -353,7 +353,7 @@ "testUpdates": "not-testable", "difftype": "modify", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 17 } ], @@ -364,7 +364,7 @@ "testUpdates": "not-testable", "difftype": "modify", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 17 } ], @@ -392,7 +392,7 @@ "web-platform-tests/wpt#43173" ], "type": "addition", - "status": "candidate", + "status": "proposed", "id": 19 }, { @@ -418,7 +418,7 @@ "web-platform-tests/wpt#37477" ], "type": "correction", - "status": "candidate", + "status": "proposed", "id": 24 }, { @@ -472,7 +472,7 @@ "web-platform-tests/wpt#43173" ], "type": "addition", - "status": "candidate", + "status": "proposed", "id": 19 }, { @@ -485,7 +485,7 @@ "web-platform-tests/wpt#37477" ], "type": "correction", - "status": "candidate", + "status": "proposed", "id": 24 }, { @@ -549,7 +549,7 @@ "web-platform-tests/wpt#43173" ], "type": "addition", - "status": "candidate", + "status": "proposed", "id": 19 } ], @@ -698,7 +698,7 @@ "testUpdates": "not-testable", "difftype": "modify", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 43 } ], @@ -708,7 +708,7 @@ "pr": 2834, "testUpdates": "not-testable", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 29 } ], @@ -718,7 +718,7 @@ "pr": 2841, "testUpdates": "not-testable", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 30 } ], @@ -731,7 +731,7 @@ ], "testUpdates": "already-tested", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 31 }, { @@ -754,7 +754,7 @@ "pr": 2829, "testUpdates": "already-tested", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 32 } ], @@ -765,7 +765,7 @@ "testUpdates": "already-tested", "difftype": "append", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 32 } ], @@ -787,7 +787,7 @@ ], "testUpdates": "already-tested", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 34 } ], @@ -801,7 +801,7 @@ "testUpdates": "already-tested", "difftype": "append", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 35 } ], @@ -812,7 +812,7 @@ "testUpdates": "not-testable", "type": "addition", "difftype": "append", - "status": "candidate", + "status": "proposed", "id": 36 } ], @@ -851,7 +851,7 @@ "description": "Fix binaryType setter requirements", "pr": 2909, "type": "correction", - "status": "candidate", + "status": "proposed", "tests": [ "webrtc/RTCDataChannel-binaryType.window.html" ], @@ -864,7 +864,7 @@ "description": "Change the default value of binaryType", "pr": 2913, "type": "correction", - "status": "candidate", + "status": "proposed", "tests": [ "webrtc/RTCDataChannel-binaryType.window.html", "webrtc/RTCDataChannel-send.html", @@ -881,7 +881,7 @@ "description": "setCodecPreferences only takes into account receive codecs", "pr": 2926, "type": "correction", - "status": "candidate", + "status": "proposed", "tests": [ "webrtc/RTCRtpTransceiver-setCodecPreferences.html" ], @@ -895,7 +895,7 @@ { "description": "Add control for the receiver's jitter buffer", "type": "addition", - "status": "candidate", + "status": "proposed", "difftype": "append", "pr": 2953, "id": 44, @@ -913,7 +913,7 @@ { "description": "Add control for the receiver's jitter buffer", "type": "addition", - "status": "candidate", + "status": "proposed", "pr": 2953, "id": 44, "tests": [ @@ -930,7 +930,7 @@ { "description": "Add control for the receiver's jitter buffer", "type": "addition", - "status": "candidate", + "status": "proposed", "difftype": "append", "pr": 2953, "id": 44, From 4da7814c2fb86851a2b4a49c163b850d4ca6ba4a Mon Sep 17 00:00:00 2001 From: Dominique Hazael-Massieux Date: Tue, 3 Sep 2024 10:59:12 +0200 Subject: [PATCH 03/18] Improve error reporting on amendments --- amendments.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/amendments.js b/amendments.js index 7108b42ae..fe6aa2072 100644 --- a/amendments.js +++ b/amendments.js @@ -114,18 +114,15 @@ async function listAmendments(config, _, {showError}) { if (amendments[id][0].difftype !== 'append') { const embedded = Object.keys(amendments).filter(iid => iid !== id).find(iid => container.querySelector("#" + iid)); if (embedded) { - showError(`The container with id ${id} marked as amended cannot embed the other container of amendment ${embedded}, see https://github.com/w3c/webrtc-pc/blob/main/amendments.md for amendments management`, PLUGIN_NAME, {elements: [container]}); + showError(`The container with id \`${id}\` marked as amended cannot embed the other container of amendment \`${embedded}\`, see the [instructions for amendments mangements](https://github.com/w3c/webrtc-pc/blob/main/amendments.md)`, PLUGIN_NAME, {elements: [container]}); } } // validate that a section has only one difftype, one amendment type, one amendment status if (amendments[id].some(a => a.difftype && a.difftype !== amendments[id][0].difftype)) { - showError(`Amendments in container with id ${id} are mixing "modification" and "append" difftypes, see https://github.com/w3c/webrtc-pc/blob/main/amendments.md for amendments management`, PLUGIN_NAME, {elements: [container]}); - } - if (amendments[id].some(a => a.type !== amendments[id][0].type)) { - //throw new Error(`Amendments in container with id ${id} are mixing "corrections" and "addition" types`); + showError(`Amendments in container with id \`${id}\` are mixing \`modify\` and \`append\` difftypes, see the [instructions for amendments mangements](https://github.com/w3c/webrtc-pc/blob/main/amendments.md)`, PLUGIN_NAME, {elements: [container]}); } if (amendments[id].some(a => a.status !== amendments[id][0].status)) { - showError(`Amendments in container with id ${id} are mixing "candidate" and "proposed" amendments, see https://github.com/w3c/webrtc-pc/blob/main/amendments.md for amendments management`, PLUGIN_NAME, {elements: [container]}); + showError(`Amendments in container with id \`${id}\` are mixing \`candidate\` and \`proposed\` amendments, see [instructions for amendments mangements](https://github.com/w3c/webrtc-pc/blob/main/amendments.md)`, PLUGIN_NAME, {elements: [container]}); } // Group by candidate id for listing in the appendix From 321583fb7ca669ba3b735b978467a165ff4f1979 Mon Sep 17 00:00:00 2001 From: Dominique Hazael-Massieux Date: Tue, 3 Sep 2024 10:59:49 +0200 Subject: [PATCH 04/18] Mark amendments 15, 20, 21 as proposed based on latest test results data --- amendments.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/amendments.json b/amendments.json index c0f48f53b..e87b2aa51 100644 --- a/amendments.json +++ b/amendments.json @@ -230,7 +230,7 @@ "pr": 2760, "difftype": "modify", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 15 }, { @@ -405,7 +405,7 @@ "web-platform-tests/wpt#37477" ], "type": "correction", - "status": "candidate", + "status": "proposed", "id": 20 }, { @@ -446,7 +446,7 @@ "web-platform-tests/wpt#37477" ], "type": "correction", - "status": "candidate", + "status": "proposed", "id": 20 }, { @@ -459,7 +459,7 @@ "web-platform-tests/wpt#37477" ], "type": "correction", - "status": "candidate", + "status": "proposed", "id": 21 }, { @@ -521,7 +521,7 @@ "web-platform-tests/wpt#37477" ], "type": "correction", - "status": "candidate", + "status": "proposed", "id": 21 }, { From 24d9da8980fe4a85a6fe856640900bf30cd6da74 Mon Sep 17 00:00:00 2001 From: Dominique Hazael-Massieux Date: Tue, 3 Sep 2024 11:05:12 +0200 Subject: [PATCH 05/18] Split off amendments 15, 28 and 12 given their different maturity --- amendments.json | 22 ++++++++++++---------- base-rec.html | 6 ++++-- webrtc.html | 4 +++- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/amendments.json b/amendments.json index e87b2aa51..2d85af520 100644 --- a/amendments.json +++ b/amendments.json @@ -224,7 +224,7 @@ "id": 37 } ], - "simulcast-functionality": [ + "simulcast-envelope": [ { "description": "Clarify simulcast envelope is determined by negotiation", "pr": 2760, @@ -233,6 +233,17 @@ "status": "proposed", "id": 15 }, + { + "description": "Update explanation of simulcast envelope.", + "pr": 2814, + "testUpdates": "not-testable", + "difftype": "modify", + "type": "correction", + "status": "proposed", + "id": 28 + } + ], + "simulcast-pause": [ { "description": "Mark RTP Pause/Resume as not supported", "pr": 2755, @@ -246,15 +257,6 @@ "type": "correction", "status": "candidate", "id": 12 - }, - { - "description": "Update explanation of simulcast envelope.", - "pr": 2814, - "testUpdates": "not-testable", - "difftype": "modify", - "type": "correction", - "status": "proposed", - "id": 28 } ], "webidl-rtcicecandidate": [ diff --git a/base-rec.html b/base-rec.html index 26a5bb9b6..4e9f32a78 100644 --- a/base-rec.html +++ b/base-rec.html @@ -11190,7 +11190,8 @@

5.4.1 Simulcast functionality -

+

+

Simulcast functionality is provided via the addTransceiver method of the @@ -11222,7 +11223,8 @@

5.4.1 active member to false effectively disabling the layer.

-

+

+

While setParameters cannot modify the simulcast envelope, it is still possible to control the number of streams that are sent and the characteristics of those streams. Using diff --git a/webrtc.html b/webrtc.html index 86f2db00b..a62ada397 100644 --- a/webrtc.html +++ b/webrtc.html @@ -11501,6 +11501,7 @@

Simulcast functionality

+

Simulcast sending functionality is enabled by the {{RTCPeerConnection/addTransceiver}} method via its @@ -11540,7 +11541,8 @@

completes. As above, this [=simulcast envelope=] may be narrowed in subsequent renegotiation, but not reexpanded.

-

+

+

While {{RTCRtpSender/setParameters}} cannot modify the [= simulcast envelope =], it is still possible to control the number of streams that are sent and the characteristics of those streams. Using From a4563b7729ed03ff26b3e38d3eecc67f1e24f658 Mon Sep 17 00:00:00 2001 From: Dominique Hazael-Massieux Date: Tue, 3 Sep 2024 11:15:11 +0200 Subject: [PATCH 06/18] Merge amendment 19 and 24 24 is only a refinement of 19 --- amendments.json | 30 ++---------------------------- 1 file changed, 2 insertions(+), 28 deletions(-) diff --git a/amendments.json b/amendments.json index 2d85af520..faa032e62 100644 --- a/amendments.json +++ b/amendments.json @@ -399,7 +399,7 @@ }, { "description": "Remove RTCRtpEncodingParameters.scaleResolutionDownBy for audio", - "pr": 2772, + "pr": [2772, 2799], "tests": [ "webrtc/RTCRtpParameters-encodings.html" ], @@ -410,19 +410,6 @@ "status": "proposed", "id": 20 }, - { - "description": "Remove maxFramerate like scaleResolutionDownBy for audio", - "pr": 2799, - "tests": [ - "webrtc/RTCRtpParameters-maxFramerate.html" - ], - "testUpdates": [ - "web-platform-tests/wpt#37477" - ], - "type": "correction", - "status": "proposed", - "id": 24 - }, { "description": "Add codec to RTCRtpEncodingParameters", "type": "addition", @@ -440,7 +427,7 @@ "setparameters-algo": [ { "description": "Remove RTCRtpEncodingParameters.scaleResolutionDownBy for audio", - "pr": 2772, + "pr": [2772, 2799], "tests": [ "webrtc/RTCRtpParameters-encodings.html" ], @@ -477,19 +464,6 @@ "status": "proposed", "id": 19 }, - { - "description": "Remove maxFramerate like scaleResolutionDownBy for audio", - "pr": 2799, - "tests": [ - "webrtc/RTCRtpParameters-maxFramerate.html" - ], - "testUpdates": [ - "web-platform-tests/wpt#37477" - ], - "type": "correction", - "status": "proposed", - "id": 24 - }, { "description": "Reject setParameters(), replaceTrack(), & insertDTMF() after stop()", "pr": 2829, From f886e73026b71d3e5751fdb94a5c9a241f26dffb Mon Sep 17 00:00:00 2001 From: Dominique Hazael-Massieux Date: Tue, 3 Sep 2024 11:32:19 +0200 Subject: [PATCH 07/18] Use more granular diff targets for amendments 18, 49, 19, 20 --- amendments.json | 62 +++++++++++++++++++++++++++++++++++++++++++++---- base-rec.html | 4 ++-- webrtc.html | 12 +++++----- 3 files changed, 66 insertions(+), 12 deletions(-) diff --git a/amendments.json b/amendments.json index faa032e62..1dda06cb4 100644 --- a/amendments.json +++ b/amendments.json @@ -370,7 +370,7 @@ "id": 17 } ], - "addtransceiver-algo": [ + "rid-validation": [ { "description": "TypeError unless all or none of encodings have rids and on duplicate rids", "pr": [2774, 2775], @@ -383,7 +383,9 @@ "type": "correction", "status": "candidate", "id": 18 - }, + } + ], + "srdb-mf-validation-1": [ { "description": "Add RTCRtpEncodingParameters.maxFramerate", "pr": 2785, @@ -395,6 +397,7 @@ ], "type": "addition", "status": "proposed", + "difftype": "append", "id": 19 }, { @@ -408,8 +411,42 @@ ], "type": "correction", "status": "proposed", + "difftype": "append", "id": 20 - }, + } + ], + "srdb-mf-validation-2": [ + { + "description": "Add RTCRtpEncodingParameters.maxFramerate", + "pr": 2785, + "tests": [ + "webrtc/RTCRtpParameters-maxFramerate.html" + ], + "testUpdates": [ + "web-platform-tests/wpt#43173" + ], + "type": "addition", + "status": "proposed", + "id": 19, + "difftype": "append" + } + ], + "srdb-mf-validation-3": [ + { + "description": "Remove RTCRtpEncodingParameters.scaleResolutionDownBy for audio", + "pr": [2772, 2799], + "tests": [ + "webrtc/RTCRtpParameters-encodings.html" + ], + "testUpdates": [ + "web-platform-tests/wpt#37477" + ], + "type": "correction", + "status": "proposed", + "id": 20 + } + ], + "codec-validation-1": [ { "description": "Add codec to RTCRtpEncodingParameters", "type": "addition", @@ -421,7 +458,24 @@ ], "testUpdates": [ "web-platform-tests/wpt#47663" - ] + ], + "difftype": "append" + } + ], + "codec-validation-2": [ + { + "description": "Add codec to RTCRtpEncodingParameters", + "type": "addition", + "status": "candidate", + "id": 49, + "pr": 2985, + "tests": [ + "webrtc/RTCRtpParameters-codec.html" + ], + "testUpdates": [ + "web-platform-tests/wpt#47663" + ], + "difftype": "append" } ], "setparameters-algo": [ diff --git a/base-rec.html b/base-rec.html index 4e9f32a78..9e8c5e515 100644 --- a/base-rec.html +++ b/base-rec.html @@ -8365,7 +8365,7 @@

  • Validate sendEncodings by running the following steps:

      -
    1. +
    2. Verify that each rid value in sendEncodings conforms to the grammar @@ -8419,7 +8419,7 @@

      until its length is maxN.

    3. -
    4. If the +
    5. If the scaleResolutionDownBy attribues of sendEncodings are still undefined, initialize each encoding's diff --git a/webrtc.html b/webrtc.html index a62ada397..b081f10cf 100644 --- a/webrtc.html +++ b/webrtc.html @@ -8226,7 +8226,7 @@

      where each {{RTCRtpEncodingParameters}} dictionary in it is an "encoding":

        -
      1. +
      2. If any of the following conditions are met, [=exception/throw=] a {{TypeError}}:
          @@ -8260,19 +8260,19 @@

          an {{InvalidAccessError}}.

          -
        • +
        • If any encoding [=map/contains=] a {{RTCRtpEncodingParameters/codec}} member whose value does [= codec dictionary match | not match =] any codec in {{RTCRtpSender.getCapabilities(kind)}}.codecs, [= exception/throw =] an {{OperationError}}.

        • -
        • +
        • If the user agent does not support changing codecs without negotiation or does not support setting codecs for individual encodings, return a promise [= rejected =] with a newly [= exception/created =] {{OperationError}}.

        • -
        • +
        • If kind is `"audio"`, remove the {{RTCRtpEncodingParameters/scaleResolutionDownBy}} and @@ -8289,7 +8289,7 @@

          exception/throw =] a {{RangeError}}.

        • -
        • +
        • Verify that the value of each {{RTCRtpEncodingParameters/maxFramerate}} @@ -8326,7 +8326,7 @@

          until its length is maxN.

        • -
        • +
        • If kind is `"video"` and none of the encodings [=map/contain=] a From e1f8c77e3f2dc17c3a367f33316061bda70efb4c Mon Sep 17 00:00:00 2001 From: Dominique Hazael-Massieux Date: Tue, 3 Sep 2024 11:38:23 +0200 Subject: [PATCH 08/18] Use more granular diff targets for amendments 21, 13 --- amendments.json | 7 +++++-- base-rec.html | 4 ++-- webrtc.html | 6 +++--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/amendments.json b/amendments.json index 1dda06cb4..3cd32f4fc 100644 --- a/amendments.json +++ b/amendments.json @@ -540,7 +540,7 @@ ] } ], - "create-sender-algo": [ + "init-srbd": [ { "description": "Default RTCRtpEncodingParameters.scaleResolutionDownBy to 1 for video", "pr": 2772, @@ -553,7 +553,9 @@ "type": "correction", "status": "proposed", "id": 21 - }, + } + ], + "init-lsrse": [ { "description": "Rollback restores ridless encoding trounced by sRD(simulcastOffer).", "pr": 2797, @@ -565,6 +567,7 @@ ], "type": "correction", "status": "candidate", + "difftype": "append", "id": 13 } ], diff --git a/base-rec.html b/base-rec.html index 9e8c5e515..2beba449a 100644 --- a/base-rec.html +++ b/base-rec.html @@ -8902,7 +8902,7 @@

          5.2 RTCRtpEncodingParameters dictionaries.

        • -
        • +
        • If sendEncodings is given as input to this algorithm, and is non-empty, set the [[SendEncodings]] slot to @@ -8911,7 +8911,7 @@

          5.2 active set to true.

        • -
        • +
        • Let sender have a [[SendCodecs]] internal slot, representing a list of RTCRtpCodecParameters diff --git a/webrtc.html b/webrtc.html index b081f10cf..231ce932d 100644 --- a/webrtc.html +++ b/webrtc.html @@ -8832,7 +8832,7 @@

        • + "RTCPeerConnection-transceivers.https.html,protocol/simulcast-offer.html" id="init-srbd">

          If sendEncodings is given as input to this algorithm, and is non-empty, set the {{RTCRtpSender/[[SendEncodings]]}} slot to @@ -8847,14 +8847,14 @@

          true by default.

        • -
        • +
        • Let sender have a [[\LastStableRidlessSendEncodings]] internal slot initialized to null.

        • -
        • +
        • Let sender have a [[\SendCodecs]] internal slot, representing a list of {{RTCRtpCodecParameters}} From 63bf02fdf17a8048359ca216044eaf53e0c8c767 Mon Sep 17 00:00:00 2001 From: Dominique Hazael-Massieux Date: Tue, 3 Sep 2024 11:54:36 +0200 Subject: [PATCH 09/18] Use more granular diff targets for amendments 19, 20, 21, 24, 32, 49 Allows to deal with different maturity levels --- amendments.json | 137 ++++++++++++++++++++++++++++++++++++++++++------ base-rec.html | 4 +- webrtc.html | 20 +++---- 3 files changed, 133 insertions(+), 28 deletions(-) diff --git a/amendments.json b/amendments.json index 3cd32f4fc..a2ac2372c 100644 --- a/amendments.json +++ b/amendments.json @@ -478,7 +478,87 @@ "difftype": "append" } ], - "setparameters-algo": [ + "setparameters-codec-validation-1": [ + { + "description": "Add codec to RTCRtpEncodingParameters", + "type": "addition", + "status": "candidate", + "id": 49, + "pr": 2985, + "difftype": "append", + "tests": [ + "webrtc/RTCRtpParameters-codec.html" + ], + "testUpdates": [ + "web-platform-tests/wpt#47663" + ] + } + ], + "setparameters-codec-validation-2": [ + { + "description": "Add codec to RTCRtpEncodingParameters", + "type": "addition", + "status": "candidate", + "id": 49, + "pr": 2985, + "difftype": "append", + "tests": [ + "webrtc/RTCRtpParameters-codec.html" + ], + "testUpdates": [ + "web-platform-tests/wpt#47663" + ] + } + ], + "setparameters-codec-validation-3": [ + { + "description": "Add codec to RTCRtpEncodingParameters", + "type": "addition", + "status": "candidate", + "id": 49, + "pr": 2985, + "difftype": "append", + "tests": [ + "webrtc/RTCRtpParameters-codec.html" + ], + "testUpdates": [ + "web-platform-tests/wpt#47663" + ] + } + ], + "setparameters-codec-validation-4": [ + { + "description": "Add codec to RTCRtpEncodingParameters", + "type": "addition", + "status": "candidate", + "difftype": "append", + "id": 49, + "pr": 2985, + "tests": [ + "webrtc/RTCRtpParameters-codec.html" + ], + "testUpdates": [ + "web-platform-tests/wpt#47663" + ] + } + ], + "setparameters-codec-validation-5": [ + { + "description": "Add codec to RTCRtpEncodingParameters", + "type": "addition", + "status": "candidate", + "difftype": "append", + "id": 49, + "pr": 2985, + "tests": [ + "webrtc/RTCRtpParameters-codec.html" + ], + "testUpdates": [ + "web-platform-tests/wpt#47663" + ] + } + ], + "setparameters-srbd-mv-validation-1": [ { "description": "Remove RTCRtpEncodingParameters.scaleResolutionDownBy for audio", "pr": [2772, 2799], @@ -490,8 +570,25 @@ ], "type": "correction", "status": "proposed", + "difftype": "append", "id": 20 }, + { + "description": "Add RTCRtpEncodingParameters.maxFramerate", + "pr": 2785, + "tests": [ + "webrtc/RTCRtpParameters-maxFramerate.html" + ], + "testUpdates": [ + "web-platform-tests/wpt#43173" + ], + "type": "addition", + "status": "proposed", + "difftype": "append", + "id": 19 + } + ], + "setparameters-srbd-mv-validation-2": [ { "description": "Default RTCRtpEncodingParameters.scaleResolutionDownBy to 1 for video", "pr": 2772, @@ -503,8 +600,26 @@ ], "type": "correction", "status": "proposed", + "difftype": "append", "id": 21 - }, + } + ], + "setparameters-srbd-mv-validation-3": [ + { + "description": "Remove RTCRtpEncodingParameters.scaleResolutionDownBy for audio", + "pr": [2772, 2799], + "tests": [ + "webrtc/RTCRtpParameters-encodings.html" + ], + "testUpdates": [ + "web-platform-tests/wpt#37477" + ], + "type": "correction", + "status": "proposed", + "id": 20 + } + ], + "setparameters-srbd-mv-validation-4": [ { "description": "Add RTCRtpEncodingParameters.maxFramerate", "pr": 2785, @@ -516,8 +631,11 @@ ], "type": "addition", "status": "proposed", + "difftype": "append", "id": 19 - }, + } + ], + "setparameters-stopped": [ { "description": "Reject setParameters(), replaceTrack(), & insertDTMF() after stop()", "pr": 2829, @@ -525,19 +643,6 @@ "type": "correction", "status": "candidate", "id": 32 - }, - { - "description": "Add codec to RTCRtpEncodingParameters", - "type": "addition", - "status": "candidate", - "id": 49, - "pr": 2985, - "tests": [ - "webrtc/RTCRtpParameters-codec.html" - ], - "testUpdates": [ - "web-platform-tests/wpt#47663" - ] } ], "init-srbd": [ diff --git a/base-rec.html b/base-rec.html index 2beba449a..13daec693 100644 --- a/base-rec.html +++ b/base-rec.html @@ -9050,7 +9050,7 @@

          sender (i.e. sender is transceiver.[[Sender]]).

        • -
        • +
        • If transceiver.[[Stopped]] is true, return a promise rejected with a newly created InvalidStateError. @@ -9094,7 +9094,7 @@

    6. -
    7. +
    8. Verify that each encoding in encodings has a scaleResolutionDownBy diff --git a/webrtc.html b/webrtc.html index 231ce932d..70896f757 100644 --- a/webrtc.html +++ b/webrtc.html @@ -9027,7 +9027,7 @@

      transceiver.{{RTCRtpTransceiver/[[Sender]]}}).

    9. + "RTCRtpSender-setParameters.html,RTCRtpTransceiver.https.html" id="setparameters-stopped"> If transceiver.{{RTCRtpTransceiver/[[Stopping]]}} is true, return a promise [= rejected =] with a newly [= exception/created =] {{InvalidStateError}}. @@ -9048,14 +9048,14 @@

    10. Let codecs be parameters.{{RTCRtpParameters/codecs}}.
    11. -
    12. +
    13. Let choosableCodecs be codecs.

    14. -
    15. +
    16. If choosableCodecs is an empty list, set choosableCodecs to transceiver.{{RTCRtpTransceiver/[[PreferredCodecs]]}}.

    17. -
    18. +
    19. If choosableCodecs is still an empty list, set choosableCodecs to the [=RTCRtpSender/list of implemented send codecs=] for transceiver's kind.

    20. @@ -9084,13 +9084,13 @@

      Note that this also applies to transactionId.

    21. -
    22. +
    23. Any encoding in encodings [=map/exists|contains=] a codec [= codec dictionary match | not found =] in choosableCodecs.
    24. -
    25. +
    26. If [=RTCRtpTransceiver/transceiver kind=] is `"audio"`, remove the {{RTCRtpEncodingParameters/scaleResolutionDownBy}} and @@ -9099,7 +9099,7 @@

      [=map/contain=] any of them.

    27. -
    28. +
    29. If [=RTCRtpTransceiver/transceiver kind=] is `"video"`, then for each encoding in encodings that doesn't @@ -9110,7 +9110,7 @@

      member with the value `1.0`.

    30. -
    31. +
    32. If [=RTCRtpTransceiver/transceiver kind=] is `"video"`, and any encoding in encodings @@ -9121,7 +9121,7 @@

      exception/created =] {{RangeError}}.

    33. -
    34. +
    35. Verify that each encoding in encodings has a {{RTCRtpEncodingParameters/maxFramerate}} @@ -9132,7 +9132,7 @@

      exception/created =] {{RangeError}}.

    36. -
    37. +
    38. If the user agent does not support setting the codec for any encoding or mixing different codec values on the different encodings, return a promise [= rejected =] with a newly [= exception/created =] {{OperationError}}. From 8151c8c82dcf5eefb54d76c46411f32ec498856e Mon Sep 17 00:00:00 2001 From: Dominique Hazael-Massieux Date: Tue, 3 Sep 2024 12:38:47 +0200 Subject: [PATCH 10/18] Fix duplicate id in amendment --- amendments.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amendments.json b/amendments.json index a2ac2372c..3627cade2 100644 --- a/amendments.json +++ b/amendments.json @@ -966,7 +966,7 @@ ], "type": "correction", "status": "candidate", - "id": 44 + "id": 24 } ], "closing-procedure": [ From e872989f1baa51b5c6d1a139dee5914e5bdb583e Mon Sep 17 00:00:00 2001 From: Dominique Hazael-Massieux Date: Tue, 3 Sep 2024 12:40:23 +0200 Subject: [PATCH 11/18] Fix status of amendment 32 --- amendments.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amendments.json b/amendments.json index 3627cade2..1f611272d 100644 --- a/amendments.json +++ b/amendments.json @@ -641,7 +641,7 @@ "pr": 2829, "testUpdates": "already-tested", "type": "correction", - "status": "candidate", + "status": "proposed", "id": 32 } ], From cd9fd6e7061da37e26dab78605af6aeb979be1ba Mon Sep 17 00:00:00 2001 From: Dominique Hazael-Massieux Date: Thu, 3 Oct 2024 10:35:14 +0200 Subject: [PATCH 12/18] Mark Transferable data channel as proposed implemented twice --- amendments.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/amendments.json b/amendments.json index 1f611272d..2cbd9ac89 100644 --- a/amendments.json +++ b/amendments.json @@ -882,7 +882,7 @@ "web-platform-tests/wpt#46526" ], "type": "correction", - "status": "candidate", + "status": "proposed", "id": 47 } ], @@ -1145,7 +1145,7 @@ "description": "Make RTCDataChannel transferable to DedicatedWorker", "pr": 2988, "type": "addition", - "status": "candidate", + "status": "proposed", "id": 48, "tests": [ "webrtc/transfer-datachannel.html" From b3f55e8664477295dcfd8048d510cca85a9cfdfe Mon Sep 17 00:00:00 2001 From: Dominique Hazael-Massieux Date: Wed, 4 Sep 2024 10:14:52 +0200 Subject: [PATCH 13/18] Factor out URL parsing algorithm Split it out editorially since it hasn't reached the same level of implementation as the rest of the algorithm --- amendments.json | 6 ++- base-rec.html | 84 ++++++++++++++++++------------------- webrtc.html | 108 +++++++++++++++++++++++------------------------- 3 files changed, 97 insertions(+), 101 deletions(-) diff --git a/amendments.json b/amendments.json index 2cbd9ac89..a8eca0f93 100644 --- a/amendments.json +++ b/amendments.json @@ -24,7 +24,7 @@ "id": 2 } ], - "set-the-configuration": [ + "set-the-configuration-algo": [ { "description": "Set default values of the RTCConfiguration dictionary, aligning it with current implementations", "pr": 2691, @@ -52,7 +52,9 @@ "type": "correction", "status": "proposed", "id": 6 - }, + } + ], + "validate-ice-server-algo": [ { "description": "Use the url spec to parse ice server urls", "pr": 2853, diff --git a/base-rec.html b/base-rec.html index 13daec693..f772c7f26 100644 --- a/base-rec.html +++ b/base-rec.html @@ -3498,7 +3498,7 @@

      4.4.1.6 To set a configuration, run the following steps:

      -
        +
        1. Let configuration be the RTCConfiguration @@ -3652,48 +3652,8 @@

          4.4.1.6
        2. - For each url in urls run the - following steps: + For each url in urls, run the [=validate an ICE server URL=] algorithm on url.

          -
            -
          1. -

            - Parse the url using the generic URI syntax - defined in [RFC3986] and obtain the scheme - name. If the parsing based on the syntax - defined in [RFC3986] fails, throw - a SyntaxError. If the scheme name is - not implemented by the browser throw - a NotSupportedError. If scheme name is - turn or turns, and parsing the url - using the syntax defined in [RFC7065] fails, throw a SyntaxError. If scheme - name is stun or - stuns, and parsing the - url using the syntax defined in - [RFC7064] fails, throw a - SyntaxError. -

            -
          2. -
          3. -

            - If scheme name is turn or turns, and either of - server.username or - server.credential are - omitted, then throw an - InvalidAccessError. -

            -
          4. -
          5. -

            - If scheme name is turn or turns, and - server.credentialType is - "password", and - server.credential is not - a DOMString, then - throw an InvalidAccessError. -

            -
          6. -
        3. @@ -3725,6 +3685,46 @@

          4.4.1.6

        +

        To validate an ICE server URL url, run the following steps:

        +
          +
        1. +

          + Parse the url using the generic URI syntax + defined in [RFC3986] and obtain the scheme + name. If the parsing based on the syntax + defined in [RFC3986] fails, throw + a SyntaxError. If the scheme name is + not implemented by the browser throw + a NotSupportedError. If scheme name is + turn or turns, and parsing the url + using the syntax defined in [RFC7065] fails, throw a SyntaxError. If scheme + name is stun or + stuns, and parsing the + url using the syntax defined in + [RFC7064] fails, throw a + SyntaxError. +

          +
        2. +
        3. +

          + If scheme name is turn or turns, and either of + server.username or + server.credential are + omitted, then throw an + InvalidAccessError. +

          +
        4. +
        5. +

          + If scheme name is turn or turns, and + server.credentialType is + "password", and + server.credential is not + a DOMString, then + throw an InvalidAccessError. +

          +
        6. +
  • diff --git a/webrtc.html b/webrtc.html index 70896f757..ca7a058cc 100644 --- a/webrtc.html +++ b/webrtc.html @@ -2920,7 +2920,7 @@

    "set-pc-configuration">set a configuration with configuration, run the following steps:

    -
      +
      1. Let connection be the target {{RTCPeerConnection}} @@ -3047,63 +3047,8 @@

      2. - For each url in urls run the - following steps: + For each url in urls, run the [=validate an ICE server URL=] algorithm on url.

        -
          -
        1. -

          Let parsedURL be the result of - parsing - url.

          -
        2. -
        3. -

          If any of the following conditions apply, then [=exception/throw=] a - "{{SyntaxError}}" {{DOMException}}:

          -
            -
          • parsedURL is failure
          • -
          • parsedURL's [=url/scheme=] is neither `"stun"`, - `"stuns"`, `"turn"`, nor `"turns"`
          • -
          • parsedURL does not have an [=url/opaque path=]
          • -
          • parsedURL's' [=url/fragment=] is non-null
          • -
          • parsedURL's' [=url/scheme=] is `"stun"` or `"stuns"`, - and parsedURL's' [=url/query=] is non-null
          • -
          -
        4. -
        5. -

          If parsedURL's [=url/scheme=] is not implemented by the - user agent, then [=exception/throw=] a {{NotSupportedError}}.

          -
        6. -
        7. -

          Let hostAndPortURL be result of - parsing the concatenation of - `"https://"` and parsedURL's [=url/path=].

          -
        8. -
        9. -

          If hostAndPortURL is failure, then [=exception/throw=] a - "{{SyntaxError}}" {{DOMException}}.

          -

          For "stun" and "stuns" schemes, this validates - [[!RFC7064]] section 3.1.
          - For "turn" and "turns" schemes, this and the steps below validate - [[!RFC7065]] section 3.1.

          -
        10. -
        11. -

          If parsedURL's [=url/query=] is non-null, run the following - sub-steps:

          -
            -
          1. TODO: validate ?transport=udp|tcp

          2. -
          -
        12. -
        13. -

          - If parsedURL's' [=url/scheme=] is "turn" or - "turns", and either of - server.{{RTCIceServer/username}} or - server.{{RTCIceServer/credential}} do - [=map/exist|not exist=], then [= exception/throw =] an - {{InvalidAccessError}}. -

          -
        14. -
      @@ -3161,6 +3106,55 @@

    +

    To validate an ICE server URL url, run the following steps:

    +
      +
    1. +

      Let parsedURL be the result of + parsing + url.

      +
    2. +
    3. +

      If any of the following conditions apply, then [=exception/throw=] a + "{{SyntaxError}}" {{DOMException}}:

      +
        +
      • parsedURL is failure
      • +
      • parsedURL's [=url/scheme=] is neither `"stun"`, + `"stuns"`, `"turn"`, nor `"turns"`
      • +
      • parsedURL does not have an [=url/opaque path=]
      • +
      • parsedURL's' [=url/fragment=] is non-null
      • +
      • parsedURL's' [=url/scheme=] is `"stun"` or `"stuns"`, + and parsedURL's' [=url/query=] is non-null
      • +
      +
    4. +
    5. +

      If parsedURL's [=url/scheme=] is not implemented by the + user agent, then [=exception/throw=] a {{NotSupportedError}}.

      +
    6. +
    7. +

      Let hostAndPortURL be result of + parsing the concatenation of + `"https://"` and parsedURL's [=url/path=].

      +
    8. +
    9. +

      If hostAndPortURL is failure, then [=exception/throw=] a + "{{SyntaxError}}" {{DOMException}}.

      +

      For "stun" and "stuns" schemes, this validates + [[!RFC7064]] section 3.1.
      + For "turn" and "turns" schemes, this and the steps below validate + [[!RFC7065]] section 3.1.

      +
    10. +
    11. TODO: validate ?transport=udp|tcp (see PR #2996)

    12. +
    13. +

      + If parsedURL's' [=url/scheme=] is "turn" or + "turns", and either of + server.{{RTCIceServer/username}} or + server.{{RTCIceServer/credential}} do + [=map/exist|not exist=], then [= exception/throw =] an + {{InvalidAccessError}}. +

      +
    14. +

    From 3fb9693afd8168b8c90ecb85cec10176a76f08c1 Mon Sep 17 00:00:00 2001 From: Dominique Hazael-Massieux Date: Thu, 3 Oct 2024 10:50:38 +0200 Subject: [PATCH 14/18] Document updated interop report --- webrtc.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webrtc.html b/webrtc.html index ca7a058cc..4fed37124 100644 --- a/webrtc.html +++ b/webrtc.html @@ -49,7 +49,7 @@ "https://github.com/web-platform-tests/wpt/tree/master/webrtc">associated test suite has been used to build an implementation - report of the API at the time of its initial publication as a Recommendation. + report of the API at the time of its initial publication as a Recommendation. That test suite has been updated to integrate most of the amendments, and an updated implementation report focused on the implementation status of these amendments has been used to select features with double implementation as proposed amendments.

    From 5a0abe0a2e71c5244dfd9a4d477f7c124e387048 Mon Sep 17 00:00:00 2001 From: Dominique Hazael-Massieux Date: Thu, 3 Oct 2024 11:24:51 +0200 Subject: [PATCH 15/18] Fix copyright year --- webrtc.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webrtc.html b/webrtc.html index 4fed37124..5b944012a 100644 --- a/webrtc.html +++ b/webrtc.html @@ -30,7 +30,7 @@ 2011 done by the W3C WebRTC Working Group are under the following Copyright:
    - Copyright © 2011-2023 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.

    + Copyright © 2011-2024 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.

    From e7183218588059ff00fe153e6c39b0a9de57117c Mon Sep 17 00:00:00 2001 From: Dominique Hazael-Massieux Date: Thu, 3 Oct 2024 11:43:19 +0200 Subject: [PATCH 16/18] Document revised Rec end date --- webrtc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/webrtc.js b/webrtc.js index 577d3f6d1..6856c1907 100644 --- a/webrtc.js +++ b/webrtc.js @@ -96,6 +96,7 @@ var respecConfig = { } ], + revisedRecEnd: "2024-12-08", xref: ["dom", "hr-time", "webidl", "html", "mediacapture-streams", "fileapi", "webrtc-stats", "websockets", "xhr", "infra", "url"], preProcess: [ highlightTests, From 3bebc580b9147a0544294af5053167341ec5fa42 Mon Sep 17 00:00:00 2001 From: Denis Ah-Kang <1696128+deniak@users.noreply.github.com> Date: Thu, 3 Oct 2024 16:04:48 +0400 Subject: [PATCH 17/18] Update copyright links --- webrtc.html | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/webrtc.html b/webrtc.html index 5b944012a..86849d4ef 100644 --- a/webrtc.html +++ b/webrtc.html @@ -20,17 +20,16 @@ - -

    + Copyright © 2011-2024 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.

    From 9debbddce0456494c14fa5dbac095994d17199a4 Mon Sep 17 00:00:00 2001 From: Denis Ah-Kang <1696128+deniak@users.noreply.github.com> Date: Thu, 3 Oct 2024 16:07:18 +0400 Subject: [PATCH 18/18] fix indentation --- webrtc.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/webrtc.html b/webrtc.html index 86849d4ef..eabfa26f8 100644 --- a/webrtc.html +++ b/webrtc.html @@ -20,7 +20,8 @@ -