From d5cbe698a8f1fd0530054b9241718cc5efbbf8fc Mon Sep 17 00:00:00 2001
From: reffy-bot <>
Date: Wed, 9 Oct 2024 01:35:01 +0000
Subject: [PATCH] Update of TR report from new reffy run
Using reffy commit 17.2.6.
---
tr/algorithms/presentation-api.json | 125 +-
tr/algorithms/webrtc.json | 2630 ++++++++++++-------------
tr/dfns/presentation-api.json | 41 +-
tr/dfns/webrtc.json | 1469 +++++++++-----
tr/headings/webrtc.json | 258 ++-
tr/idl/webrtc.idl | 117 +-
tr/ids/accelerometer.json | 16 +-
tr/ids/gyroscope.json | 23 +-
tr/ids/magnetometer.json | 11 +-
tr/ids/presentation-api.json | 146 +-
tr/ids/webcodecs.json | 20 +-
tr/ids/webrtc.json | 2781 +++++++++++++++------------
tr/index.json | 44 +-
tr/links/accelerometer.json | 19 +-
tr/links/gyroscope.json | 20 +-
tr/links/magnetometer.json | 24 +-
tr/links/presentation-api.json | 11 +-
tr/links/webrtc.json | 399 ++--
tr/refs/presentation-api.json | 4 +
tr/refs/webrtc.json | 22 +-
20 files changed, 4365 insertions(+), 3815 deletions(-)
diff --git a/tr/algorithms/presentation-api.json b/tr/algorithms/presentation-api.json
index e7e44d60b1de..cb841e3d6014 100644
--- a/tr/algorithms/presentation-api.json
+++ b/tr/algorithms/presentation-api.json
@@ -49,7 +49,7 @@
{
"name": "PresentationRequest/start()",
"href": "https://www.w3.org/TR/presentation-api/#dom-presentationrequest-start",
- "html": "When the start
method is called, the\n user agent MUST run the following steps to select a\n presentation display.",
+ "html": "When the start
method is called, the\n user agent MUST run the following steps to select a\n presentation display.",
"rationale": "if",
"steps": [
{
@@ -68,7 +68,7 @@
"html": "Return P, but continue running these steps in\n parallel."
},
{
- "html": "If the user agent is not monitoring\n the list of available presentation displays, run the steps to\n monitor the list of available presentation displays in\n parallel."
+ "html": "If the user agent is not monitoring\n the list of available presentation displays, run the steps to\n monitor the list of available presentation displays in\n parallel."
},
{
"html": "Let presentationUrls be the presentation request\n URLs of presentationRequest."
@@ -78,10 +78,10 @@
},
{
"html": "If either of the following is true:\n Then run the following steps:",
- "rationale": "reject",
+ "rationale": "queue",
"steps": [
{
- "html": "Reject P with a NotFoundError
\n exception."
+ "html": "Queue a Presentation API task to reject\n P with a NotFoundError
exception."
},
{
"html": "Abort all remaining steps."
@@ -92,7 +92,7 @@
]
},
{
- "html": "If the user denies permission to use a display, reject\n P with an NotAllowedError
exception, and abort all\n remaining steps."
+ "html": "If the user denies permission to use a display,\n queue a Presentation API task to reject P with an\n NotAllowedError
exception, and abort all remaining steps."
},
{
"html": "Otherwise, the user grants permission to use a\n display; let D be that display."
@@ -106,8 +106,11 @@
"name": "starting a presentation from a default presentation request",
"href": "https://www.w3.org/TR/presentation-api/#dfn-starting-a-presentation-from-a-default-presentation-request",
"html": "When the user expresses an intent to start presentation of a\n document on a presentation display using the browser chrome (via a\n dedicated button, user gesture, or other signal), that user agent\n MUST run the following steps to start\n a presentation from a default presentation request. If no\n default presentation request is set on the document, these\n steps MUST not be run.",
- "rationale": "let",
+ "rationale": "run",
"steps": [
+ {
+ "html": "Run the following steps in parallel."
+ },
{
"html": "Let presentationUrls be the presentation request\n URLs of presentationRequest."
},
@@ -122,9 +125,12 @@
{
"name": "start a presentation connection",
"href": "https://www.w3.org/TR/presentation-api/#dfn-start-a-presentation-connection",
- "html": "When the user agent is to start a presentation\n connection, it MUST run the following steps:",
- "rationale": "let",
+ "html": "When the user agent is to start a presentation\n connection, it MUST run the following steps:",
+ "rationale": "assert",
"steps": [
+ {
+ "html": "Assert: this is running in parallel."
+ },
{
"html": "Let I be a new valid presentation identifier\n unique among all presentation identifiers for known\n presentation connections in the set of controlled\n presentations. To avoid fingerprinting, implementations SHOULD\n set the presentation identifier to a UUID generated\n by following forms 4.4 or 4.5 of [rfc4122]."
},
@@ -147,10 +153,10 @@
"html": "Add S to the set of controlled presentations."
},
{
- "html": "If P is provided, resolve P with\n S."
+ "html": "If P is provided, queue a Presentation API\n task to resolve P with S."
},
{
- "html": "Queue a task to fire an event named connectionavailable
, that uses the\n PresentationConnectionAvailableEvent
interface, with the\n connection
attribute\n initialized to S, at presentationRequest.\n The event must not bubble and must not be cancelable."
+ "html": "Queue a Presentation API task to fire an event named\n connectionavailable
,\n that uses the PresentationConnectionAvailableEvent
\n interface, with the connection
attribute\n initialized to S, at presentationRequest.\n The event must not bubble and must not be cancelable."
},
{
"html": "Let U be the user agent connected to D."
@@ -169,14 +175,14 @@
{
"name": "PresentationRequest/reconnect()",
"href": "https://www.w3.org/TR/presentation-api/#dom-presentationrequest-reconnect",
- "html": "When the reconnect
\n method is called, the user agent MUST run the following\n steps to reconnect to a presentation:",
+ "html": "When the reconnect
\n method is called, the user agent MUST run the following\n steps to reconnect to a presentation:",
"rationale": "let",
"steps": [
{
"html": "Let P be a new Promise
."
},
{
- "html": "Return P, but continue running these steps in\n parallel."
+ "html": "Return P, but continue running these steps in\n parallel."
},
{
"html": "Search the set of controlled presentations for a\n PresentationConnection
that meets the following criteria:\n
terminated
\n PresentationConnection
."
},
{
- "html": "Resolve P with\n existingConnection."
+ "html": "Queue a Presentation API task to resolve\n P with existingConnection."
},
{
"html": "If the presentation connection state of\n existingConnection is connecting
or\n connected
,\n then abort all remaining steps."
@@ -231,10 +237,10 @@
"html": "Add newConnection to the set of controlled\n presentations."
},
{
- "html": "Resolve P with newConnection."
+ "html": "Queue a Presentation API task to resolve\n P with newConnection."
},
{
- "html": "Queue a task to fire an event named\n connectionavailable
, that uses the\n PresentationConnectionAvailableEvent
interface, with\n the connection
\n attribute initialized to newConnection, at\n presentationRequest. The event must not bubble and\n must not be cancelable."
+ "html": "Queue a Presentation API task to fire an event\n named connectionavailable
, that uses the\n PresentationConnectionAvailableEvent
interface, with\n the connection
\n attribute initialized to newConnection, at\n presentationRequest. The event must not bubble and\n must not be cancelable."
},
{
"html": "Establish a presentation connection with\n newConnection."
@@ -245,7 +251,7 @@
]
},
{
- "html": "Reject P with a NotFoundError
exception."
+ "html": "Queue a Presentation API task to reject\n P with a NotFoundError
exception."
}
]
},
@@ -253,23 +259,20 @@
"name": "PresentationRequest/getAvailability()",
"href": "https://www.w3.org/TR/presentation-api/#dom-presentationrequest-getavailability",
"html": "When the getAvailability
method is called, the\n user agent MUST run the following steps:",
- "rationale": "if",
+ "rationale": "let",
"steps": [
{
- "html": "If there is an unsettled Promise
from a previous call to\n getAvailability
on \n presentationRequest, return that Promise
and abort\n these steps."
+ "html": "Let P be a new Promise
constructed in the\n JavaScript realm of presentationRequest."
},
{
- "html": "Otherwise, let P be a new Promise
constructed in\n the JavaScript realm of presentationRequest."
- },
- {
- "html": "Return P, but continue running these steps in\n parallel."
+ "html": "Return P, but continue running these steps in\n parallel."
},
{
"html": "If the user agent is unable to continuously monitor the list\n of available presentation displays in the background, but can\n later find presentation displays in order to start a connection,\n then:",
- "rationale": "reject",
+ "rationale": "queue",
"steps": [
{
- "html": "Reject P with a NotSupportedError
\n exception."
+ "html": "Queue a Presentation API task to reject\n P with a NotSupportedError
exception."
},
{
"html": "Abort all the remaining steps."
@@ -278,10 +281,10 @@
},
{
"html": "If the presentation display availability for\n presentationRequest is not null
, then:",
- "rationale": "resolve",
+ "rationale": "queue",
"steps": [
{
- "html": "Resolve P with the request's\n presentation display availability."
+ "html": "Queue a Presentation API task to resolve\n P with the request's presentation display\n availability."
},
{
"html": "Abort all the remaining steps."
@@ -289,7 +292,7 @@
]
},
{
- "html": "Set the presentation display availability for\n presentationRequest to a newly created\n PresentationAvailability
object constructed in the\n JavaScript realm of presentationRequest, and let\n A be that object."
+ "html": "Set the presentation display availability for\n presentationRequest to a newly created\n PresentationAvailability
object constructed in the\n JavaScript realm of presentationRequest, and let\n A be that object."
},
{
"html": "Create a tuple (A,\n presentationUrls) and add it to the set of\n presentation availability objects."
@@ -298,16 +301,19 @@
"html": "Run the algorithm to monitor the list of available\n presentation displays."
},
{
- "html": "Resolve P with A."
+ "html": "Queue a Presentation API task to resolve\n P with A."
}
]
},
{
"name": "monitor the list of available presentation displays",
"href": "https://www.w3.org/TR/presentation-api/#dfn-monitor-the-list-of-available-presentation-displays",
- "html": "If the set of presentation availability objects is\n non-empty, or there is a pending request to select a presentation\n display, the user agent MUST monitor the list of\n available presentation displays by running the following\n steps:",
- "rationale": "let",
+ "html": "If the set of presentation availability objects is\n non-empty, or there is a pending request to select a presentation\n display, the user agent MUST monitor the list of\n available presentation displays by running the following\n steps:",
+ "rationale": "assert",
"steps": [
+ {
+ "html": "Assert: this is running in parallel."
+ },
{
"html": "Let availabilitySet be a shallow copy of the set\n of presentation availability objects."
},
@@ -327,7 +333,7 @@
"html": "Let newDisplays be an empty list."
},
{
- "html": "If the user agent is unable to retrieve presentation\n displays (e.g., because the user has disabled this capability),\n then skip the following step."
+ "html": "If the user agent is unable to retrieve presentation\n displays (e.g., because the user has disabled this capability),\n then skip the following step."
},
{
"html": "Retrieve presentation displays (using an implementation\n specific mechanism) and set newDisplays to this list."
@@ -367,7 +373,7 @@
"html": "If A's value
property has not yet been\n initialized, then set A's value
property to\n newAvailability and skip the following step."
},
{
- "html": "If previousAvailability is not equal to\n newAvailability, then queue a task to run the\n following steps:",
+ "html": "If previousAvailability is not equal to\n newAvailability, then queue a Presentation API\n task to run the following steps:",
"rationale": "set",
"steps": [
{
@@ -383,7 +389,7 @@
]
},
{
- "html": "When a presentation display availability object is eligible\n for garbage collection, the user agent SHOULD run the\n following steps:",
+ "html": "When a presentation display availability object is eligible\n for garbage collection, the user agent SHOULD run the\n following steps:",
"rationale": "let",
"steps": [
{
@@ -400,9 +406,12 @@
{
"name": "establish a presentation connection",
"href": "https://www.w3.org/TR/presentation-api/#dfn-establish-a-presentation-connection",
- "html": "When the user agent is to establish a presentation\n connection using a presentation connection, it MUST\n run the following steps:",
- "rationale": "if",
+ "html": "When the user agent is to establish a presentation\n connection using a presentation connection, it MUST\n run the following steps:",
+ "rationale": "assert",
"steps": [
+ {
+ "html": "Assert: this is running in parallel."
+ },
{
"html": "If the presentation connection state of\n presentationConnection is not connecting
, then abort all\n remaining steps."
},
@@ -410,7 +419,7 @@
"html": "Request connection of presentationConnection to the\n receiving browsing context. The presentation\n identifier of presentationConnection MUST be sent\n with this request."
},
{
- "html": "If connection completes successfully, queue a task to\n run the following steps:",
+ "html": "If connection completes successfully, queue a Presentation\n API task to run the following steps:",
"rationale": "set",
"steps": [
{
@@ -429,7 +438,7 @@
{
"name": "send-algorithm",
"href": "https://www.w3.org/TR/presentation-api/#dfn-send-algorithm",
- "html": "When the user agent is to send\n a message through a presentation connection, it MUST\n run the following steps:",
+ "html": "When the user agent is to send\n a message through a presentation connection, it MUST\n run the following steps:",
"rationale": "if",
"steps": [
{
@@ -452,9 +461,12 @@
{
"name": "receive-algorithm",
"href": "https://www.w3.org/TR/presentation-api/#dfn-receive-algorithm",
- "html": "When the user agent has received a transmission from the\n remote side consisting of presentation message data and\n presentation message type, it MUST run the following steps\n to receive a message through\n a PresentationConnection
:",
- "rationale": "if",
+ "html": "When the user agent has received a transmission from the\n remote side consisting of presentation message data and\n presentation message type, it MUST run the following steps\n to receive a message through\n a PresentationConnection
:",
+ "rationale": "assert",
"steps": [
+ {
+ "html": "Assert: this is running in parallel."
+ },
{
"html": "If the state
property of\n presentationConnection is not connected
, abort these steps."
},
@@ -477,14 +489,14 @@
]
},
{
- "html": "Queue a task to fire event at\n presentationConnection."
+ "html": "Queue a Presentation API task to fire\n event at presentationConnection."
}
]
},
{
"name": "start closing the presentation connection",
"href": "https://www.w3.org/TR/presentation-api/#dfn-start-closing-the-presentation-connection",
- "html": "When the user agent is to start\n closing a presentation connection, it MUST do the following:",
+ "html": "When the user agent is to start\n closing a presentation connection, it MUST do the following:",
"rationale": "if",
"steps": [
{
@@ -504,14 +516,14 @@
{
"name": "close the presentation connection",
"href": "https://www.w3.org/TR/presentation-api/#dfn-close-the-presentation-connection",
- "html": "When the user agent is to close a presentation\n connection, it MUST do the following:",
+ "html": "When the user agent is to close a presentation\n connection, it MUST do the following:",
"rationale": "if",
"steps": [
{
"html": "If there is a pending close the presentation connection\n task for presentationConnection, or a close the\n presentation connection task has already run for\n presentationConnection, then abort the remaining steps."
},
{
- "html": "Queue a task to run the following steps:",
+ "html": "Queue a Presentation API task to run the following steps:",
"rationale": "if",
"steps": [
{
@@ -553,7 +565,7 @@
"rationale": "if",
"steps": [
{
- "html": "If the presentation identifier of known\n connection and connection are equal, and the\n presentation connection state of known\n connection is connected
or\n connecting
,\n then queue a task to run the following steps:",
+ "html": "If the presentation identifier of known\n connection and connection are equal, and the\n presentation connection state of known\n connection is connected
or\n connecting
,\n then queue a global task on the presentation task\n source given known connection's relevant\n global object to run the following steps:",
"rationale": "set",
"steps": [
{
@@ -567,7 +579,7 @@
]
},
{
- "html": "Send a termination request for the presentation to its\n receiving user agent using an implementation specific\n mechanism."
+ "html": "In parallel, send a termination request for the\n presentation to its receiving user agent using an\n implementation specific mechanism."
}
]
},
@@ -596,7 +608,7 @@
"html": "If there is a receiving browsing context for\n P, and it has a document for P that is not\n unloaded, unload a document corresponding to that\n browsing context, remove that browsing context from\n the user interface and discard it."
},
{
- "html": "For each connection in\n connectedControllers, queue a task to send a\n termination confirmation for P using an implementation\n specific mechanism to the controlling user agent that owns\n the destination browsing context for connection."
+ "html": "For each connection in\n connectedControllers, send a termination confirmation\n for P using an implementation specific mechanism to the\n controlling user agent that owns the destination browsing\n context for connection."
}
]
},
@@ -605,7 +617,7 @@
"rationale": "for",
"steps": [
{
- "html": "For each connection in the set of controlled\n presentations that was connected to P, queue a\n task to run the following steps:",
+ "html": "For each connection in the set of controlled\n presentations that was connected to P, queue a\n global task on the presentation task source given \n connection's relevant global object to run the\n following steps:",
"rationale": "if",
"steps": [
{
@@ -631,7 +643,7 @@
"html": "If the presentation controllers promise is not\n null
, return the presentation controllers promise\n and abort all remaining steps."
},
{
- "html": "Otherwise, let the presentation controllers promise be a\n new Promise
constructed in the JavaScript realm of this\n PresentationReceiver
object."
+ "html": "Otherwise, let the presentation controllers promise be a\n new Promise
constructed in the JavaScript realm of this\n PresentationReceiver
object."
},
{
"html": "Return the presentation controllers promise."
@@ -644,7 +656,7 @@
{
"name": "create a receiving browsing context",
"href": "https://www.w3.org/TR/presentation-api/#dfn-create-a-receiving-browsing-context",
- "html": "When the user agent is to create a receiving browsing\n context, it MUST run the following steps:",
+ "html": "When the user agent is to create a receiving browsing\n context, it MUST run the following steps:",
"rationale": "create",
"steps": [
{
@@ -686,8 +698,11 @@
"name": "monitoring incoming presentation connections",
"href": "https://www.w3.org/TR/presentation-api/#dfn-monitoring-incoming-presentation-connections",
"html": "When the receiving user agent is to start monitoring\n incoming presentation connections in a receiving browsing\n context from controlling browsing contexts, it MUST\n listen to and accept incoming connection requests from a\n controlling browsing context using an implementation\n specific mechanism. When a new connection request is received from\n a controlling browsing context, the receiving user\n agent MUST run the following steps:",
- "rationale": "if",
+ "rationale": "assert",
"steps": [
+ {
+ "html": "Assert: this is running in parallel."
+ },
{
"html": "If presentationId and I are not equal,\n refuse the connection and abort all remaining steps."
},
@@ -710,17 +725,17 @@
"html": "Add S to the set of presentation controllers."
},
{
- "html": "If the presentation controllers monitor is\n null
, run the following steps in parallel.",
+ "html": "If the presentation controllers monitor is\n null
, run the following steps in parallel.",
"rationale": "let",
"steps": [
{
- "html": "Let the presentation controllers monitor be a new\n PresentationConnectionList
constructed in the\n JavaScript realm of the PresentationReceiver
\n object of the receiving browsing context."
+ "html": "Let the presentation controllers monitor be a new\n PresentationConnectionList
constructed in the\n JavaScript realm of the PresentationReceiver
\n object of the receiving browsing context."
},
{
"html": "Populate the presentation controllers monitor with\n the set of presentation controllers."
},
{
- "html": "If the presentation controllers promise is not\n null
, resolve the presentation\n controllers promise with the presentation controllers\n monitor."
+ "html": "If the presentation controllers promise is not\n null
, queue a Presentation API task to \n resolve the presentation controllers promise with\n the presentation controllers monitor."
},
{
"html": "Abort all remaining steps."
@@ -728,14 +743,14 @@
]
},
{
- "html": "Otherwise, run the following steps in parallel.",
+ "html": "Otherwise, run the following steps in parallel.",
"rationale": "populate",
"steps": [
{
"html": "Populate the presentation controllers monitor with\n the set of presentation controllers."
},
{
- "html": "Queue a task to fire an event named\n connectionavailable
, that\n uses the PresentationConnectionAvailableEvent
\n interface, with the connection
\n attribute initialized to S, at the presentation\n controllers monitor. The event must not bubble and must\n not be cancelable."
+ "html": "Queue a Presentation API task to fire an event\n named connectionavailable
, that\n uses the PresentationConnectionAvailableEvent
\n interface, with the connection
\n attribute initialized to S, at the presentation\n controllers monitor. The event must not bubble and must\n not be cancelable."
}
]
}
diff --git a/tr/algorithms/webrtc.json b/tr/algorithms/webrtc.json
index d17fe3b12593..73ff9ac5b4c1 100644
--- a/tr/algorithms/webrtc.json
+++ b/tr/algorithms/webrtc.json
@@ -5,14 +5,14 @@
},
"algorithms": [
{
- "html": "As one of the unloading document cleanup steps, run the\n following steps:",
+ "html": "As one of the unloading document cleanup steps, run the\n following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let window be document's relevant global object.\n
" + "html": "\n Let window be document's relevant global object.\n
" }, { - "html": "\n For each RTCPeerConnection
object connection\n whose relevant global object is window, close the connection with connection and the value true
.\n
\n For each RTCPeerConnection
object connection\n whose relevant global object is window, close the connection with connection and the value true
.\n
\n If any of the steps enumerated below fails for a reason not\n specified here, throw an UnknownError
\n with the message
attribute set to an\n appropriate description.\n
\n If any of the steps enumerated below fails for a reason not\n specified here, throw an UnknownError
\n with the message
attribute set to an\n appropriate description.\n
\n Let connection be a newly created\n RTCPeerConnection
object.\n
\n Let connection be a newly created\n RTCPeerConnection
object.\n
\n Let connection have a\n [[DocumentOrigin]] internal slot, initialized to\n the relevant settings object's\n origin.\n
" + "html": "\n Let connection have a\n [[DocumentOrigin]] internal slot, initialized to\n the relevant settings object's\n origin.\n
" }, { "html": "Let configuration be the\n method's first argument." }, { - "html": "If thecertificates
value in\n configuration is non-empty, run the following\n steps for each certificate in certificates:",
+ "html": "If the certificates
value in\n configuration is non-empty, run the following\n steps for each certificate in certificates:",
"rationale": "if",
"steps": [
{
- "html": "\n If the value of\n certificate.expires
is less\n than the current time, throw an\n InvalidAccessError
.\n
\n If the value of\n certificate.expires
is less\n than the current time, throw an\n InvalidAccessError
.\n
\n If certificate.[[Origin]]
is not\n same origin with\n connection.[[DocumentOrigin]]
, throw an InvalidAccessError
.\n
\n If certificate.[[Origin]]
is not\n same origin with\n connection.[[DocumentOrigin]]
, throw an InvalidAccessError
.\n
\n Store certificate.\n
" @@ -50,16 +50,13 @@ ] }, { - "html": "\n Else, generate one or more new RTCCertificate
instances\n with this RTCPeerConnection
instance and store them. This\n MAY happen asynchronously and the value of\n certificates
remains\n undefined
for the subsequent steps. As noted in\n Section 4.3.2.3 of [RFC8826], WebRTC utilizes\n self-signed rather than Public Key Infrastructure (PKI)\n certificates, so that the expiration check is to ensure that\n keys are not used indefinitely and additional certificate\n checks are unnecessary.\n
\n Else, generate one or more new RTCCertificate
instances\n with this RTCPeerConnection
instance and store them. This\n MAY happen asynchronously and the value of\n certificates
remains\n undefined
for the subsequent steps. As noted in\n Section 4.3.2.3 of [RFC8826], WebRTC utilizes\n self-signed rather than Public Key Infrastructure (PKI)\n certificates, so that the expiration check is to ensure that\n keys are not used indefinitely and additional certificate\n checks are unnecessary.\n
\n If\n configuration.iceServer
is an array\n truncate it to the maximum number of supported elements.\n
\n Initialize connection's ICE Agent.\n
" }, { - "html": "\n Initialize connection's ICE Agent.\n
" - }, - { - "html": "\n Let connection have a\n [[Configuration]]\n internal slot, initialized to null
.\n Set the configuration specified by configuration.\n
\n Let connection have a\n [[Configuration]]\n internal slot, initialized to null
.\n Set the configuration specified by configuration.\n
\n Let connection have an [[IsClosed]]\n internal slot, initialized to false
.\n
\n Let connection have an\n [[SctpTransport]] internal slot, initialized to\n null
.\n
\n Let connection have an [[Operations]]\n internal slot, representing an operations chain,\n initialized to an empty list.\n
" + "html": "\n Let connection have a\n [[DataChannels]] internal slot, initialized to\n an empty ordered set.\n
" + }, + { + "html": "\n Let connection have an [[Operations]]\n internal slot, representing an operations chain,\n initialized to an empty list.\n
" }, { "html": "\n Let connection have a\n [[UpdateNegotiationNeededFlagOnEmptyChain]]\n internal slot, initialized to false
.\n
\n Let connection have an\n [[EarlyCandidates]] internal slot, initialized to\n an empty list.\n
" }, { - "html": "\n Set connection's signaling state to\n \"stable
\".\n
\n Let connection have an\n [[SignalingState]]\n internal slot, initialized to \"stable
\".\n
\n Set connection's ICE connection state to\n \"new
\".\n
\n Let connection have an\n [[IceConnectionState]]\n internal slot, initialized to \"new
\".\n
\n Set connection's ICE gathering state to\n \"new
\".\n
\n Let connection have an\n [[IceGatheringState]]\n internal slot, initialized to \"new
\".\n
\n Set connection's connection state to\n \"new
\".\n
\n Let connection have an\n [[ConnectionState]]\n internal slot, initialized to \"new
\".\n
\n Let connection have a\n [[PendingLocalDescription]] internal slot,\n initialized to null
.\n
RTCPeerConnection
object's operations chain, run the\n following steps:",
+ "html": "To chain an operation to an\n RTCPeerConnection
object's operations chain, run the\n following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let connection be the RTCPeerConnection
\n object.\n
\n Let connection be the RTCPeerConnection
\n object.\n
\n If connection.[[IsClosed]]
is\n true
, return a promise rejected with a\n newly created InvalidStateError
.\n
\n If connection.[[IsClosed]]
is\n true
, return a promise rejected with a\n newly created InvalidStateError
.\n
\n Let operation be the operation to be chained.\n
" @@ -136,42 +136,42 @@ "html": "\n Let p be a new promise.\n
" }, { - "html": "\n Append operation to [[Operations]]
.\n
\n Append operation to [[Operations]]
.\n
\n If the length of [[Operations]]
is exactly 1, execute\n operation.\n
\n If the length of [[Operations]]
is exactly 1, execute\n operation.\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n If the promise returned by operation was fulfilled with a value, fulfill p\n with that value.\n
" + "html": "\n If the promise returned by operation was fulfilled with a value, fulfill p\n with that value.\n
" }, { - "html": "\n If the promise returned by operation was rejected with a value, reject p with\n that value.\n
" + "html": "\n If the promise returned by operation was rejected with a value, reject p with\n that value.\n
" }, { - "html": "Upon fulfillment or rejection of\n p, execute the following steps:", + "html": "Upon fulfillment or rejection of\n p, execute the following steps:", "rationale": "if", "steps": [ { - "html": "\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n Remove the first element of [[Operations]]
.\n
\n Remove the first element of [[Operations]]
.\n
\n If [[Operations]]
is non-empty, execute the\n operation represented by the first element of\n [[Operations]]
, and abort these steps.\n
\n If [[Operations]]
is non-empty, execute the\n operation represented by the first element of\n [[Operations]]
, and abort these steps.\n
\n If\n connection.[[UpdateNegotiationNeededFlagOnEmptyChain]]
\n is false
, abort these steps.\n
\n If\n connection.[[UpdateNegotiationNeededFlagOnEmptyChain]]
\n is false
, abort these steps.\n
\n Set\n connection.[[UpdateNegotiationNeededFlagOnEmptyChain]]
\n to false
.\n
\n Set\n connection.[[UpdateNegotiationNeededFlagOnEmptyChain]]
\n to false
.\n
\n Update the negotiation-needed flag for\n connection.\n
" @@ -186,116 +186,90 @@ ] }, { - "html": "AnRTCPeerConnection
object has an aggregated connection state. Whenever the state of an RTCDtlsTransport
changes\n or when the [[IsClosed]]
slot turns true
,\n the user agent MUST update the connection state by queueing a\n task that runs the following steps:",
- "rationale": ".algorithm",
- "steps": [
- {
- "html": "\n Let connection be this RTCPeerConnection
\n object.\n
\n Let newState be the value of deriving a new state\n value as described by the RTCPeerConnectionState
enum.\n
\n If connection's connection state is equal to\n newState, abort these steps.\n
" - }, - { - "html": "\n Let connection's connection state be\n newState.\n
" - }, - { - "html": "\n Fire an event named connectionstatechange
at\n connection.\n
RTCPeerConnection
instance\n connection, the user agent MUST queue a task that runs\n the following steps:",
+ "html": "An RTCPeerConnection
object has an aggregated\n [[ConnectionState]]
.\n Whenever the state of an RTCDtlsTransport
changes,\n the user agent MUST queue a task that runs the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n Let connection be this RTCPeerConnection
\n object associated with the RTCDtlsTransport
object whose state changed.\n
\n Let newState be the value of deriving a new state\n value as described by the RTCIceGatheringState
enum.\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n If connection's ICE gathering state is equal\n to newState, abort these steps.\n
" + "html": "\n Let newState be the value of deriving a new state\n value as described by the RTCPeerConnectionState
enum.\n
\n Set connection's ICE gathering state to\n newState.\n
" + "html": "\n If connection.[[ConnectionState]]
is equal to\n newState, abort these steps.\n
\n Fire an event named icegatheringstatechange
at\n connection.\n
\n Set connection.[[ConnectionState]]
to\n newState.\n
\n If newState is\n \"complete
\", fire an event\n named icecandidate
using the\n RTCPeerConnectionIceEvent
interface with the candidate\n attribute set to null
at connection.\n
\n Fire an event named connectionstatechange
at\n connection.\n
RTCPeerConnection
object connection, given a\n remote boolean, run the following steps:",
+ "html": "To set\n a session description description on an\n RTCPeerConnection
object connection, given a\n remote boolean, run the following steps:",
"rationale": ".algorithm",
"steps": [
{
"html": "\n Let p be a new promise.\n
" }, { - "html": "\n If description.type
is\n \"rollback
\" and connection's signaling state is either \"stable
\",\n \"have-local-pranswer
\", or\n \"have-remote-pranswer
\", then reject p with a newly created\n InvalidStateError
and abort these steps.\n
\n If description.type
is\n \"rollback
\" and\n connection.[[SignalingState]]
\n is either \"stable
\",\n \"have-local-pranswer
\", or\n \"have-remote-pranswer
\", then reject p with a newly created\n InvalidStateError
and abort these steps.\n
\n Let jsepSetOfTransceivers be a shallow copy of\n connection's set of transceivers.\n
" + "html": "\n Let jsepSetOfTransceivers be a shallow copy of\n connection's set of transceivers.\n
" }, { - "html": "In parallel, start the process to apply\n description as described in [RFC8829] (section 5.5. and section 5.6.),\n with these additional restrictions:", + "html": "In parallel, start the process to apply\n description as described in [RFC9429] (section 5.5. and section 5.6.),\n with these additional restrictions:", "rationale": "use", "steps": [ { - "html": "\n Use jsepSetOfTransceivers as the source of\n truth with regard to what \"RtpTransceivers\" exist, and\n their [[JsepMid]]
internal slot as their \"mid\n property\".\n
\n Use jsepSetOfTransceivers as the source of\n truth with regard to what \"RtpTransceivers\" exist, and\n their [[JsepMid]]
internal slot as their \"mid\n property\".\n
If remote is false
and this\n triggers the ICE candidate gathering process in [RFC8829] (section 5.9.), the ICE Agent\n MUST NOT gather candidates that would be\n administratively prohibited.\n
If remote is false
and this\n triggers the ICE candidate gathering process in [RFC9429] (section 5.9.), the ICE Agent\n MUST NOT gather candidates that would be\n administratively prohibited.\n
If remote is true
and this\n triggers ICE connectivity checks in [RFC8829] (section 5.10.), the\n ICE Agent MUST NOT attempt to connect to candidates\n that are administratively prohibited.\n
If remote is true
and this\n triggers ICE connectivity checks in [RFC9429] (section 5.10.), the\n ICE Agent MUST NOT attempt to connect to candidates\n that are administratively prohibited.\n
\n If remote is true
, validate\n back-to-back offers as if answers were applied in\n between, by running the check for subsequent offers as if\n it were in stable state.\n
\n If applying description leads to modifying a\n transceiver transceiver, and\n transceiver.[[Sender]].[[SendEncodings]]\n is non-empty, and not equal to the encodings that would\n result from processing description, the\n process of applying description fails. This\n specification does not allow remotely initiated RID\n renegotiation.\n
\n\n If applying description leads to modifying a\n transceiver transceiver, and\n transceiver.[[Sender]].[[SendEncodings]]\n is non-empty, and not equal to the encodings that would\n result from processing description, the\n process of applying description fails. This\n specification does not allow remotely initiated RID\n renegotiation.\n
\n If connection.[[IsClosed]]
is\n true
, then abort these steps.\n
\n If connection.[[IsClosed]]
is\n true
, then abort these steps.\n
\n If\n description.type
\n is invalid for the current signaling state of\n connection as described in\n \n [RFC8829] (section 5.5. and section 5.6.), then reject p with\n a newly created InvalidStateError
\n and abort these steps.\n
\n If\n description.type
\n is invalid for the current\n connection.[[SignalingState]]
\n as described in\n \n [RFC9429] (section 5.5. and section 5.6.), then reject p with\n a newly created InvalidStateError
\n and abort these steps.\n
\n If the content of description is not valid\n SDP syntax, then reject p with an\n RTCError
(with errorDetail
set to\n \"sdp-syntax-error
\" and the\n sdpLineNumber
attribute set to the line\n number in the SDP where the syntax error was\n detected) and abort these steps.\n
\n If the content of description is not valid\n SDP syntax, then reject p with an\n RTCError
(with errorDetail
set to\n \"sdp-syntax-error
\" and the\n sdpLineNumber
attribute set to the line\n number in the SDP where the syntax error was\n detected) and abort these steps.\n
\n If remote is true
, the\n connection's RTCRtcpMuxPolicy
is\n require
and the description does\n not use RTCP mux, then reject p with\n a newly created\n InvalidAccessError
and abort these steps.\n
\n If remote is true
, the\n connection's RTCRtcpMuxPolicy
is\n require
and the description does\n not use RTCP mux, then reject p with\n a newly created\n InvalidAccessError
and abort these steps.\n
\n If the description attempted to renegotiate RIDs, as\n described above, then reject p with\n a newly created\n InvalidAccessError
and abort these steps.\n
\n If the description attempted to renegotiate RIDs, as\n described above, then reject p with\n a newly created\n InvalidAccessError
and abort these steps.\n
\n If the content of description is invalid,\n then reject p with a newly created InvalidAccessError
and abort\n these steps.\n
\n If the content of description is invalid,\n then reject p with a newly created InvalidAccessError
and abort\n these steps.\n
\n For all other errors, reject p with\n a newly created OperationError
.\n
\n For all other errors, reject p with\n a newly created OperationError
.\n
\n If connection.[[IsClosed]]
is\n true
, then abort these steps.\n
\n If connection.[[IsClosed]]
is\n true
, then abort these steps.\n
\n If remote is true
and\n description is of type\n \"offer
\", then if any\n addTrack
()
methods on\n connection succeeded\n during the process to apply description,\n abort these steps and start the process over as if\n they had succeeded prior, to include the extra\n transceiver(s) in the process.\n
\n If remote is true
and\n description is of type\n \"offer
\", then if any\n addTrack
()
methods on\n connection succeeded\n during the process to apply description,\n abort these steps and start the process over as if\n they had succeeded prior, to include the extra\n transceiver(s) in the process.\n
\n If any promises from setParameters
\n methods on RTCRtpSender
s associated with\n connection are not settled, abort these\n steps and start the process over.\n
\n If any promises from setParameters
\n methods on RTCRtpSender
s associated with\n connection are not settled, abort these\n steps and start the process over.\n
offer
\" and\n connection.[[SignalingState]]
\n is \"stable
\" then for each\n transceiver in connection's set of transceivers, run the following steps:",
"rationale": "set",
"steps": [
{
- "html": "\n Set\n transceiver.[[Sender]].[[LastStableStateSenderTransport]]\n to\n transceiver.[[Sender]].[[SenderTransport]].\n
" + "html": "\n Set\n transceiver.[[Sender]]
.[[LastStableStateSenderTransport]]
\n to\n transceiver.[[Sender]]
.[[SenderTransport]]
.\n
\n Set\n transceiver.[[Receiver]].[[LastStableStateReceiverTransport]]\n to\n transceiver.[[Receiver]].[[ReceiverTransport]].\n
" + "html": "\n If\n transceiver.[[Sender]]
.[[SendEncodings]]
.length\n is 1
and the lone encoding contains no rid
member,\n then set\n transceiver.[[Sender]]
.[[LastStableRidlessSendEncodings]]
\n to\n transceiver.[[Sender]]
.[[SendEncodings]]
;\n Otherwise, set\n transceiver.[[Sender]]
.[[LastStableRidlessSendEncodings]]
\n to null
.\n
\n Set\n transceiver.[[Receiver]].[[LastStableStateAssociatedRemoteMediaStreams]]\n to\n transceiver.[[Receiver]].[[AssociatedRemoteMediaStreams]].\n
" + "html": "\n Set\n transceiver.[[Receiver]]
.[[LastStableStateReceiverTransport]]
\n to\n transceiver.[[Receiver]]
.[[ReceiverTransport]]
.\n
\n Set\n transceiver.[[Receiver]].[[LastStableStateReceiveCodecs]]\n to\n transceiver.[[Receiver]].[[ReceiveCodecs]].\n
" - } - ], - "html": "\n If description is of type\n \"offer
\" and the signaling state\n of connection is\n \"stable
\" then for each\n transceiver in connection's set of transceivers, run the following steps:\n
\n Set\n transceiver.[[Receiver]]
.[[LastStableStateAssociatedRemoteMediaStreams]]
\n to\n transceiver.[[Receiver]]
.[[AssociatedRemoteMediaStreams]]
.\n
\n Set\n transceiver.[[Sender]]
.[[LastStableStateSenderTransport]]
\n to\n transceiver.[[Sender]]
.[[SenderTransport]]
.\n
\n If\n transceiver.[[Sender]]
.[[SendEncodings]]
.length\n is 1
and the lone encoding contains no rid
member,\n then set\n transceiver.[[Sender]]
.[[LastStableRidlessSendEncodings]]
\n to\n transceiver.[[Sender]]
.[[SendEncodings]]
;\n Otherwise, set\n transceiver.[[Sender]]
.[[LastStableRidlessSendEncodings]]
\n to null
.\n
\n Set\n transceiver.[[Receiver]]
.[[LastStableStateReceiverTransport]]
\n to\n transceiver.[[Receiver]]
.[[ReceiverTransport]]
.\n
\n Set\n transceiver.[[Receiver]]
.[[LastStableStateAssociatedRemoteMediaStreams]]
\n to\n transceiver.[[Receiver]]
.[[AssociatedRemoteMediaStreams]]
.\n
\n Set\n transceiver.[[Receiver]]
.[[LastStableStateReceiveCodecs]]
\n to\n transceiver.[[Receiver]]
.[[ReceiveCodecs]]
.\n
\n Set\n transceiver.[[Receiver]]
.[[LastStableStateReceiveCodecs]]
\n to\n transceiver.[[Receiver]]
.[[ReceiveCodecs]]
.\n
\n If description is of type\n \"offer
\", set\n connection.[[PendingLocalDescription]]
\n to a new RTCSessionDescription
object\n constructed from description, set\n connection's signaling state to\n \"have-local-offer
\", and release early candidates.\n
\n If description is of type\n \"offer
\", set\n connection.[[PendingLocalDescription]]
\n to a new RTCSessionDescription
object\n constructed from description, set\n connection.[[SignalingState]]
to\n \"have-local-offer
\", and release early candidates.\n
\n If description is of type\n \"answer
\", then this completes an\n offer answer negotiation. Set\n connection.[[CurrentLocalDescription]]
\n to a new RTCSessionDescription
object\n constructed from description, and set\n connection.[[CurrentRemoteDescription]]
\n to\n connection.[[PendingRemoteDescription]]
.\n Set both\n connection.[[PendingRemoteDescription]]
\n and\n connection.[[PendingLocalDescription]]
\n to null
. Set both\n connection.[[LastCreatedOffer]]
\n and\n connection.[[LastCreatedAnswer]]
\n to \"\"
, set connection's\n signaling state to\n \"stable
\", and release early candidates. Finally, if none of the ICE\n credentials in\n connection.[[LocalIceCredentialsToReplace]]
\n are present in description, then set\n connection.[[LocalIceCredentialsToReplace]]
\n to an empty set.\n
\n If description is of type\n \"answer
\", then this completes an\n offer answer negotiation. Set\n connection.[[CurrentLocalDescription]]
\n to a new RTCSessionDescription
object\n constructed from description, and set\n connection.[[CurrentRemoteDescription]]
\n to\n connection.[[PendingRemoteDescription]]
.\n Set both\n connection.[[PendingRemoteDescription]]
\n and\n connection.[[PendingLocalDescription]]
\n to null
. Set both\n connection.[[LastCreatedOffer]]
\n and\n connection.[[LastCreatedAnswer]]
\n to \"\"
, set\n connection.[[SignalingState]]
to\n \"stable
\", and release early candidates. Finally, if none of the ICE\n credentials in\n connection.[[LocalIceCredentialsToReplace]]
\n are present in description, then set\n connection.[[LocalIceCredentialsToReplace]]
\n to an empty set.\n
\n If description is of type\n \"pranswer
\", then set\n connection.[[PendingLocalDescription]]
\n to a new RTCSessionDescription
object\n constructed from description, set\n connection's signaling state to\n \"have-local-pranswer
\", and\n release early candidates.\n
\n If description is of type\n \"pranswer
\", then set\n connection.[[PendingLocalDescription]]
\n to a new RTCSessionDescription
object\n constructed from description, set\n connection.[[SignalingState]]
to\n \"have-local-pranswer
\", and\n release early candidates.\n
\n If description is of type\n \"offer
\", set\n connection.[[PendingRemoteDescription]]
\n attribute to a new RTCSessionDescription
\n object constructed from description,\n and set connection's signaling state to\n \"have-remote-offer
\".\n
\n If description is of type\n \"offer
\", set\n connection.[[PendingRemoteDescription]]
\n attribute to a new RTCSessionDescription
\n object constructed from description,\n and set\n connection.[[SignalingState]]
\n to\n \"have-remote-offer
\".\n
\n If description is of type\n \"answer
\", then this completes an\n offer answer negotiation. Set\n connection.[[CurrentRemoteDescription]]
\n to a new RTCSessionDescription
object\n constructed from description, and set\n connection.[[CurrentLocalDescription]]
\n to\n connection.[[PendingLocalDescription]]
.\n Set both\n connection.[[PendingRemoteDescription]]
\n and\n connection.[[PendingLocalDescription]]
\n to null
. Set both\n connection.[[LastCreatedOffer]]
\n and\n connection.[[LastCreatedAnswer]]
\n to \"\"
, and set\n connection's signaling state to\n \"stable
\". Finally, if none\n of the ICE credentials in\n connection.[[LocalIceCredentialsToReplace]]
\n are present in the newly set\n connection.[[CurrentLocalDescription]]
,\n then set\n connection.[[LocalIceCredentialsToReplace]]
\n to an empty set.\n
\n If description is of type\n \"answer
\", then this completes an\n offer answer negotiation. Set\n connection.[[CurrentRemoteDescription]]
\n to a new RTCSessionDescription
object\n constructed from description, and set\n connection.[[CurrentLocalDescription]]
\n to\n connection.[[PendingLocalDescription]]
.\n Set both\n connection.[[PendingRemoteDescription]]
\n and\n connection.[[PendingLocalDescription]]
\n to null
. Set both\n connection.[[LastCreatedOffer]]
\n and\n connection.[[LastCreatedAnswer]]
\n to \"\"
, and set\n connection.[[SignalingState]]
to\n \"stable
\". Finally, if none\n of the ICE credentials in\n connection.[[LocalIceCredentialsToReplace]]
\n are present in the newly set\n connection.[[CurrentLocalDescription]]
,\n then set\n connection.[[LocalIceCredentialsToReplace]]
\n to an empty set.\n
\n If description is of type\n \"pranswer
\", then set\n connection.[[PendingRemoteDescription]]
\n to a new RTCSessionDescription
object\n constructed from description and set\n connection's signaling state to\n \"have-remote-pranswer
\".\n
\n If description is of type\n \"pranswer
\", then set\n connection.[[PendingRemoteDescription]]
\n to a new RTCSessionDescription
object\n constructed from description and set\n connection.[[SignalingState]]
to\n \"have-remote-pranswer
\".\n
\n If description is of type\n \"answer
\", and it initiates the closure\n of an existing SCTP association, as defined in\n [RFC8841], Sections 10.3 and 10.4, set the value\n of connection.[[SctpTransport]]
to\n null
.\n
\n If description is of type\n \"answer
\", and it initiates the closure\n of an existing SCTP association, as defined in\n [RFC8841], Sections 10.3 and 10.4, set the value\n of connection.[[SctpTransport]]
to\n null
.\n
\n Let trackEventInits,\n muteTracks, addList,\n removeList and errorList be\n empty lists.\n
" }, { - "html": "If description is of type\n \"answer
\" or \"pranswer
\",\n then run the following steps:",
+ "html": "If description is of type\n \"answer
\" or \"pranswer
\",\n then run the following steps:",
"rationale": "if",
"steps": [
{
- "html": "\n If description initiates the\n establishment of a new SCTP association, as\n defined in [RFC8841], Sections 10.3 and 10.4,\n create an RTCSctpTransport with an initial\n state of \"connecting
\"\n and assign the result to the\n [[SctpTransport]]
slot. Otherwise, if an\n SCTP association is established, but the\n max-message-size
SDP\n attribute is updated, update the data max message size of\n connection.[[SctpTransport]]
.\n
\n If description initiates the\n establishment of a new SCTP association, as\n defined in [RFC8841], Sections 10.3 and 10.4,\n create an RTCSctpTransport with an initial\n state of \"connecting
\"\n and assign the result to the\n [[SctpTransport]]
slot. Otherwise, if an\n SCTP association is established, but the\n max-message-size
SDP\n attribute is updated, update the data max message size of\n connection.[[SctpTransport]]
.\n
RTCDataChannel
, channel, with a\n null
id
, run the\n following step:",
+ "html": "If description negotiates the DTLS\n role of the SCTP transport, then for each\n RTCDataChannel
, channel, with a\n null
id
, run the\n following step:",
"rationale": "give",
"steps": [
{
- "html": "Give channel a new ID generated\n according to [RFC8832]. If no\n available ID could be generated, set\n channel.[[ReadyState]]
to\n \"closed
\", and add\n channnel to errorList."
+ "html": "Give channel a new ID generated\n according to [RFC8832]. If no\n available ID could be generated, set\n channel.[[ReadyState]]
to\n \"closed
\", and add\n channnel to errorList."
}
]
}
]
},
{
- "html": "If description is not of type\n \"rollback
\", then run the following\n steps:",
+ "html": "If description is not of type\n \"rollback
\", then run the following\n steps:",
"rationale": "if",
"steps": [
{
+ "html": "If remote is false
, then\n run the following steps for each media description in description:",
"rationale": "if",
"steps": [
{
- "html": "If the media description was not yet associated with an RTCRtpTransceiver
\n object then run the following steps:",
+ "html": "If the media description was not yet associated with an RTCRtpTransceiver
\n object then run the following steps:",
"rationale": "let",
"steps": [
{
- "html": "\n Let transceiver be the\n
used to create the\n media description.\n RTCRtpTransceiver
\n Let transceiver be the\n RTCRtpTransceiver
used to create the\n media description.\n
\n Set\n transceiver.[[Mid]] to\n transceiver.[[JsepMid]].\n
" + "html": "\n Set\n transceiver.[[Mid]]
to\n transceiver.[[JsepMid]]
.\n
\n If\n transceiver.[[Stopped]]\n is true
, abort these sub\n steps.\n
\n If\n transceiver.[[Stopped]]
\n is true
, abort these sub\n steps.\n
\n If the media description is\n indicated as using an existing media\n transport according to [RFC8843],\n let transport be the\n
object representing\n the RTP/RTCP component of that transport.\n RTCDtlsTransport
\n If the media description is\n indicated as using an existing media\n media transport according to [RFC8843],\n let transport be the\n RTCDtlsTransport
object representing\n the RTP/RTCP component of that transport.\n
\n Otherwise, let transport be a\n newly created
object\n with a new underlying\n RTCDtlsTransport
.\n RTCIceTransport
\n Otherwise, let transport be a\n newly created RTCDtlsTransport
object\n with a new underlying\n RTCIceTransport
.\n
\n Set\n transceiver.[[Sender]].[[SenderTransport]]\n to transport.\n
" + "html": "\n Set\n transceiver.[[Sender]]
.[[SenderTransport]]
\n to transport.\n
\n Set\n transceiver.[[Receiver]].[[ReceiverTransport]]\n to transport.\n
" + "html": "\n Set\n transceiver.[[Receiver]]
.[[ReceiverTransport]]
\n to transport.\n
\n Let transceiver be the\n
associated with\n the media description.\n RTCRtpTransceiver
\n Let transceiver be the\n RTCRtpTransceiver
associated with\n the media description.\n
\n If transceiver.[[Stopped]]\n is true
, abort these sub steps.\n
\n If transceiver.[[Stopped]]
\n is true
, abort these sub steps.\n
\n Let direction be an\n
value\n representing the direction from the media\n description.\n RTCRtpTransceiverDirection
\n Let direction be an\n RTCRtpTransceiverDirection
value\n representing the direction from the media\n media description.\n
\n If direction is\n \"
\" or\n \"sendrecv
\",\n set\n transceiver.[[Receptive]]\n to recvonly
true
, otherwise set it to\n false
.\n
\n If direction is\n \"sendrecv
\" or\n \"recvonly
\",\n set\n transceiver.[[Receptive]]
\n to true
, otherwise set it to\n false
.\n
\n Set\n transceiver.[[Receiver]].[[ReceiveCodecs]]\n to the codecs that description\n negotiates for receiving and which the user\n agent is currently prepared to receive.\n
" + "html": "\n Set\n transceiver.[[Receiver]]
.[[ReceiveCodecs]]
\n to the codecs that description\n negotiates for receiving and which the user\n agent is currently prepared to receive.\n
answer
\" or\n \"pranswer
\", then run the\n following steps:",
- "rationale": "set",
- "steps": [
- {
- "html": "\n Set\n transceiver.[[Sender]].[[SendCodecs]]\n to the codecs that description\n negotiates for sending and which the user\n agent is currently capable of sending,\n and set\n transceiver.[[Sender]].[[LastReturnedParameters]]\n to null
.\n
sendonly
\"\n or\n \"inactive
\",\n and\n transceiver.[[FiredDirection]]\n is either\n \"sendrecv
\"\n or\n \"recvonly
\",\n then run the following steps:",
- "rationale": "set",
- "steps": [
- {
- "html": "\n Set the associated remote streams given\n transceiver.[[Receiver]],\n an empty list, another empty list,\n and removeList.\n
" - }, - { - "html": "\n process the removal of a remote\n track for the media description, given transceiver and\n muteTracks.\n
" - } - ] - }, - { - "html": "\n Set\n transceiver.[[CurrentDirection]]\n and\n transceiver.[[FiredDirection]]\n to direction.\n
" - } - ] - } - ], - "html": "\n If remote is false
, then\n run the following steps for each media description in description:\n
answer
\" or\n \"pranswer
\", then run the\n following steps:",
"rationale": "if",
"steps": [
{
- "html": "If the media description was not yet associated with an RTCRtpTransceiver
\n object then run the following steps:",
- "rationale": "let",
+ "html": "If transceiver.\n [[Sender]]
.[[SendEncodings]]
\n .length is greater than 1
, then\n run the following steps:",
+ "rationale": "if",
"steps": [
{
- "html": "\n Let transceiver be the\n RTCRtpTransceiver
used to create the\n media description.\n
\n Set\n transceiver.[[Mid]]
to\n transceiver.[[JsepMid]]
.\n
\n If\n transceiver.[[Stopped]]
\n is true
, abort these sub\n steps.\n
\n If the media description is\n indicated as using an existing media transport according to [RFC8843],\n let transport be the\n RTCDtlsTransport
object representing\n the RTP/RTCP component of that transport.\n
\n Otherwise, let transport be a\n newly created RTCDtlsTransport
object\n with a new underlying\n RTCIceTransport
.\n
\n Set\n transceiver.[[Sender]]
.[[SenderTransport]]
\n to transport.\n
\n If description is missing\n all of the previously negotiated layers,\n then remove all dictionaries in\n transceiver.[[Sender]]
.[[SendEncodings]]
\n except the first one, and skip the next\n step.\n
\n Set\n transceiver.[[Receiver]]
.[[ReceiverTransport]]
\n to transport.\n
\n If description is missing any of\n the previously negotiated layers, then\n remove the dictionaries that correspond to\n the missing layers from\n transceiver.[[Sender]]
.[[SendEncodings]]
.\n
\n Let transceiver be the\n RTCRtpTransceiver
associated with\n the media description.\n
\n If transceiver.[[Stopped]]
\n is true
, abort these sub steps.\n
\n Let direction be an\n RTCRtpTransceiverDirection
value\n representing the direction from the media description.\n
\n If direction is\n \"sendrecv
\" or\n \"recvonly
\",\n set\n transceiver.[[Receptive]]
\n to true
, otherwise set it to\n false
.\n
\n Set\n transceiver.[[Receiver]]
.[[ReceiveCodecs]]
\n to the codecs that description\n negotiates for receiving and which the user\n agent is currently prepared to receive.\n
\n
\n Set\n transceiver.[[Sender]]
.[[SendCodecs]]
\n to the codecs that description\n negotiates for sending and which the user\n agent is currently capable of sending,\n and set\n transceiver.[[Sender]]
.[[LastReturnedParameters]]
\n to null
.\n
answer
\" or\n \"pranswer
\", then run the\n following steps:",
- "rationale": "if",
+ "html": "If direction is\n \"sendonly
\"\n or\n \"inactive
\",\n and\n transceiver.[[FiredDirection]]
\n is either\n \"sendrecv
\"\n or\n \"recvonly
\",\n then run the following steps:",
+ "rationale": "set",
"steps": [
{
- "html": "If transceiver.\n [[Sender]]
.[[SendEncodings]]
\n .length is greater than 1
, then\n run the following steps:",
- "rationale": "if",
- "steps": [
- {
- "html": "\n If description is missing\n all of the previously negotiated layers,\n then remove all dictionaries in\n transceiver.[[Sender]]
.[[SendEncodings]]
\n except the first one, and skip the next\n step.\n
\n If description is missing any of\n the previously negototiated layers, then\n remove the dictionaries that correspond to\n the missing layers from\n transceiver.[[Sender]]
.[[SendEncodings]]
.\n
\n Set\n transceiver.[[Sender]]
.[[SendCodecs]]
\n to the codecs that description\n negotiates for sending and which the user\n agent is currently capable of sending,\n and set\n transceiver.[[Sender]]
.[[LastReturnedParameters]]
\n to null
.\n
sendonly
\"\n or\n \"inactive
\",\n and\n transceiver.[[FiredDirection]]
\n is either\n \"sendrecv
\"\n or\n \"recvonly
\",\n then run the following steps:",
- "rationale": "set",
- "steps": [
- {
- "html": "\n Set the associated remote streams given\n transceiver.[[Receiver]]
,\n an empty list, another empty list,\n and removeList.\n
\n process the removal of a remote track for the media description, given transceiver and\n muteTracks.\n
" - } - ] + "html": "\n Set the associated remote streams given\n transceiver.[[Receiver]]
,\n an empty list, another empty list,\n and removeList.\n
\n Set\n transceiver.[[CurrentDirection]]
\n and\n transceiver.[[FiredDirection]]
\n to direction.\n
\n process the removal of a remote\n remote track for the media description, given transceiver and\n muteTracks.\n
\n Set\n transceiver.[[CurrentDirection]]
\n and\n transceiver.[[FiredDirection]]
\n to direction.\n
true
) run the following steps for\n each media description in\n description:",
"rationale": "if",
"steps": [
{
- "html": "\n If the description is of type\n \"
\" and contains a request\n to receive simulcast, use the order of the\n rid values specified in the simulcast\n attribute to create an\n offer
dictionary for\n each of the simulcast layers, populating the\n RTCRtpEncodingParameters
member\n according to the corresponding rid value, and\n let sendEncodings be the list\n containing the created dictionaries.\n Otherwise, let sendEncodings be an\n empty list.\n rid
\n If the description is of type\n \"offer
\" and the\n media description contains a request\n to receive simulcast, use the order of the\n rid values specified in the simulcast\n attribute to create an\n RTCRtpEncodingParameters
dictionary for\n each of the simulcast layers, populating the\n rid
member\n according to the corresponding rid valuevalue\n (using only the first value if\n comma-separated alternatives exist), and\n let sendEncodingsproposedSendEncodings be the list\n the\n list containing the created dictionaries.\n Otherwise, let sendEncodings proposedSendEncodings\n be an\n an empty list.\n
\n For each encoding, encoding, in\n proposedSendEncodings in reverse\n order, if encoding's\n rid
matches that of\n another encoding in\n proposedSendEncodings, remove\n encoding\n from proposedSendEncodings.\n
scaleResolutionDownBy
\n to 2^(length of sendEncodings -\n encoding index - 1)
."
+ "html": "If scaleResolutionDownBy
\n to 2^(length of sendEncodingsproposedSendEncodings -\n encoding index - 1)
."
},
{
- "html": "\n As described by [RFC8829] (section 5.10.),\n attempt to find an existing\n
object,\n transceiver, to represent the media description.\n RTCRtpTransceiver
\n As described by [RFC8829RFC9429] (section 5.10.),\n attempt to find an existing\n RTCRtpTransceiver
object,\n transceiver, to represent the media description.\n
\n If a suitable transceiver was found\n (transceiver is set) and\n sendEncodings is non-empty, set\n transceiver.[[Sender]].[[SendEncodings]]\n to sendEncodings, and set\n transceiver.[[Sender]].[[LastReturnedParameters]]\n to null
.\n
\n If the length of\n transceiver.[[Sender]]
.[[SendEncodings]]
\n is 1
, and the lone encoding\n contains no\n rid
member, set\n transceiver.[[Sender]]
.[[SendEncodings]]
\n to proposedSendEncodings, and set\n transceiver.[[Sender]]
.[[LastReturnedParameters]]
\n to null
.\n
\n If a suitable transceiver was found\n (transceiver is set), and\n sendEncodingsproposedSendEncodings is non-empty, set\n transceiver.[[Sender]].[[SendEncodings]]\n to sendEncodings, and set\n transceiver.[[Sender]].[[LastReturnedParameters]]\n to run the following steps:\n null
.
\n Create an RTCRtpSender,\n sender, from the media\n description using\n sendEncodings.\n
" + "html": "\n Create an RTCRtpSender,\n sender, from the media\n media description using\n sendEncodingsproposedSendEncodings.\n
\n Create an RTCRtpReceiver,\n receiver, from the media\n description.\n
" + "html": "\n Create an RTCRtpReceiver,\n receiver, from the media\n media description.\n
\n Create an RTCRtpTransceiver with\n sender, receiver\n and an
\n value of\n \"RTCRtpTransceiverDirection
\",\n and let transceiver be the\n result.\n recvonly
\n Create an RTCRtpTransceiver with\n sender, receiver\n and an RTCRtpTransceiverDirection
\n value of\n \"recvonly
\",\n and let transceiver be the\n result.\n
\n Add transceiver to the\n connection's set of\n transceivers.\n
" + "html": "\n Add transceiver to the\n connection's set of\n of transceivers.\n
answer
\" or\n \"pranswer
\", and\n transceiver.\n [[Sender]].[[SendEncodings]]\n .length is greater than 1
, then\n run the following steps:",
+ "html": "If description is of type\n \"answer
\" or\n \"pranswer
\", and\n transceiver.\n [[Sender]]
.[[SendEncodings]]
\n .length is greater than 1
, then\n run the following steps:",
"rationale": "if",
"steps": [
{
- "html": "\n If description indicates that\n simulcast is not supported or desired,\n then remove all dictionaries in\n transceiver.[[Sender]].[[SendEncodings]]\n except the first one and abort these sub\n steps.\n
" + "html": "\n If description indicates that\n simulcast is not supported or desired, or\n description is missing all of\n the previously negotiated layers,\n then remove all dictionaries in\n transceiver.[[Sender]]
.[[SendEncodings]]
\n except the first one and abort these sub\n steps.\n
\n If description rejects any of\n the offered layers, then remove the\n dictionaries that correspond to rejected\n layers from\n transceiver.[[Sender]].[[SendEncodings]].\n
" + "html": "\n If description rejects is missing any of\n the offered previously negotiated layers, then then\n remove the\n the dictionaries that correspond to rejected\n to\n the missing layers from\n transceiver.[[Sender]]
.[[SendEncodings]]
.\n
\n Update the paused status as indicated by\n [RFC8853] of each simulcast\n layer by setting the\n
\n member on the corresponding dictionaries\n in\n transceiver.[[Sender]].[[SendEncodings]]\n to active
true
for unpaused or to\n false
for paused.\n
\n Update the paused status as indicated by\n [RFC8853] of each simulcast\n layer by setting the\n
\n member on the corresponding dictionaries\n in\n transceiver.[[Sender]].[[SendEncodings]]\n to active
true
for unpaused or to\n false
for paused.\n
\n Set transceiver.[[Mid]] to\n transceiver.[[JsepMid]].\n
" + "html": "\n Set transceiver.[[Mid]]
to\n transceiver.[[JsepMid]]
.\n
\n Let direction be an\n
value\n representing the direction from the media\n description, but with the send and receive\n directions reversed to represent this peer's\n point of view. If the media description\n is rejected, set direction to\n \"RTCRtpTransceiverDirection
\".\n inactive
\n Let direction be an\n RTCRtpTransceiverDirection
value\n representing the direction from the media\n media description, but with the send and receive\n directions reversed to represent this peer's\n point of view. If the media description\n is rejected, set direction to\n \"inactive
\".\n
\n If direction is\n \"
\" or\n \"sendrecv
\",\n let msids be a list of the MSIDs\n that the media description indicates\n transceiver.[[Receiver]].[[ReceiverTrack]]\n is to be associated with. Otherwise, let\n msids be an empty list.\n recvonly
\n If direction is\n \"sendrecv
\" or\n \"recvonly
\",\n let msids be a list of the MSIDs\n that the media description indicates\n transceiver.[[Receiver]]
.[[ReceiverTrack]]
\n is to be associated with. Otherwise, let\n msids be an empty list.\n
\n Process remote tracks with\n transceiver, direction,\n msids, addList,\n removeList, and\n trackEventInits.\n
" + "html": "\n Process remote tracks with\n transceiver, direction,\n msids, addList,\n removeList, and\n trackEventInits.\n
" }, { - "html": "\n Set\n transceiver.[[Receiver]].[[ReceiveCodecs]]\n to the codecs that description\n negotiates for receiving and which the user\n agent is currently prepared to receive.\n
" + "html": "\n Set\n transceiver.[[Receiver]]
.[[ReceiveCodecs]]
\n to the codecs that description\n negotiates for receiving and which the user\n agent is currently prepared to receive.\n
answer
\" or\n \"pranswer
\", then run the\n following steps:",
+ "html": "If description is of type\n \"answer
\" or\n \"pranswer
\", then run the\n following steps:",
"rationale": "set",
"steps": [
{
- "html": "\n Set\n transceiver.[[Sender]].[[SendCodecs]]\n to the codecs that description\n negotiates for sending and which the user\n agent is currently capable of sending.\n
" + "html": "\n Set\n transceiver.[[Sender]]
.[[SendCodecs]]
\n to the codecs that description\n negotiates for sending and which the user\n agent is currently capable of sending.\n
\n Set\n transceiver.[[CurrentDirection]]\n and\n transceiver.[[Direction]]s\n to direction.\n
" + "html": "\n Set\n transceiver.[[CurrentDirection]]
\n and\n transceiver.[[Direction]]s\n to direction.\n
\n Let transport be the\n
object representing\n the RTP/RTCP component of the media\n transport used by\n transceiver's associated\n media description, according to\n [RFC8843].\n RTCDtlsTransport
\n Let transport be the\n RTCDtlsTransport
object representing\n the RTP/RTCP component of the media\n media transport used by\n transceiver's associated\n media description, according to\n [RFC8843].\n
\n Set\n transceiver.[[Sender]].[[SenderTransport]]\n to transport.\n
" + "html": "\n Set\n transceiver.[[Sender]]
.[[SenderTransport]]
\n to transport.\n
\n Set\n transceiver.[[Receiver]].[[ReceiverTransport]]\n to transport.\n
" + "html": "\n Set\n transceiver.[[Receiver]]
.[[ReceiverTransport]]
\n to transport.\n
\n Set the [[IceRole]] of\n transport according to the\n rules of [RFC8445].\n
" + "html": "\n Set the [[IceRole]]
of\n transport according to the\n rules of [RFC8445].\n
\n If the media description is rejected,\n and\n transceiver.[[Stopped]] is\n false
, then stop the\n RTCRtpTransceiver transceiver.\n
\n Otherwise, (if remote is\n true
) run the following steps for\n each media description in\n description:\n
\n If the description is of type\n \"offer
\" and the\n media description contains a request\n to receive simulcast, use the order of the\n rid values specified in the simulcast\n attribute to create an\n RTCRtpEncodingParameters
dictionary for\n each of the simulcast layers, populating the\n rid
member\n according to the corresponding rid value\n (using only the first value if\n comma-separated alternatives exist), and\n let proposedSendEncodings be the\n list containing the created dictionaries.\n Otherwise, let proposedSendEncodings\n be an empty list.\n
\n For each encoding, encoding, in\n proposedSendEncodings in reverse\n order, if encoding's\n rid
matches that of\n another encoding in\n proposedSendEncodings, remove\n encoding\n from proposedSendEncodings.\n
scaleResolutionDownBy
\n to 2^(length of proposedSendEncodings -\n encoding index - 1)
."
- },
- {
- "html": "\n As described by [RFC8829] (section 5.10.),\n attempt to find an existing\n RTCRtpTransceiver
object,\n transceiver, to represent the media description.\n
\n If the length of\n transceiver.[[Sender]]
.[[SendEncodings]]
\n is 1
, and the lone encoding\n contains no\n rid
member, set\n transceiver.[[Sender]]
.[[SendEncodings]]
\n to proposedSendEncodings, and set\n transceiver.[[Sender]]
.[[LastReturnedParameters]]
\n to null
.\n
\n Create an RTCRtpSender,\n sender, from the media description using\n proposedSendEncodings.\n
" - }, - { - "html": "\n Create an RTCRtpReceiver,\n receiver, from the media description.\n
" - }, - { - "html": "\n Create an RTCRtpTransceiver with\n sender, receiver\n and an RTCRtpTransceiverDirection
\n value of\n \"recvonly
\",\n and let transceiver be the\n result.\n
\n Add transceiver to the\n connection's set of transceivers.\n
" - } - ] - }, - { - "html": "If description is of type\n \"answer
\" or\n \"pranswer
\", and\n transceiver.\n [[Sender]]
.[[SendEncodings]]
\n .length is greater than 1
, then\n run the following steps:",
- "rationale": "if",
- "steps": [
- {
- "html": "\n If description indicates that\n simulcast is not supported or desired, or\n description is missing all of\n the previously negotiated layers,\n then remove all dictionaries in\n transceiver.[[Sender]]
.[[SendEncodings]]
\n except the first one and abort these sub\n steps.\n
\n If description is missing any of\n the previously negotiated layers, then\n remove the dictionaries that correspond to\n the missing layers from\n transceiver.[[Sender]]
.[[SendEncodings]]
.\n
\n Set transceiver.[[Mid]]
to\n transceiver.[[JsepMid]]
.\n
\n Let direction be an\n RTCRtpTransceiverDirection
value\n representing the direction from the media description, but with the send and receive\n directions reversed to represent this peer's\n point of view. If the media description\n is rejected, set direction to\n \"inactive
\".\n
\n If direction is\n \"sendrecv
\" or\n \"recvonly
\",\n let msids be a list of the MSIDs\n that the media description indicates\n transceiver.[[Receiver]]
.[[ReceiverTrack]]
\n is to be associated with. Otherwise, let\n msids be an empty list.\n
\n Process remote tracks with\n transceiver, direction,\n msids, addList,\n removeList, and\n trackEventInits.\n
" - }, - { - "html": "\n Set\n transceiver.[[Receiver]]
.[[ReceiveCodecs]]
\n to the codecs that description\n negotiates for receiving and which the user\n agent is currently prepared to receive.\n
answer
\" or\n \"pranswer
\", then run the\n following steps:",
- "rationale": "set",
- "steps": [
- {
- "html": "\n Set\n transceiver.[[Sender]]
.[[SendCodecs]]
\n to the codecs that description\n negotiates for sending and which the user\n agent is currently capable of sending.\n
\n Set\n transceiver.[[CurrentDirection]]
\n to direction.\n
\n Let transport be the\n RTCDtlsTransport
object representing\n the RTP/RTCP component of the media transport used by\n transceiver's associated\n media description, according to\n [RFC8843].\n
\n Set\n transceiver.[[Sender]]
.[[SenderTransport]]
\n to transport.\n
\n Set\n transceiver.[[Receiver]]
.[[ReceiverTransport]]
\n to transport.\n
\n Set the [[IceRole]]
of\n transport according to the\n rules of [RFC8445].\n
\n If the media description is rejected,\n and\n transceiver.[[Stopped]]
is\n false
, then stop the RTCRtpTransceiver transceiver.\n
\n If the media description is rejected,\n and\n transceiver.[[Stopped]]
is\n false
, then stop the\n the RTCRtpTransceiver transceiver.\n
rollback
\") run the following steps:",
+ "html": "Otherwise, (if description is of type\n \"rollback
\") run the following steps:",
"rationale": "let",
"steps": [
{
- "html": "\n Let pendingDescription be either\n connection.[[PendingLocalDescription]]
\n or\n connection.[[PendingRemoteDescription]]
,\n whichever one is not null
.\n
\n Let pendingDescription be either\n connection.[[PendingLocalDescription]]
\n or\n connection.[[PendingRemoteDescription]]
,\n whichever one is not null
.\n
\n If transceiver was not associated with a media description\n prior to pendingDescription being set,\n disassociate it and set both\n transceiver.[[JsepMid]]\n and transceiver.[[Mid]] to\n null
.\n
\n If transceiver was not associated with a media description\n prior to pendingDescription being set,\n disassociate it and set both\n transceiver.[[JsepMid]]
\n and transceiver.[[Mid]]
to\n null
.\n
\n Set\n transceiver.[[Sender]].[[SenderTransport]]\n to\n transceiver.[[Sender]].[[LastStableStateSenderTransport]].\n
" + "html": "\n Set\n transceiver.[[Sender]]
.[[SenderTransport]]
\n to\n transceiver.[[Sender]]
.[[LastStableStateSenderTransport]]
.\n
\n Set\n transceiver.[[Receiver]].[[ReceiverTransport]]\n to\n transceiver.[[Receiver]].[[LastStableStateReceiverTransport]].\n
" + "html": "\n If\n transceiver.[[Sender]]
.[[LastStableRidlessSendEncodings]]
\n is not null
, and any encoding in\n transceiver.[[Sender]]
.[[SendEncodings]]
\n contains a\n rid
member, then set\n transceiver.[[Sender]]
.[[SendEncodings]]
\n to\n transceiver.[[Sender]]
.[[LastStableRidlessSendEncodings]]
.\n
\n Set\n transceiver.[[Receiver]].[[ReceiveCodecs]]\n to\n transceiver.[[Receiver]].[[LastStableStateReceiveCodecs]].\n
" + "html": "\n Set\n transceiver.[[Receiver]]
.[[ReceiverTransport]]
\n to\n transceiver.[[Receiver]]
.[[LastStableStateReceiverTransport]]
.\n
have-remote-offer
\",\n run the following sub steps:",
+ "html": "\n Set\n transceiver.[[Receiver]]
.[[ReceiveCodecs]]
\n to\n transceiver.[[Receiver]]
.[[LastStableStateReceiveCodecs]]
.\n
[[SignalingState]]
\n is \"have-remote-offer
\",\n run the following sub steps:",
"rationale": "let",
"steps": [
{
- "html": "\n Let msids be a list of the\n id
s of all\n MediaStream
objects in\n transceiver.[[Receiver]].[[LastStableStateAssociatedRemoteMediaStreams]],\n or an empty list if there are none.\n
\n Let msids be a list of the\n id
s of all\n MediaStream
objects in\n transceiver.[[Receiver]]
.[[LastStableStateAssociatedRemoteMediaStreams]]
,\n or an empty list if there are none.\n
\n Process remote tracks with\n transceiver,\n transceiver.[[CurrentDirection]],\n msids, addList,\n removeList, and\n trackEventInits.\n
" + "html": "\n Process remote tracks with\n transceiver,\n transceiver.[[CurrentDirection]]
,\n msids, addList,\n removeList, and\n trackEventInits.\n
\n If transceiver was created when\n pendingDescription was set, and a\n track has never been attached to it via\n addTrack
()
, then stop the RTCRtpTransceiver\n transceiver, and remove it from\n connection's set of\n transceivers.\n
\n For each transceiver in the\n connection's set of transceivers\n run the following steps:\n
\n\n If transceiver was not associated with a media description\n prior to pendingDescription being set,\n disassociate it and set both\n transceiver.[[JsepMid]]
\n and transceiver.[[Mid]]
to\n null
.\n
\n Set\n transceiver.[[Sender]]
.[[SenderTransport]]
\n to\n transceiver.[[Sender]]
.[[LastStableStateSenderTransport]]
.\n
\n If\n transceiver.[[Sender]]
.[[LastStableRidlessSendEncodings]]
\n is not null
, and any encoding in\n transceiver.[[Sender]]
.[[SendEncodings]]
\n contains a\n rid
member, then set\n transceiver.[[Sender]]
.[[SendEncodings]]
\n to\n transceiver.[[Sender]]
.[[LastStableRidlessSendEncodings]]
.\n
\n Set\n transceiver.[[Receiver]]
.[[ReceiverTransport]]
\n to\n transceiver.[[Receiver]]
.[[LastStableStateReceiverTransport]]
.\n
\n Set\n transceiver.[[Receiver]]
.[[ReceiveCodecs]]
\n to\n transceiver.[[Receiver]]
.[[LastStableStateReceiveCodecs]]
.\n
have-remote-offer
\",\n run the following sub steps:",
- "rationale": "let",
- "steps": [
- {
- "html": "\n Let msids be a list of the\n id
s of all\n MediaStream
objects in\n transceiver.[[Receiver]]
.[[LastStableStateAssociatedRemoteMediaStreams]]
,\n or an empty list if there are none.\n
\n Process remote tracks with\n transceiver,\n transceiver.[[CurrentDirection]]
,\n msids, addList,\n removeList, and\n trackEventInits.\n
\n If transceiver was created when\n pendingDescription was set, and a\n track has never been attached to it via\n addTrack
()
, then stop the RTCRtpTransceiver\n transceiver, and remove it from\n connection's set of transceivers.\n
\n If transceiver was created when\n pendingDescription was set, and a\n track has never been attached to it via\n addTrack
()
, then stop the RTCRtpTransceiver\n transceiver, and remove it from\n connection's set of transceivers.\n
\n Set\n connection.[[PendingLocalDescription]]
\n and\n connection.[[PendingRemoteDescription]]
\n to null
, and set\n connection's signaling state to\n \"stable
\".\n
\n Set\n connection.[[PendingLocalDescription]]
\n and\n connection.[[PendingRemoteDescription]]
\n to null
, and set\n connection.[[SignalingState]]
to\n \"stable
\".\n
answer
\", then run the following\n steps:",
+ "html": "If description is of type\n \"answer
\", then run the following\n steps:",
"rationale": "for",
"steps": [
{
- "html": "For each transceiver in the\n connection's set of transceivers\n run the following steps:",
+ "html": "For each transceiver in the\n connection's set of transceivers\n run the following steps:",
"rationale": "if",
"steps": [
{
- "html": "\n If transceiver is\n stopped
, associated with an m= section and the associated m=\n section is rejected in\n connection.[[CurrentLocalDescription]]
\n or\n connection.[[CurrentRemoteDescription]]
,\n remove the transceiver from the\n connection's set of transceivers.\n
\n If transceiver is\n stopped
, associated with an m= section and the associated m=\n section is rejected in\n connection.[[CurrentLocalDescription]]
\n or\n connection.[[CurrentRemoteDescription]]
,\n remove the transceiver from the\n connection's set of transceivers.\n
stable
\", run the following\n steps:",
+ "html": "If connection.[[SignalingState]]
is\n now \"stable
\", run the following\n steps:",
"rationale": "for",
"steps": [
{
- "html": "\n For any transceiver that was removed\n from the set of transceivers in a previous\n step, if any of its transports\n (transceiver.[[Sender]]
.[[SenderTransport]]
\n or\n transceiver.[[Receiver]]
.[[ReceiverTransport]]
)\n are still not closed and they're no longer\n referenced by a non-stopped transceiver, close\n the RTCDtlsTransport
s and their associated\n RTCIceTransport
s. This results in events\n firing on these objects in a queued task.\n
\n For any transceiver that was removed\n from the set of transceivers in a previous\n step, if any of its transports\n (transceiver.[[Sender]]
.[[SenderTransport]]
\n or\n transceiver.[[Receiver]]
.[[ReceiverTransport]]
)\n are still not closed and they're no longer\n referenced by a non-stopped transceiver, close\n the RTCDtlsTransport
s and their associated\n RTCIceTransport
s. This results in events\n firing on these objects in a queued task.\n
Let codecs be transceiver.[[Sender]]
.[[SendCodecs]]
.
For each encoding in\n transceiver.[[Sender]]
.[[SendEncodings]]
,\n if encoding.codec
does not\n match any entry in codecs,\n remove encoding[codec
].
\n Clear the negotiation-needed flag and update the negotiation-needed flag.\n
" + "html": "\n Clear the negotiation-needed flag and update the negotiation-needed flag.\n
" } ] }, { - "html": "\n If connection's signaling state\n changed above, fire an event named\n signalingstatechange
at connection.\n
\n If connection.[[SignalingState]]
\n changed above, fire an event named\n signalingstatechange
at connection.\n
\n For each channel in errorList,\n fire an event named error
\n using the RTCErrorEvent
interface with the\n errorDetail
attribute set to\n \"data-channel-failure
\" at\n channel.\n
\n For each channel in errorList,\n fire an event named error
\n using the RTCErrorEvent
interface with the\n errorDetail
attribute set to\n \"data-channel-failure
\" at\n channel.\n
\n For each track in muteTracks,\n set the muted state of track to the\n value true
.\n
\n For each track in muteTracks,\n set the muted state of track to the\n value true
.\n
\n For each stream and track pair\n in removeList, remove the track\n track from stream.\n
" + "html": "\n For each stream and track pair\n in removeList, remove the track\n track from stream.\n
" }, { - "html": "\n For each stream and track pair\n in addList, add the track\n track to stream.\n
" + "html": "\n For each stream and track pair\n in addList, add the track\n track to stream.\n
" }, { - "html": "\n For each entry entry in\n trackEventInits, fire an event named\n track
using the RTCTrackEvent
interface with\n its receiver
attribute initialized\n to entry.receiver
,\n its track
attribute initialized to\n entry.track
, its\n streams
attribute initialized to\n entry.streams
and\n its transceiver
attribute\n initialized to\n entry.transceiver
at\n the connection object.\n
\n For each entry entry in\n trackEventInits, fire an event named\n track
using the RTCTrackEvent
interface with\n its receiver
attribute initialized\n to entry.receiver
,\n its track
attribute initialized to\n entry.track
, its\n streams
attribute initialized to\n entry.streams
and\n its transceiver
attribute\n initialized to\n entry.transceiver
at\n the connection object.\n
\n Resolve p with\n undefined
.\n
\n Resolve p with\n undefined
.\n
\n Let configuration be the
\n dictionary to be processed.\n RTCConfiguration
\n Let configuration be the
\n dictionary to be processed.\n RTCConfiguration
\n Let connection be the target
\n object.\n RTCPeerConnection
\n Let connection be the target RTCPeerConnection
\n object.\n
certificates
\n is set, run the following steps:",
+ "html": "\n Let oldConfig be\n connection.[[Configuration]]
.\n
certificates
\n null
, run InvalidModificationError
:",
"rationale": "if",
"steps": [
{
- "html": "\n If the length of\n configuration.
\n is different from the length of\n connection.[[Configuration]].certificates
,\n throw an certificates
InvalidModificationError
.\n
\n If the length of\n configuration.certificates
\n is different from the length of\n connectionoldConfig.[[Configuration]].certificates
,\n throw an fail.\n InvalidModificationError
\n Let index be initialized to 0.\n
" + "html": "\n Let index be initialized to 0.\n
\n Let size be initialized to the length of\n configuration.
.\n certificates
\n Let size be initialized to the length of\n configuration.
.\n certificates
\n If the ECMAScript object represented by the value of\n configuration.
\n at index is not the same as the ECMAScript\n object represented by the value of\n connection.[[Configuration]].certificates
\n at index, throw an\n certificates
InvalidModificationError
.\n
\n If the ECMAScript object represented by the value of\n configuration.certificates
\n at index is not the same as the ECMAScript\n object represented by the value of\n connectionoldConfig.[[Configuration]].certificates
\n at index, throw an\n then fail.\n InvalidModificationError
\n Increment index by 1.\n
" } ] + }, + { + "html": "\n If the value of\n configuration.bundlePolicy
\n differs from\n oldConfig.bundlePolicy
,\n then fail.\n
\n If the value of\n configuration.rtcpMuxPolicy
\n differs from\n oldConfig.rtcpMuxPolicy
,\n then fail.\n
\n If the value of\n configuration.iceCandidatePoolSize
\n differs from\n oldConfig.iceCandidatePoolSize
,\n and setLocalDescription
has already been\n called, then fail.\n
\n If the value of\n configuration.
is\n set and its value differs from the connection's\n bundle policy, throw an\n bundlePolicy
InvalidModificationError
.\n
\n If the value of\n configuration.
is\n set and its value differs from the connection's\n bundle policy, throw an\n bundlePolicy
InvalidModificationError
.\n
\n If the value of\n configuration.
\n is set and its value differs from the connection's\n rtcpMux policy, throw an\n rtcpMuxPolicy
InvalidModificationError
.\n
\n If the value of\n configuration.
\n is set and its value differs from the connection's\n rtcpMux policy, throw an\n rtcpMuxPolicy
InvalidModificationError
.\n
\n If the value of\n configuration.
\n is set and its value differs from the connection's\n previously set iceCandidatePoolSize
, and\n iceCandidatePoolSize
has already been\n called, throw an\n setLocalDescription
InvalidModificationError
.\n
\n If the value of\n configuration.
\n is set and its value differs from the connection's\n previously set iceCandidatePoolSize
, and\n iceCandidatePoolSize
has already been\n called, throw an\n setLocalDescription
InvalidModificationError
.\n
\n Set the ICE Agent's ICE transports setting to the\n value of\n configuration.
.\n As defined in [RFC8829] (section 4.1.18.), if the new ICE\n transports setting changes the existing setting, no action\n will be taken until the next gathering phase. If a script\n wants this to happen immediately, it should do an ICE\n restart.\n iceTransportPolicy
\n Let iceServers be\n configuration.iceServers
.\n
\n Set the ICE Agent's prefetched ICE candidate pool\n size as defined in [RFC8829] (section 3.5.4. and section 4.1.1.) to the\n value of\n configuration.
.\n If the new ICE candidate pool size changes the existing\n setting, this may result in immediate gathering of new pooled\n candidates, or discarding of existing pooled candidates, as\n defined in [RFC8829] (section 4.1.18.).\n iceCandidatePoolSize
\n Truncate iceServers to the maximum number of supported elements.\n
" }, { - "html": "\n Let validatedServers be an empty list.\n
" + "html": "For each server in\n iceServers,\n run the following steps:", + "rationale": "let", + "steps": [ + { + "html": "\n Let urls be\n server.urls
.\n
\n If urls is a string, set urls to a\n list consisting of just that string.\n
" + }, + { + "html": "\n If urls is empty, throw a\n \"SyntaxError
\" DOMException
.\n
\n For each url in urls, run the validate an ICE server URL algorithm on url.\n
" + } + ] }, { - "html": "If configuration.iceServers
\n is defined, then run the following steps for each element:",
+ "html": "\n Set the ICE Agent's ICE transports setting to the\n value of\n configuration.iceTransportPolicy
.\n As defined in [RFC8829RFC9429] (section 4.1.18.), if the new ICE\n ICE transports setting changes the existing setting, no action\n will be taken until the next gathering phase. If a script\n wants this to happen immediately, it should do an ICE\n restart.\n
\n Set the ICE Agent's prefetched ICE candidate pool\n size as defined in [RFC8829RFC9429] (section 3.5.4. and section 4.1.1.) to the\n value of\n configuration.iceCandidatePoolSize
.\n If the new ICE candidate pool size changes the existing\n setting, this may result in immediate gathering of new pooled\n candidates, or discarding of existing pooled candidates, as\n defined in [RFC8829RFC9429] (section 4.1.18.).\n
\n Let validatedServers be an empty list.\n
iceServers
\n is defined, then run the following steps for each element:",
"rationale": "let",
"steps": [
{
"html": "\n Let server be the current list element.\n
" }, { - "html": "\n Let urls be\n server.
.\n urls
\n Let urls be\n server.
.\n urls
\n If urls is a string, set urls to a\n list consisting of just that string.\n
" @@ -980,19 +789,7 @@ "html": "\n If urls is empty, throw a\n SyntaxError
.\n
\n Parse the url using the generic URI syntax\n defined in [RFC3986] and obtain the scheme\n name. If the parsing based on the syntax\n defined in [RFC3986] fails, throw\n a SyntaxError
. If the scheme name is\n not implemented by the browser throw\n a NotSupportedError
. If scheme name is\n turn
or turns
, and parsing the url\n using the syntax defined in [RFC7065] fails, throw a SyntaxError
. If scheme\n name is stun
or\n stuns
, and parsing the\n url using the syntax defined in\n [RFC7064] fails, throw a\n SyntaxError
.\n
\n If scheme name is turn
or turns
, and either of\n server.
or\n server.username
are\n omitted, then throw an\n credential
InvalidAccessError
.\n
\n If scheme name is turn
or turns
, and\n server.
is\n \"credentialType
\", and\n server.password
is not\n a DOMString, then\n throw an credential
InvalidAccessError
.\n
\n\t\t For each url in urls, run the [=validate an ICE server URL=] algorithm on url.\n
" }, { "html": "\n Append server to validatedServers.\n
" @@ -1000,99 +797,45 @@ ] }, { - "html": "\n Set the ICE Agent's ICE\n servers list to validatedServers.\n
\n\n As defined in [RFC8829] (section 4.1.18.), if a new list of servers\n replaces the ICE Agent's existing ICE servers list, no\n action will be taken until the next gathering phase. If a\n script wants this to happen immediately, it should do an ICE\n restart. However, if the ICE\n candidate pool has a nonzero size, any existing pooled\n candidates will be discarded, and new candidates will be\n gathered from the new servers.\n
" + "html": "\n
\n Set the ICE Agent's ICE\n servers list to validatedServersto\n iceServers.\n
\n As defined in [RFC8829RFC9429] (section 4.1.18.), if a new list of servers\n replaces the ICE Agent's existing ICE servers listICE servers list, no\n action will be taken until the next gathering phase. If a\n script wants this to happen immediately, it should do an ICE\n restart. However, if the ICE\n ICE candidate pool has a nonzero size, any existing existing pooled\n candidates will be discarded, and new candidates will be\n gathered from the new servers.\n
\n Store configuration in the\n [[Configuration]] internal slot.\n
" + "html": "\n Store configuration in the\n [[Configuration]]
internal slot.\n
\n Let connection be the target RTCPeerConnection
\n object.\n
\n Parse the url using the generic URI syntax\n defined in [RFC3986] and obtain the scheme\n name. If the parsing based on the syntax\n defined in [RFC3986] fails, throw\n a SyntaxError
. If the scheme name is\n not implemented by the browser throw\n a NotSupportedError
. If scheme name is\n turn
or turns
, and parsing the url\n using the syntax defined in [RFC7065] fails, throw a SyntaxError
. If scheme\n name is stun
or\n stuns
, and parsing the\n url using the syntax defined in\n [RFC7064] fails, throw a\n SyntaxError
.\n
\n Let oldConfig be\n connection.[[Configuration]]
.\n
Let parsedURL be the result of\n parsing\n url.
" }, { - "html": "If oldConfig is notnull
, run the\n following steps, and if any of them fail, throw\n an InvalidModificationError
:",
- "rationale": "if",
- "steps": [
- {
- "html": "\n If the length of\n configuration.certificates
\n is different from the length of\n oldConfig.certificates
,\n fail.\n
\n Let index be 0.\n
" - }, - { - "html": "While index is less than the length of\n configuration.certificates
,\n run the following steps:",
- "rationale": "if",
- "steps": [
- {
- "html": "\n If the ECMAScript object represented by the value of\n configuration.certificates
\n at index is not the same as the ECMAScript\n object represented by the value of\n oldConfig.certificates
\n at index, then fail.\n
\n Increment index by 1.\n
" - } - ] - }, - { - "html": "\n If the value of\n configuration.bundlePolicy
\n differs from\n oldConfig.bundlePolicy
,\n then fail.\n
\n If the value of\n configuration.rtcpMuxPolicy
\n differs from\n oldConfig.rtcpMuxPolicy
,\n then fail.\n
\n If the value of\n configuration.iceCandidatePoolSize
\n differs from\n oldConfig.iceCandidatePoolSize
,\n and setLocalDescription
has already been\n called, then fail.\n
If any of the following conditions apply, then throw a\n \"SyntaxError
\" DOMException
:
\"stun\"
,\n \"stuns\"
, \"turn\"
, nor \"turns\"
\"stun\"
or \"stuns\"
,\n and parsedURL's' query is non-nulliceServers
,\n run the following steps:",
- "rationale": "let",
- "steps": [
- {
- "html": "\n Let urls be\n server.urls
.\n
\n If urls is a string, set urls to a\n list consisting of just that string.\n
" - }, - { - "html": "\n If urls is empty, throw a\n SyntaxError
.\n
\n Parse the url using the generic URI syntax\n defined in [RFC3986] and obtain the scheme\n name. If the parsing based on the syntax\n defined in [RFC3986] fails, throw\n a SyntaxError
. If the scheme name is\n not implemented by the browser throw\n a NotSupportedError
. If scheme name is\n turn
or turns
, and parsing the url\n using the syntax defined in [RFC7065] fails, throw a SyntaxError
. If scheme\n name is stun
or\n stuns
, and parsing the\n url using the syntax defined in\n [RFC7064] fails, throw a\n SyntaxError
.\n
\n If scheme name is turn
or turns
, and either of\n server.username
or\n server.credential
are\n omitted, then throw an\n InvalidAccessError
.\n
\n If scheme name is turn
or turns
, and\n server.credential
is not\n a DOMString, then\n throw an InvalidAccessError
.\n
If parsedURL's scheme is not implemented by the\n user agent, then throw a NotSupportedError
.
\n Set the ICE Agent's ICE transports setting to the\n value of\n configuration.iceTransportPolicy
.\n As defined in [RFC8829] (section 4.1.18.), if the new ICE transports setting changes the existing setting, no action\n will be taken until the next gathering phase. If a script\n wants this to happen immediately, it should do an ICE\n restart.\n
Let hostAndPortURL be result of\n parsing the concatenation of\n \"https://\"
and parsedURL's path.
\n Set the ICE Agent's prefetched ICE candidate pool\n size as defined in [RFC8829] (section 3.5.4. and section 4.1.1.) to the\n value of\n configuration.iceCandidatePoolSize
.\n If the new ICE candidate pool size changes the existing\n setting, this may result in immediate gathering of new pooled\n candidates, or discarding of existing pooled candidates, as\n defined in [RFC8829] (section 4.1.18.).\n
If hostAndPortURL is failure, then throw a\n \"SyntaxError
\" DOMException
.
\n Set the ICE Agent's ICE\n servers list to\n configuration.iceServers
.\n
\n As defined in [RFC8829] (section 4.1.18.), if a new list of servers\n replaces the ICE Agent's existing ICE servers list, no\n action will be taken until the next gathering phase. If a\n script wants this to happen immediately, it should do an ICE\n restart. However, if the ICE candidate pool has a nonzero size, any existing pooled\n candidates will be discarded, and new candidates will be\n gathered from the new servers.\n
" + "html": "TODO: validate ?transport=udp|tcp (see PR #2996)" }, { - "html": "\n Store configuration in the\n [[Configuration]]
internal slot.\n
\n If scheme nameparsedURL's' scheme is turn
\"turn\"
or or\n turns
\"turns\"
, and either of\n server.username
or\n server.credential
are\n omitteddo\n not exist, then throw an\n InvalidAccessError
.\n
\n If scheme name is turn
or turns
, and\n server.
is\n \"credentialType
\", and\n server.password
is not\n a DOMString, then\n throw an credential
InvalidAccessError
.\n
\n Let connection be the RTCPeerConnection
\n object on which the method was invoked.\n
\n Let connection be the RTCPeerConnection
\n object on which the method was invoked.\n
\n If connection.[[IsClosed]]
is\n true
, return a promise rejected with\n a newly created InvalidStateError
.\n
\n If connection.[[IsClosed]]
is\n true
, return a promise rejected with\n a newly created InvalidStateError
.\n
\n Return the result of chaining the result of creating an offer with connection to\n connection's operations chain.\n
" + "html": "\n Return the result of chaining the result of creating an offer with connection to\n connection's operations chain.\n
" } ] }, { "name": "creating an offer", "href": "https://www.w3.org/TR/webrtc/#dfn-creating-an-offer", - "html": "To create an offer\n given connection run the following steps:", - "rationale": "if", + "html": "To create an offer\n given connection run the following steps:", + "rationale": ".algorithm", "steps": [ { - "html": "\n If connection's signaling state is\n neither \"stable
\" nor\n \"have-local-offer
\", return a\n promise rejected with a newly created InvalidStateError
.\n
\n If connection.[[SignalingState]]
is\n neither \"stable
\" nor\n \"have-local-offer
\", return a\n promise rejected with a newly created InvalidStateError
.\n
\n Let p be a new promise.\n
" }, { - "html": "\n In parallel, begin the in-parallel steps to create an offer given connection and\n p.\n
" + "html": "\n In parallel, begin the in-parallel steps to create an offer given connection and\n p.\n
" }, { "html": "\n Return p.\n
" @@ -1136,70 +879,73 @@ { "name": "in-parallel steps to create an offer", "href": "https://www.w3.org/TR/webrtc/#dfn-in-parallel-steps-to-create-an-offer", - "html": "The in-parallel steps to create an offer given\n connection and a promise p are as\n follows:", + "html": "The in-parallel steps to create an offer given\n connection and a promise p are as\n follows:", "rationale": "if", "steps": [ { "html": "\n If connection was not constructed with a set\n of certificates, and one has not yet been generated,\n wait for it to be generated.\n
" }, { - "html": "\n Inspect the offerer's system state to\n determine the currently available resources as\n necessary for generating the offer, as described in\n [RFC8829] (section 4.1.8.).\n
" + "html": "\n Inspect the offerer's system state to\n determine the currently available resources as\n necessary for generating the offer, as described in\n [RFC9429] (section 4.1.8.).\n
" }, { - "html": "\n If this inspection failed for any reason, reject\n p with a newly created\n OperationError
and abort these steps.\n
\n If this inspection failed for any reason, reject\n p with a newly created\n OperationError
and abort these steps.\n
\n Queue a task that runs the final steps to create an offer given connection and p.\n
" + "html": "\n Queue a task that runs the final steps to create an offer given connection and p.\n
" } ] }, { "name": "final steps to create an offer", "href": "https://www.w3.org/TR/webrtc/#dfn-final-steps-to-create-an-offer", - "html": "The final steps to create an offer given\n connection and a promise p are as\n follows:", - "rationale": "if", + "html": "The final steps to create an offer given\n connection and a promise p are as\n follows:", + "rationale": ".algorithm", "steps": [ { - "html": "\n If connection.[[IsClosed]]
is\n true
, then abort these steps.\n
\n If connection.[[IsClosed]]
is\n true
, then abort these steps.\n
\n If connection was modified in such a way\n that additional inspection of the offerer's system state is necessary, then in parallel begin the in-parallel steps to create an offer again, given\n connection and p, and abort these\n steps.\n
" + "html": "\n If connection was modified in such a way\n that additional inspection of the offerer's system state is necessary, then in parallel begin the in-parallel steps to create an offer again, given\n connection and p, and abort these\n steps.\n
" }, { - "html": "Given the information that was obtained from previous\n inspection, the current state of connection\n and itsRTCRtpTransceiver
s, generate an SDP offer,\n sdpString, as described in [RFC8829] (section 5.2.).",
- "rationale": "if",
+ "html": "Given the information that was obtained from previous\n inspection, the current state of connection\n and its RTCRtpTransceiver
s, generate an SDP offer,\n sdpString, as described in [RFC9429] (section 5.2.).",
+ "rationale": "let",
"steps": [
{
- "html": "\n As described in [RFC8843] (Section 7), if\n bundling is used (see RTCBundlePolicy
) an\n offerer tagged m= section must be selected in order\n to negotiate a BUNDLE group. The user agent MUST\n choose the m= section that corresponds to the first\n non-stopped transceiver in the set of transceivers as the offerer tagged m= section.\n This allows the remote endpoint to predict which\n transceiver is the offerer tagged m= section\n without having to parse the SDP.\n
\n As described in [RFC8843] (Section 7), if\n bundling is used (see RTCBundlePolicy
) an\n offerer tagged m= section must be selected in order\n to negotiate a BUNDLE group. The user agent MUST\n choose the m= section that corresponds to the first\n non-stopped transceiver in the set of transceivers as the offerer tagged m= section.\n This allows the remote endpoint to predict which\n transceiver is the offerer tagged m= section\n without having to parse the SDP.\n
RTCRtpTransceiver
.[[PreferredCodecs]]
\n with the following filtering applied (or said not\n to be set if [[PreferredCodecs]]
is empty):",
- "rationale": "if",
+ "html": "The codec preferences of a media description's associated transceiver,\n transceiver, is said to be the value of\n transceiver.[[PreferredCodecs]]
\n with the following filtering applied (or said not\n to be set if\n transceiver.[[PreferredCodecs]]
\n is empty):",
+ "rationale": "let",
"steps": [
{
- "html": "\n If the direction
is\n \"sendrecv
\",\n exclude any codecs not included in the\n intersection of\n RTCRtpSender
.getCapabilities
(kind).codecs
\n and\n RTCRtpReceiver
.getCapabilities
(kind).codecs
.\n
Let kind be transceiver's\n [[Receiver]]
's\n [[ReceiverTrack]]
's\n kind
.
\n If the direction
is\n \"sendonly
\",\n exclude any codecs not included in\n RTCRtpSender
.getCapabilities
(kind).codecs
.\n
\n If the direction
is\n \"recvonly
\",\n exclude any codecs not included in\n RTCRtpReceiver
.getCapabilities
(kind).codecs
.\n
\n If\n transceiver.direction
\n is \"sendonly
\"\n or \"sendrecv
\",\n exclude any codecs not included in the\n list of implemented send codecs for\n kind.\n
\n If\n transceiver.direction
\n is \"recvonly
\"\n or \"sendrecv
\",\n exclude any codecs not included in the\n list of implemented receive codecs for\n kind.\n
\n If the length of the [[SendEncodings]]
slot\n of the RTCRtpSender
is larger than 1, then for\n each encoding given in [[SendEncodings]]
of\n the RTCRtpSender
, add an a=rid send
line to the corresponding\n media section, and add an a=simulcast:send
line giving the RIDs\n in the same order as given in the\n encodings
field. No RID\n restrictions are set.\n
\n If the length of the [[SendEncodings]]
slot\n of the RTCRtpSender
is larger than 1, then for\n each encoding given in [[SendEncodings]]
of\n the RTCRtpSender
, add an a=rid send
line to the corresponding\n media section, and add an a=simulcast:send
line giving the RIDs\n in the same order as given in the\n encodings
field. No RID\n restrictions are set.\n
\n Let offer be a newly created\n RTCSessionDescriptionInit
dictionary with its\n type
member initialized\n to the string \"offer
\" and its\n sdp
member initialized to\n sdpString.\n
\n Let offer be a newly created\n RTCSessionDescriptionInit
dictionary with its\n type
member initialized\n to the string \"offer
\" and its\n sdp
member initialized to\n sdpString.\n
\n Set the [[LastCreatedOffer]]
internal slot to\n sdpString.\n
\n Set the [[LastCreatedOffer]]
internal slot to\n sdpString.\n
\n Resolve p with offer.\n
" + "html": "\n Resolve p with offer.\n
" } ] }, @@ -1207,33 +953,33 @@ "name": "RTCPeerConnection/createAnswer()", "href": "https://www.w3.org/TR/webrtc/#dom-rtcpeerconnection-createanswer", "html": "When the method is called, the user agent MUST run the\n following steps:", - "rationale": "let", + "rationale": ".algorithm", "steps": [ { - "html": "\n Let connection be the RTCPeerConnection
\n object on which the method was invoked.\n
\n Let connection be the RTCPeerConnection
\n object on which the method was invoked.\n
\n If connection.[[IsClosed]]
is\n true
, return a promise rejected with\n a newly created InvalidStateError
.\n
\n If connection.[[IsClosed]]
is\n true
, return a promise rejected with\n a newly created InvalidStateError
.\n
\n Return the result of chaining the result of creating an answer with connection to\n connection's operations chain.\n
" + "html": "\n Return the result of chaining the result of creating an answer with connection to\n connection's operations chain.\n
" } ] }, { "name": "creating an answer", "href": "https://www.w3.org/TR/webrtc/#dfn-creating-an-answer", - "html": "To create an answer\n given connection run the following steps:", - "rationale": "if", + "html": "To create an answer\n given connection run the following steps:", + "rationale": ".algorithm", "steps": [ { - "html": "\n If connection's signaling state is\n neither \"have-remote-offer
\" nor\n \"have-local-pranswer
\", return a\n promise rejected with a newly created InvalidStateError
.\n
\n If connection.[[SignalingState]]
is\n neither \"have-remote-offer
\" nor\n \"have-local-pranswer
\", return a\n promise rejected with a newly created InvalidStateError
.\n
\n Let p be a new promise.\n
" }, { - "html": "\n In parallel, begin the in-parallel steps to create an answer given connection and\n p.\n
" + "html": "\n In parallel, begin the in-parallel steps to create an answer given connection and\n p.\n
" }, { "html": "\n Return p.\n
" @@ -1241,106 +987,87 @@ ] }, { - "name": "in-parallel steps to create an answer", - "href": "https://www.w3.org/TR/webrtc/#dfn-in-parallel-steps-to-create-an-answer", - "html": "The in-parallel steps to create an answer given\n connection and a promise p are as\n follows:", - "rationale": "if", + "name": "answerer's system state", + "href": "https://www.w3.org/TR/webrtc/#dfn-answerer-s-system-state", + "html": "The in-parallel steps to create an answer given\n connection and a promise p are as\n follows:", + "rationale": ".algorithm", "steps": [ { "html": "\n If connection was not constructed with a set\n of certificates, and one has not yet been generated,\n wait for it to be generated.\n
" }, { - "html": "\n Inspect the answerer's system state to\n determine the currently available resources as\n necessary for generating the answer, as described in\n [RFC8829] (section 4.1.9.).\n
" + "html": "\n Inspect the answerer's system state to\n determine the currently available resources as\n necessary for generating the answer, as described in\n [RFC9429] (section 4.1.9.).\n
" }, { - "html": "\n If this inspection failed for any reason, reject\n p with a newly created\n OperationError
and abort these steps.\n
\n If this inspection failed for any reason, reject\n p with a newly created\n OperationError
and abort these steps.\n
\n Queue a task that runs the final steps to create an answer given p.\n
" + "html": "\n Queue a task that runs the final steps to create an answer given p.\n
" } ] }, { "name": "final steps to create an answer", "href": "https://www.w3.org/TR/webrtc/#dfn-final-steps-to-create-an-answer", - "html": "The final steps to create an answer given a\n promise p are as follows:", - "rationale": "if", + "html": "The final steps to create an answer given a\n promise p are as follows:", + "rationale": ".algorithm", "steps": [ { - "html": "\n If connection.[[IsClosed]]
is\n true
, then abort these steps.\n
\n If connection.[[IsClosed]]
is\n true
, then abort these steps.\n
\n If connection was modified in such a way\n that additional inspection of the answerer's system state is necessary, then in parallel begin the in-parallel steps to create an answer again given\n connection and p, and abort these\n steps.\n
" + "html": "\n If connection was modified in such a way\n that additional inspection of the answerer's system state is necessary, then in parallel begin the in-parallel steps to create an answer again given\n connection and p, and abort these\n steps.\n
" }, { + "html": "Given the information that was obtained from previous\n inspection and the current state of\n connection and itsRTCRtpTransceiver
s,\n generate an SDP answer, sdpString, as\n described in [RFC9429] (section 5.3.).",
"rationale": "if",
"steps": [
{
- "html": "The codec preferences of an m= section's\n associated transceiver is said to be the value of\n the\n RTCRtpTransceiver
.[[PreferredCodecs]]\n with the following filtering applied (or said not\n to be set if [[PreferredCodecs]] is empty):",
+ "html": "The codec preferences of an m= section's\n
RTCRtpTransceiver
[[PreferredCodecs]]
\n with the following filtering applied (or said not\n to be set [[PreferredCodecs]]
\n If the
is\n \"direction
\",\n exclude any codecs not included in the\n intersection of\n sendrecv
.RTCRtpSender
(kind).getCapabilities
\n and\n codecs
.RTCRtpReceiver
(kind).getCapabilities
.\n codecs
\n If the
is\n \"direction
\",\n exclude any codecs not included in the\n intersection of\n sendrecv
.RTCRtpSender
(kind).getCapabilities
\n and\n codecs
.RTCRtpReceiver
(kind).getCapabilities
.\n codecs
Let kind be transceiver's\n [[Receiver]]
's\n [[ReceiverTrack]]
's\n kind
.
\n If the
is\n \"direction
\",\n exclude any codecs not included in\n sendonly
.RTCRtpSender
(kind).getCapabilities
.\n codecs
\n If the If\n transceiver.direction
is\n \n is \"sendonly
\"\n or \"sendrecv
\",\n exclude any codecs not included in\n in the\n list of implemented send codecs for\n kind.\n
.RTCRtpSender
(kind).getCapabilities
\n If the
is\n \"direction
\",\n exclude any codecs not included in\n recvonly
.RTCRtpReceiver
(kind).getCapabilities
.\n codecs
\n If the If\n transceiver.direction
is\n \n is \"recvonly
\"\n or \"sendrecv
\",\n exclude any codecs not included in\n in the\n list of implemented receive codecs for\n kind.\n
.RTCRtpReceiver
(kind).getCapabilities
\n If the length of the [[SendEncodings]] slot\n of the
is larger than 1, then for\n each encoding given in [[SendEncodings]] of\n the RTCRtpSender
, add an RTCRtpSender
a=rid send
line to the corresponding\n media section, and add an a=simulcast:send
line giving the RIDs\n in the same order as given in the\n
field. No RID\n restrictions are set.\n encodings
\n Given the information that was obtained from previous\n inspection and the current state of\n connection and its RTCRtpTransceiver
s,\n generate an SDP answer, sdpString, as\n described in [RFC8829] (section 5.3.).\n
\n If the length of the [[SendEncodings]] slot\n of the
is larger than 1, then for\n each encoding given in [[SendEncodings]] of\n the RTCRtpSender
, add an RTCRtpSender
a=rid send
line to the corresponding\n media section, and add an a=simulcast:send
line giving the RIDs\n in the same order as given in the\n
field. No RID\n restrictions are set.\n encodings
RTCRtpTransceiver
.[[PreferredCodecs]]
\n with the following filtering applied (or said not\n to be set if [[PreferredCodecs]]
is empty):",
- "rationale": "if",
- "steps": [
- {
- "html": "\n If the direction
is\n \"sendrecv
\",\n exclude any codecs not included in the\n intersection of\n RTCRtpSender
.getCapabilities
(kind).codecs
\n and\n RTCRtpReceiver
.getCapabilities
(kind).codecs
.\n
\n If the direction
is\n \"sendonly
\",\n exclude any codecs not included in\n RTCRtpSender
.getCapabilities
(kind).codecs
.\n
\n If the direction
is\n \"recvonly
\",\n exclude any codecs not included in\n RTCRtpReceiver
.getCapabilities
(kind).codecs
.\n
\n If the a=simulcast
\n attribute contains comma-separated alternatives\n for RIDs, remove all but the first ones.\n
\n If the a=simulcast
\n attribute contains comma-separated alternatives\n for RIDs, remove all but the first ones.\n
\n If there are any identically named RIDs in the\n a=simulcast
attribute,\n remove all but the first one. No RID\n restrictions are set.\n
\n Exclude from the media section in the answer any\n RID not found in the corresponding transceiver's\n [[Sender]]
.[[SendEncodings]]
.\n
\n
" - } - ] + "html": "\n If there are any identically named RIDs in the\n a=simulcast
attribute,\n remove all but the first one. No RID\n restrictions are set.\n
\n Exclude from the media section in the answer any\n RID not found in the corresponding transceiver's\n [[Sender]]
.[[SendEncodings]]
.\n
\n
" } ] } ] }, { - "html": "\n Let answer be a newly created\n RTCSessionDescriptionInit
dictionary with its\n type
member initialized\n to the string \"answer
\" and its\n sdp
member initialized to\n sdpString.\n
\n Let answer be a newly created\n RTCSessionDescriptionInit
dictionary with its\n type
member initialized\n to the string \"answer
\" and its\n sdp
member initialized to\n sdpString.\n
\n Set the [[LastCreatedAnswer]]
internal slot to\n sdpString.\n
\n Set the [[LastCreatedAnswer]]
internal slot to\n sdpString.\n
\n Resolve p with answer.\n
" + "html": "\n Resolve p with answer.\n
" } ] }, @@ -1348,65 +1075,65 @@ "name": "RTCPeerConnection/setLocalDescription()", "href": "https://www.w3.org/TR/webrtc/#dom-peerconnection-setlocaldescription", "html": "When the method is invoked, the user agent MUST run the\n following steps:", - "rationale": "let", + "rationale": ".algorithm", "steps": [ { "html": "\n Let description be the method's first\n argument.\n
" }, { - "html": "\n Let connection be the RTCPeerConnection
\n object on which the method was invoked.\n
\n Let connection be the RTCPeerConnection
\n object on which the method was invoked.\n
\n Let sdp be\n description.sdp
.\n
\n Let sdp be\n description.sdp
.\n
\n Let type be\n description.type
\n if present, or \"offer
\" if not\n present and connection's signaling state is either \"stable
\",\n \"have-local-offer
\", or\n \"have-remote-pranswer
\";\n otherwise \"answer
\".\n
\n Let type be\n description.type
\n if present, or \"offer
\" if not\n present and\n connection.[[SignalingState]]
\n is either \"stable
\",\n \"have-local-offer
\", or\n \"have-remote-pranswer
\";\n otherwise \"answer
\".\n
\n If type is \"offer
\", and\n sdp is not the empty string and not\n equal to\n connection.[[LastCreatedOffer]]
,\n then return a promise rejected with a newly\n created\n InvalidModificationError
and abort these steps.\n
\n If type is \"offer
\", and\n sdp is not the empty string and not\n equal to\n connection.[[LastCreatedOffer]]
,\n then return a promise rejected with a newly\n created\n InvalidModificationError
and abort these steps.\n
\n If type is \"answer
\" or\n \"pranswer
\", and sdp is\n not the empty string and not equal to\n connection.[[LastCreatedAnswer]]
,\n then return a promise rejected with a newly\n created\n InvalidModificationError
and abort these steps.\n
\n If type is \"answer
\" or\n \"pranswer
\", and sdp is\n not the empty string and not equal to\n connection.[[LastCreatedAnswer]]
,\n then return a promise rejected with a newly\n created\n InvalidModificationError
and abort these steps.\n
offer
\", then run\n the following sub steps:",
+ "html": "If sdp is the empty string, and\n type is \"offer
\", then run\n the following sub steps:",
"rationale": "set",
"steps": [
{
- "html": "\n Set sdp to the value of\n connection.[[LastCreatedOffer]]
.\n
\n Set sdp to the value of\n connection.[[LastCreatedOffer]]
.\n
\n If sdp is the empty string, or if it\n no longer accurately represents the offerer's system state of\n connection, then let p be\n the result of creating an offer with\n connection, and return the result of\n reacting to p with a\n fulfillment step that sets the local session description indicated by its first\n argument.\n
" + "html": "\n If sdp is the empty string, or if it\n no longer accurately represents the offerer's system state of\n connection, then let p be\n the result of creating an offer with\n connection, and return the result of\n reacting to p with a\n fulfillment step that sets the local session description indicated by its first\n argument.\n
" } ] }, { - "html": "If sdp is the empty string, and\n type is \"answer
\" or\n \"pranswer
\", then run the following\n sub steps:",
+ "html": "If sdp is the empty string, and\n type is \"answer
\" or\n \"pranswer
\", then run the following\n sub steps:",
"rationale": "set",
"steps": [
{
- "html": "\n Set sdp to the value of\n connection.[[LastCreatedAnswer]]
.\n
\n Set sdp to the value of\n connection.[[LastCreatedAnswer]]
.\n
\n Let answer be the first argument\n to these fulfillment steps.\n
" }, { - "html": "\n Return the result of setting the local session description indicated by\n {type,\n answer.
.\n sdp
}
\n Return the result of setting the local session description indicated by\n {type,\n answer.
.\n sdp
}
\n Return the result of setting the local session description indicated by {type, sdp}
.\n
\n Return the result of setting the local session description indicated by {type, sdp}
.\n
\n Let description be the method's first\n argument.\n
" }, { - "html": "\n Let connection be the RTCPeerConnection
\n object on which the method was invoked.\n
\n Let connection be the RTCPeerConnection
\n object on which the method was invoked.\n
type
\n is \"offer
\" and is invalid for the\n current signaling state of\n connection as described in\n [RFC8829] (section 5.5. and section 5.6.),\n then run the following sub steps:",
+ "html": "If\n description.type
\n is \"offer
\" and is invalid for the\n current\n connection.[[SignalingState]]
\n as described in\n [RFC9429] (section 5.5. and section 5.6.),\n then run the following sub steps:",
"rationale": "let",
"steps": [
{
- "html": "\n Let p be the result of setting the local session description indicated by\n {type:\n \"
.\n rollback
\"}
\n Let p be the result of setting the local session description indicated by\n {type:\n \"
.\n rollback
\"}
\n Return the result of reacting to\n p with a fulfillment step that sets the remote session description\n description, and abort these steps.\n
" + "html": "\n Return the result of reacting to\n p with a fulfillment step that sets the remote session description\n description, and abort these steps.\n
" } ] }, { - "html": "\n Return the result of setting the remote session description description.\n
" + "html": "\n Return the result of setting the remote session description description.\n
" } ] } @@ -1450,54 +1177,54 @@ { "name": "RTCPeerConnection/addIceCandidate()", "href": "https://www.w3.org/TR/webrtc/#dom-peerconnection-addicecandidate", - "html": "TheaddIceCandidate
method provides a remote candidate\n to the ICE Agent. This method can also be used to\n indicate the end of remote candidates when called with an\n empty string for the candidate
member.\n The only members of the argument used by this method are\n candidate
, sdpMid
,\n sdpMLineIndex
, and\n usernameFragment
; the rest are ignored.\n When the method is invoked, the user agent MUST run the\n following steps:",
- "rationale": "let",
+ "html": "The addIceCandidate
method provides a remote candidate\n to the ICE Agent. This method can also be used to\n indicate the end of remote candidates when called with an\n empty string for the candidate
member.\n The only members of the argument used by this method are\n candidate
, sdpMid
,\n sdpMLineIndex
, and\n usernameFragment
; the rest are ignored.\n When the method is invoked, the user agent MUST run the\n following steps:",
+ "rationale": ".algorithm",
"steps": [
{
"html": "\n Let candidate be the method's argument.\n
" }, { - "html": "\n Let connection be the RTCPeerConnection
\n object on which the method was invoked.\n
\n Let connection be the RTCPeerConnection
\n object on which the method was invoked.\n
\n If candidate.candidate
\n is not an empty string and both\n candidate.sdpMid
and\n candidate.sdpMLineIndex
\n are null
, return a promise rejected\n with a newly created TypeError
.\n
\n If candidate.candidate
\n is not an empty string and both\n candidate.sdpMid
and\n candidate.sdpMLineIndex
\n are null
, return a promise rejected\n with a newly created TypeError
.\n
\n If remoteDescription
is\n null
return a promise rejected\n with a newly created\n InvalidStateError
.\n
\n If remoteDescription
is\n null
return a promise rejected\n with a newly created\n InvalidStateError
.\n
sdpMid
\n is not null
, run the following steps:",
+ "html": "If candidate.sdpMid
\n is not null
, run the following steps:",
"rationale": "if",
"steps": [
{
- "html": "\n If\n candidate.sdpMid
\n is not equal to the mid of any media\n description in\n remoteDescription
, return\n a promise rejected with a newly created OperationError
.\n
\n If\n candidate.sdpMid
\n is not equal to the mid of any media\n description in\n remoteDescription
, return\n a promise rejected with a newly created OperationError
.\n
sdpMLineIndex
\n is not null
, run the following steps:",
+ "html": "Else, if\n candidate.sdpMLineIndex
\n is not null
, run the following steps:",
"rationale": "if",
"steps": [
{
- "html": "\n If\n candidate.sdpMLineIndex
\n is equal to or larger than the number of media\n descriptions in\n remoteDescription
, return\n a promise rejected with a newly created OperationError
.\n
\n If\n candidate.sdpMLineIndex
\n is equal to or larger than the number of media\n descriptions in\n remoteDescription
, return\n a promise rejected with a newly created OperationError
.\n
\n If either\n candidate.sdpMid
or\n candidate.sdpMLineIndex
\n indicate a media description in\n remoteDescription
whose\n associated transceiver is stopped
, return a promise resolved with\n undefined
.\n
\n If either\n candidate.sdpMid
or\n candidate.sdpMLineIndex
\n indicate a media description in\n remoteDescription
whose\n associated transceiver is stopped
, return a promise resolved with\n undefined
.\n
\n If\n candidate.usernameFragment
\n is not null
, and is not equal to any\n username fragment present in the corresponding media description of an applied remote\n description, return a promise rejected with a\n newly created OperationError
.\n
\n If\n candidate.usernameFragment
\n is not null
, and is not equal to any\n username fragment present in the corresponding media description of an applied remote\n description, return a promise rejected with a\n newly created OperationError
.\n
\n Let p be a new promise.\n
" }, { - "html": "If\n candidate.candidate
\n is an empty string, process candidate as\n an end-of-candidates indication for the\n corresponding media description and ICE\n candidate generation. If both\n candidate.sdpMid
and\n candidate.sdpMLineIndex
\n are null
, then this end-of-candidates\n indication applies to all media descriptions.",
+ "html": "If\n candidate.candidate
\n is an empty string, process candidate as\n an end-of-candidates indication for the\n corresponding media description and ICE\n candidate generation. If both\n candidate.sdpMid
and\n candidate.sdpMLineIndex
\n are null
, then this end-of-candidates\n indication applies to all media descriptions.",
"rationale": "if",
"steps": [
{
@@ -1505,28 +1232,28 @@
"rationale": "if",
"steps": [
{
- "html": "\n If\n connection.[[IsClosed]]
\n is true
, then abort these\n steps.\n
\n If\n connection.[[IsClosed]]
\n is true
, then abort these\n steps.\n
\n Reject p with a newly created OperationError
and\n abort these steps.\n
\n Reject p with a newly created OperationError
and\n abort these steps.\n
\n If\n connection.[[IsClosed]]
\n is true
, then abort these\n steps.\n
\n If\n connection.[[IsClosed]]
\n is true
, then abort these\n steps.\n
\n If\n connection.[[PendingRemoteDescription]]
\n is not null
, and represents\n the ICE generation for which\n candidate was processed, add\n candidate to\n connection.[[PendingRemoteDescription]]
.sdp.\n
\n If\n connection.[[PendingRemoteDescription]]
\n is not null
, and represents\n the ICE generation for which\n candidate was processed, add\n candidate to\n connection.[[PendingRemoteDescription]]
.sdp.\n
\n If\n connection.[[CurrentRemoteDescription]]
\n is not null
, and represents\n the ICE generation for which\n candidate was processed, add\n candidate to\n connection.[[CurrentRemoteDescription]]
.sdp.\n
\n If\n connection.[[CurrentRemoteDescription]]
\n is not null
, and represents\n the ICE generation for which\n candidate was processed, add\n candidate to\n connection.[[CurrentRemoteDescription]]
.sdp.\n
\n Resolve p with\n undefined
.\n
\n Resolve p with\n undefined
.\n
\n Let connection be the RTCPeerConnection
\n on which the method was invoked.\n
\n Let connection be the RTCPeerConnection
\n on which the method was invoked.\n
\n Empty\n connection.[[LocalIceCredentialsToReplace]]
,\n and populate it with all ICE credentials (ice-ufrag and\n ice-pwd as defined in section 15.4 of [RFC5245]) found\n in\n connection.[[CurrentLocalDescription]]
,\n as well as all ICE credentials found in\n connection.[[PendingLocalDescription]]
.\n
\n Empty\n connection.[[LocalIceCredentialsToReplace]]
,\n and populate it with all ICE credentials (ice-ufrag and\n ice-pwd as defined in section 15.4 of [RFC5245]) found\n in\n connection.[[CurrentLocalDescription]]
,\n as well as all ICE credentials found in\n connection.[[PendingLocalDescription]]
.\n
\n Update the negotiation-needed flag for\n connection.\n
" + "html": "\n Update the negotiation-needed flag for\n connection.\n
" } ] }, { "name": "RTCPeerConnection/setConfiguration()", "href": "https://www.w3.org/TR/webrtc/#dom-rtcpeerconnection-setconfiguration", - "html": "When thesetConfiguration
method is invoked, the user\n agent MUST run the following steps:",
+ "html": "When the setConfiguration
method is invoked, the user\n agent MUST run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let connection be the RTCPeerConnection
\n on which the method was invoked.\n
\n Let connection be the RTCPeerConnection
\n on which the method was invoked.\n
\n If connection.[[IsClosed]]
is\n true
, throw an\n InvalidStateError
.\n
\n If connection.[[IsClosed]]
is\n true
, throw an\n InvalidStateError
.\n
\n Set the configuration specified by\n configuration.\n
" + "html": "\n Set the configuration specified by\n configuration.\n
" } ] }, { "name": "RTCPeerConnection/close()", "href": "https://www.w3.org/TR/webrtc/#dom-rtcpeerconnection-close", - "html": "When theclose
method is invoked, the user agent MUST\n run the following steps:",
+ "html": "When the close
method is invoked, the user agent MUST\n run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let connection be the RTCPeerConnection
\n object on which the method was invoked.\n
\n Let connection be the RTCPeerConnection
\n object on which the method was invoked.\n
false
."
+ "html": "close the connection with\n connection and the value false
."
}
]
},
{
"name": "close the connection",
"href": "https://www.w3.org/TR/webrtc/#dfn-close-the-connection",
- "html": "The close the connection algorithm given a\n connection and a disappear boolean,\n is as follows:",
+ "html": "The close the connection algorithm given a\n connection and a disappear boolean,\n is as follows:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n Set connection.[[IsClosed]]
to\n true
.\n
\n Set connection.[[IsClosed]]
to\n true
.\n
\n Set connection's signaling state to\n \"closed
\". This does not fire any\n event.\n
\n Set connection.[[SignalingState]]
to\n \"closed
\". This does not fire any\n event.\n
CollectTransceivers
algorithm. For every\n RTCRtpTransceiver
transceiver in\n transceivers, run the following steps:",
+ "html": "Let transceivers be the result of executing\n the CollectTransceivers
algorithm. For every\n RTCRtpTransceiver
transceiver in\n transceivers, run the following steps:",
"rationale": "if",
"steps": [
{
- "html": "\n If transceiver.[[Stopped]]
is\n true
, abort these sub steps.\n
\n If transceiver.[[Stopped]]
is\n true
, abort these sub steps.\n
\n Stop the RTCRtpTransceiver with\n transceiver and disappear.\n
" + "html": "\n Stop the RTCRtpTransceiver with\n transceiver and disappear.\n
" } ] }, { - "html": "\n Set the [[ReadyState]]
slot of each of\n connection's RTCDataChannel
s to\n \"closed
\".\n
\n Set the [[ReadyState]]
slot of each of\n connection's RTCDataChannel
s to\n \"closed
\".\n
\n If connection.[[SctpTransport]]
is\n not null
, tear down the underlying SCTP\n association by sending an SCTP ABORT chunk and set the\n [[SctpTransportState]]
to\n \"closed
\".\n
\n If connection.[[SctpTransport]]
is\n not null
, tear down the underlying SCTP\n association by sending an SCTP ABORT chunk and set the\n [[SctpTransportState]]
to\n \"closed
\".\n
\n Set the [[DtlsTransportState]]
slot of each of\n connection's RTCDtlsTransport
s to\n \"closed
\".\n
\n Set the [[DtlsTransportState]]
slot of each of\n connection's RTCDtlsTransport
s to\n \"closed
\".\n
\n Destroy connection's ICE Agent,\n abruptly ending any active ICE processing and releasing\n any relevant resources (e.g. TURN permissions).\n
" + "html": "\n Destroy connection's ICE Agent,\n abruptly ending any active ICE processing and releasing\n any relevant resources (e.g. TURN permissions).\n
" }, { - "html": "\n Set the [[IceTransportState]]
slot of each of\n connection's RTCIceTransport
s to\n \"closed
\".\n
\n Set the [[IceTransportState]]
slot of each of\n connection's RTCIceTransport
s to\n \"closed
\".\n
\n Set connection's ICE connection state\n to \"closed
\". This does not\n fire any event.\n
\n Set\n connection.[[IceConnectionState]]
\n to \"closed
\". This does not\n fire any event.\n
\n Set connection's connection state to\n \"closed
\". This does not fire\n any event.\n
\n Set connection.[[ConnectionState]]
to\n \"closed
\". This does not fire\n any event.\n
\n Let options be the callback indicated by\n the method's third argument.\n
" }, { - "html": "\n Run the steps specified by RTCPeerConnection
's\n createOffer
()
method with\n options as the sole argument, and let\n p be the resulting promise.\n
\n Run the steps specified by RTCPeerConnection
's\n createOffer
()
method with\n options as the sole argument, and let\n p be the resulting promise.\n
\n Upon fulfillment of p with value\n offer, invoke successCallback\n with offer as the argument.\n
" + "html": "\n Upon fulfillment of p with value\n offer, invoke successCallback\n with offer as the argument.\n
" }, { - "html": "\n Upon rejection of p with reason\n r, invoke failureCallback with\n r as the argument.\n
" + "html": "\n Upon rejection of p with reason\n r, invoke failureCallback with\n r as the argument.\n
" }, { - "html": "\n Return a promise resolved with\n undefined
.\n
\n Return a promise resolved with\n undefined
.\n
\n Let failureCallback be the callback\n indicated by the method's third argument.\n
" }, { - "html": "\n Run the steps specified by RTCPeerConnection
's\n setLocalDescription
method with\n description as the sole argument, and let\n p be the resulting promise.\n
\n Run the steps specified by RTCPeerConnection
's\n setLocalDescription
method with\n description as the sole argument, and let\n p be the resulting promise.\n
\n Upon fulfillment of p, invoke\n successCallback with\n undefined
as the argument.\n
\n Upon fulfillment of p, invoke\n successCallback with\n undefined
as the argument.\n
\n Upon rejection of p with reason\n r, invoke failureCallback with\n r as the argument.\n
" + "html": "\n Upon rejection of p with reason\n r, invoke failureCallback with\n r as the argument.\n
" }, { - "html": "\n Return a promise resolved with\n undefined
.\n
\n Return a promise resolved with\n undefined
.\n
\n Let failureCallback be the callback\n indicated by the method's second argument.\n
" }, { - "html": "\n Run the steps specified by RTCPeerConnection
's\n createAnswer
()
method with no\n arguments, and let p be the resulting\n promise.\n
\n Run the steps specified by RTCPeerConnection
's\n createAnswer
()
method with no\n arguments, and let p be the resulting\n promise.\n
\n Upon fulfillment of p with value\n answer, invoke successCallback\n with answer as the argument.\n
" + "html": "\n Upon fulfillment of p with value\n answer, invoke successCallback\n with answer as the argument.\n
" }, { - "html": "\n Upon rejection of p with reason\n r, invoke failureCallback with\n r as the argument.\n
" + "html": "\n Upon rejection of p with reason\n r, invoke failureCallback with\n r as the argument.\n
" }, { - "html": "\n Return a promise resolved with\n undefined
.\n
\n Return a promise resolved with\n undefined
.\n
\n Let failureCallback be the callback\n indicated by the method's third argument.\n
" }, { - "html": "\n Run the steps specified by RTCPeerConnection
's\n setRemoteDescription
method\n with description as the sole argument, and\n let p be the resulting promise.\n
\n Run the steps specified by RTCPeerConnection
's\n setRemoteDescription
method\n with description as the sole argument, and\n let p be the resulting promise.\n
\n Upon fulfillment of p, invoke\n successCallback with\n undefined
as the argument.\n
\n Upon fulfillment of p, invoke\n successCallback with\n undefined
as the argument.\n
\n Upon rejection of p with reason\n r, invoke failureCallback with\n r as the argument.\n
" + "html": "\n Upon rejection of p with reason\n r, invoke failureCallback with\n r as the argument.\n
" }, { - "html": "\n Return a promise resolved with\n undefined
.\n
\n Return a promise resolved with\n undefined
.\n
\n Let failureCallback be the callback\n indicated by the method's third argument.\n
" }, { - "html": "\n Run the steps specified by RTCPeerConnection
's\n addIceCandidate
()
method with\n candidate as the sole argument, and let\n p be the resulting promise.\n
\n Run the steps specified by RTCPeerConnection
's\n addIceCandidate
()
method with\n candidate as the sole argument, and let\n p be the resulting promise.\n
\n Upon fulfillment of p, invoke\n successCallback with\n undefined
as the argument.\n
\n Upon fulfillment of p, invoke\n successCallback with\n undefined
as the argument.\n
\n Upon rejection of p with reason\n r, invoke failureCallback with\n r as the argument.\n
" + "html": "\n Upon rejection of p with reason\n r, invoke failureCallback with\n r as the argument.\n
" }, { - "html": "\n Return a promise resolved with\n undefined
.\n
\n Return a promise resolved with\n undefined
.\n
createOffer
is called with any of the\n legacy options specified in this section, run the followings\n steps instead of the regular createOffer
\n steps:",
+ "html": "When createOffer
is called with any of the\n legacy options specified in this section, run the followings\n steps instead of the regular createOffer
\n steps:",
"rationale": ".algorithm",
"steps": [
{
"html": "\n Let options be the methods first argument.\n
" }, { - "html": "\n Let connection be the current\n RTCPeerConnection
object.\n
\n Let connection be the current\n RTCPeerConnection
object.\n
offerToReceive<Kind>
\n member in options with kind, kind, run\n the following steps:",
- "rationale": "if",
+ "rationale": ".algorithm",
"steps": [
{
"html": "If the value of the dictionary member is false,",
"rationale": "for",
"steps": [
{
- "html": "\n For each non-stopped\n \"sendrecv
\" transceiver\n of transceiver kind kind, set\n transceiver.[[Direction]]
to\n \"sendonly
\".\n
\n For each non-stopped\n \"sendrecv
\" transceiver\n of transceiver kind kind, set\n transceiver.[[Direction]]
to\n \"sendonly
\".\n
\n For each non-stopped\n \"recvonly
\" transceiver\n of transceiver kind kind, set\n transceiver.[[Direction]]
to\n \"inactive
\".\n
\n For each non-stopped\n \"recvonly
\" transceiver\n of transceiver kind kind, set\n transceiver.[[Direction]]
to\n \"inactive
\".\n
\n If connection has any non-stopped\n \"sendrecv
\" or\n \"recvonly
\" transceivers of\n transceiver kind kind, continue with the\n next option, if any.\n
\n If connection has any non-stopped\n \"sendrecv
\" or\n \"recvonly
\" transceivers of\n transceiver kind kind, continue with the\n next option, if any.\n
\n Let transceiver be the result of invoking the\n equivalent of\n connection.addTransceiver
(kind),\n except that this operation MUST NOT update the negotiation-needed flag.\n
\n Let transceiver be the result of invoking the\n equivalent of\n connection.addTransceiver
(kind),\n except that this operation MUST NOT update the negotiation-needed flag.\n
\n If transceiver is unset because the previous\n operation threw an error, abort these steps.\n
" }, { - "html": "\n Set transceiver.[[Direction]]
to\n \"recvonly
\".\n
\n Set transceiver.[[Direction]]
to\n \"recvonly
\".\n
\n Run the steps specified by createOffer
\n to create the offer.\n
\n Run the steps specified by createOffer
\n to create the offer.\n
\n If the length of connection.[[Operations]]
\n is not 0
, then set\n connection.[[UpdateNegotiationNeededFlagOnEmptyChain]]
\n to true
, and abort these steps.\n
\n If the length of connection.[[Operations]]
\n is not 0
, then set\n connection.[[UpdateNegotiationNeededFlagOnEmptyChain]]
\n to true
, and abort these steps.\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n If the length of\n connection.[[Operations]]
is not\n 0
, then set\n connection.[[UpdateNegotiationNeededFlagOnEmptyChain]]
\n to true
, and abort these steps.\n
\n If the length of\n connection.[[Operations]]
is not\n 0
, then set\n connection.[[UpdateNegotiationNeededFlagOnEmptyChain]]
\n to true
, and abort these steps.\n
\n If connection's signaling state is not\n \"stable
\", abort these steps.\n
\n If connection.[[SignalingState]]
is not\n \"stable
\", abort these steps.\n
\n If the result of checking if negotiation is needed is false
,\n clear the negotiation-needed flag by setting\n connection.[[NegotiationNeeded]]
to\n false
, and abort these steps.\n
\n If the result of checking if negotiation is needed is false
,\n clear the negotiation-needed flag by setting\n connection.[[NegotiationNeeded]]
to\n false
, and abort these steps.\n
\n If connection.[[NegotiationNeeded]]
is\n already true
, abort these steps.\n
\n If connection.[[NegotiationNeeded]]
is\n already true
, abort these steps.\n
\n Set connection.[[NegotiationNeeded]]
to\n true
.\n
\n Set connection.[[NegotiationNeeded]]
to\n true
.\n
\n Fire an event named negotiationneeded
at\n connection.\n
\n Fire an event named negotiationneeded
at\n connection.\n
\n If any implementation-specific negotiation is required, as\n described at the start of this section, return\n true
.\n
\n If\n connection.[[LocalIceCredentialsToReplace]]
\n is not empty, return true
.\n
\n If\n connection.[[LocalIceCredentialsToReplace]]
\n is not empty, return true
.\n
\n Let description be\n connection.[[CurrentLocalDescription]]
.\n
\n Let description be\n connection.[[CurrentLocalDescription]]
.\n
\n If connection has created any RTCDataChannel
s,\n and no m= section in description has been negotiated\n yet for data, return true
.\n
\n If connection has created any RTCDataChannel
s,\n and no m= section in description has been negotiated\n yet for data, return true
.\n
\n If transceiver.[[Stopping]]
is\n true
and\n transceiver.[[Stopped]]
is\n false
, return true
.\n
\n If transceiver.[[Stopping]]
is\n true
and\n transceiver.[[Stopped]]
is\n false
, return true
.\n
\n If transceiver isn't stopped
and isn't yet associated with an m= section\n in description, return true
.\n
\n If transceiver isn't stopped
and isn't yet associated with an m= section\n in description, return true
.\n
stopped
and is associated with an m= section in\n description then perform the following checks:",
+ "html": "If transceiver isn't stopped
and is associated with an m= section in\n description then perform the following checks:",
"rationale": "if",
"steps": [
{
- "html": "\n If transceiver.[[Direction]]
is\n \"sendrecv
\" or\n \"sendonly
\", and the associated m= section in description\n either doesn't contain a single a=msid
line, or the number of MSIDs from\n the a=msid
lines in this\n m=
section, or the MSID values\n themselves, differ from what is in\n transceiver.sender.[[AssociatedMediaStreamIds]]
,\n return true
.\n
\n If transceiver.[[Direction]]
is\n \"sendrecv
\" or\n \"sendonly
\", and the associated m= section in description\n either doesn't contain a single a=msid
line, or the number of MSIDs from\n the a=msid
lines in this\n m=
section, or the MSID values\n themselves, differ from what is in\n transceiver.sender.[[AssociatedMediaStreamIds]]
,\n return true
.\n
\n If description is of type\n \"offer
\", and the direction of the associated m= section in neither\n connection.[[CurrentLocalDescription]]
\n nor\n connection.[[CurrentRemoteDescription]]
\n matches transceiver.[[Direction]]
,\n return true
. In this step, when the\n direction is compared with a direction found in\n [[CurrentRemoteDescription]]
, the description's\n direction must be reversed to represent the peer's\n point of view.\n
\n If description is of type\n \"offer
\", and the direction of the associated m= section in neither\n connection.[[CurrentLocalDescription]]
\n nor\n connection.[[CurrentRemoteDescription]]
\n matches transceiver.[[Direction]]
,\n return true
. In this step, when the\n direction is compared with a direction found in\n [[CurrentRemoteDescription]]
, the description's\n direction must be reversed to represent the peer's\n point of view.\n
\n If description is of type\n \"answer
\", and the direction of the associated m= section in the description\n does not match\n transceiver.[[Direction]]
\n intersected with the offered direction (as described in\n [RFC8829] (section 5.3.1.)),\n return true
.\n
\n If description is of type\n \"answer
\", and the direction of the associated m= section in the description\n does not match\n transceiver.[[Direction]]
\n intersected with the offered direction (as described in\n [RFC9429] (section 5.3.1.)),\n return true
.\n
\n If transceiver is stopped
\n and is associated with an m= section, but the\n associated m= section is not yet rejected in\n connection.[[CurrentLocalDescription]]
\n or\n connection.[[CurrentRemoteDescription]]
,\n return true
.\n
\n If transceiver is stopped
\n and is associated with an m= section, but the\n associated m= section is not yet rejected in\n connection.[[CurrentLocalDescription]]
\n or\n connection.[[CurrentRemoteDescription]]
,\n return true
.\n
sdpMid
and\n sdpMLineIndex
members of\n candidateInitDict are null
, throw a TypeError
."
+ "html": "If both\n the sdpMid
and\n sdpMLineIndex
members of\n candidateInitDict are null
, throw a TypeError
."
},
{
- "html": "\n Return the result of creating an RTCIceCandidate\n with candidateInitDict.\n
" + "html": "\n Return the result of creating an RTCIceCandidate\n with candidateInitDict.\n
" } ] }, { "name": "creating an RTCIceCandidate", "href": "https://www.w3.org/TR/webrtc/#dfn-creating-an-rtcicecandidate", - "html": "To create an\n RTCIceCandidate with a candidateInitDict\n dictionary, run the following steps:", + "html": "To create an\n RTCIceCandidate with a candidateInitDict\n dictionary, run the following steps:", "rationale": "let", "steps": [ { - "html": "Let iceCandidate be a newly created\nRTCIceCandidate
object."
+ "html": "Let iceCandidate be a newly created\n RTCIceCandidate
object."
},
{
- "html": "Create internal slots for the following attributes of\n iceCandidate, initilized to null
:\n foundation
, component
, priority
, address
,\n protocol
, port
, type
, tcpType
,\n relatedAddress
, and relatedPort
."
+ "html": "Create internal slots for the following attributes of\n iceCandidate, initilized to null
:\n foundation
, component
, priority
, address
,\n protocol
, port
, type
, tcpType
,\n relatedAddress
, and relatedPort
."
},
{
- "html": "Create internal slots for the following attributes of\n iceCandidate, initilized to their namesakes in\n candidateInitDict: candidate
, sdpMid
,\n sdpMLineIndex
, usernameFragment
."
+ "html": "Create internal slots for the following attributes of\n iceCandidate, initilized to their namesakes in\n candidateInitDict: candidate
, sdpMid
,\n sdpMLineIndex
, usernameFragment
."
},
{
- "html": "Let candidate be the\n candidate
dictionary member of\n candidateInitDict. If candidate is\n not an empty string, run the following steps:",
+ "html": "Let candidate be the\n candidate
dictionary member of\n candidateInitDict. If candidate is\n not an empty string, run the following steps:",
"rationale": "parse",
"steps": [
{
- "html": "Parse candidate using the candidate-attribute
grammar."
+ "html": "Parse candidate using the candidate-attribute
grammar."
},
{
- "html": "If parsing of candidate-attribute
has failed,\n abort these steps."
+ "html": "If parsing of candidate-attribute
has failed,\n abort these steps."
},
{
"html": "If any field in the parse result represents an\n invalid value for the corresponding attribute in \n iceCandidate, abort these steps."
@@ -1970,18 +1697,18 @@
{
"name": "RTCIceCandidate/toJSON()",
"href": "https://www.w3.org/TR/webrtc/#dom-rtcicecandidate-tojson",
- "html": "To invoke the toJSON
()
operation of the\n RTCIceCandidate
interface, run the following steps:",
+ "html": "To invoke the toJSON
()
operation of the\n RTCIceCandidate
interface, run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "Let json be a new\n RTCIceCandidateInit
dictionary."
+ "html": "Let json be a new\n RTCIceCandidateInit
dictionary."
},
{
- "html": "For each attribute identifier\n attr in «candidate
, sdpMid
,\n sdpMLineIndex
, usernameFragment
»:",
+ "html": "For each attribute identifier\n attr in «candidate
, sdpMid
,\n sdpMLineIndex
, usernameFragment
»:",
"rationale": "let",
"steps": [
{
- "html": "Let value be the result of getting the\n underlying value of the attribute identified by\n attr, given this RTCIceCandidate
object."
+ "html": "Let value be the result of getting the\n underlying value of the attribute identified by\n attr, given this RTCIceCandidate
object."
},
{
"html": "Set json[attr]
\n to value."
@@ -2000,7 +1727,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let keygenAlgorithm be the first argument to\n generateCertificate
.\n
\n Let keygenAlgorithm be the first argument to\n generateCertificate
.\n
\n Let expires be a value of\n 2592000000 (30*24*60*60*1000)\n
" @@ -2010,13 +1737,13 @@ "rationale": "let", "steps": [ { - "html": "\n Let certificateExpiration be the result of\n converting\n the ECMAScript object represented by\n keygenAlgorithm to an\n RTCCertificateExpiration
dictionary.\n
\n Let certificateExpiration be the result of\n converting\n the ECMAScript object represented by\n keygenAlgorithm to an\n RTCCertificateExpiration
dictionary.\n
\n If the conversion fails with an error,\n return a promise that is rejected with\n error.\n
" + "html": "\n If the conversion fails with an error,\n return a promise that is rejected with\n error.\n
" }, { - "html": "\n If\n certificateExpiration.expires
\n is not undefined
, set expires\n to\n certificateExpiration.expires
.\n
\n If\n certificateExpiration.expires
\n is not undefined
, set expires\n to\n certificateExpiration.expires
.\n
\n If expires is greater than 31536000000,\n set expires to 31536000000.\n
\n \n\n A user agent MAY further cap the value of\n expires.\n
" @@ -2024,19 +1751,19 @@ ] }, { - "html": "\n Let normalizedKeygenAlgorithm be the result of\n normalizing an\n algorithm with an operation name of generateKey
\n and a supportedAlgorithms\n value specific to production of certificates for\n RTCPeerConnection
.\n
\n Let normalizedKeygenAlgorithm be the result of\n normalizing an\n algorithm with an operation name of generateKey
\n and a supportedAlgorithms\n value specific to production of certificates for\n RTCPeerConnection
.\n
\n If the above normalization step fails with an\n error, return a promise that is rejected\n with error.\n
" + "html": "\n If the above normalization step fails with an\n error, return a promise that is rejected\n with error.\n
" }, { - "html": "\n If the normalizedKeygenAlgorithm parameter\n identifies an algorithm that the user agent cannot\n or will not use to generate a certificate for\n RTCPeerConnection
, return a promise that is rejected with a DOMException
of type\n NotSupportedError
. In particular,\n normalizedKeygenAlgorithm MUST be an\n asymmetric algorithm that can be used to produce a\n signature used to authenticate DTLS connections.\n
\n If the normalizedKeygenAlgorithm parameter\n identifies an algorithm that the user agent cannot\n or will not use to generate a certificate for\n RTCPeerConnection
, return a promise that is rejected with a DOMException
of type\n NotSupportedError
. In particular,\n normalizedKeygenAlgorithm MUST be an\n asymmetric algorithm that can be used to produce a\n signature used to authenticate DTLS connections.\n
\n Let p be a new promise.\n
" }, { - "html": "Run the following steps in parallel:", + "html": "Run the following steps in parallel:", "rationale": "perform", "steps": [ { @@ -2046,22 +1773,22 @@ "html": "\n Let generatedKeyingMaterial and\n generatedKeyCertificate be the private\n keying material and certificate generated by the\n above step.\n
" }, { - "html": "\n Let certificate be a new\n RTCCertificate
object.\n
\n Let certificate be a new\n RTCCertificate
object.\n
\n Set certificate.[[Expires]] to the\n current time plus expires value.\n
" }, { - "html": "\n Set certificate.[[Origin]]
to the\n relevant settings object's\n origin.\n
\n Set certificate.[[Origin]]
to the\n relevant settings object's\n origin.\n
\n Store the generatedKeyingMaterial in a\n secure module, and let handle be a\n reference identifier to it.\n
" }, { - "html": "\n Set certificate.[[KeyingMaterialHandle]]
\n to handle.\n
\n Set certificate.[[KeyingMaterialHandle]]
\n to handle.\n
\n Set certificate.[[Certificate]]
to\n generatedCertificate.\n
\n Set certificate.[[Certificate]]
to\n generatedCertificate.\n
\n Resolve p with certificate.\n
" @@ -2074,85 +1801,49 @@ ] }, { - "html": "RTCCertificate
objects are serializable objects\n [HTML]. Their serialization steps, given value\n and serialized, are:",
- "rationale": "set",
- "steps": [
- {
- "html": "Set serialized.[[Expires]] to the value of\n value.expires
attribute."
- },
- {
- "html": "Set serialized.[[Certificate]] to a copy of the\n unstructured binary data in\n value.[[Certificate]]."
- },
- {
- "html": "Set serialized.[[Origin]] to a copy of the\n unstructured binary data in value.[[Origin]]."
- },
- {
- "html": "Set serialized.[[KeyingMaterialHandle]] to a\n serialization of the handle in\n value.[[KeyingMaterialHandle]] (not the private\n keying material itself)."
- }
- ]
- },
- {
- "html": "Their deserialization steps, given serialized and\n value, are:",
- "rationale": "initialize",
- "steps": [
- {
- "html": "Initialize value.expires
\n attribute to contain serialized.[[Expires]]."
- },
- {
- "html": "Set value.[[Certificate]] to a copy of \n serialized.[[Certificate]]."
- },
- {
- "html": "Set value.[[Origin]] to a copy of\n serialized.[[Origin]]."
- },
- {
- "html": "Set value.[[KeyingMaterialHandle]] to the\n private keying material handle resulting from deserializing\n serialized.[[KeyingMaterialHandle]]."
- }
- ]
- },
- {
- "html": "RTCCertificate
objects are serializable objects\n [HTML]. Their serialization steps, given value\n and serialized, are:",
+ "html": "RTCCertificate
objects are serializable objects\n [HTML]. Their serialization steps, given value\n and serialized, are:",
"rationale": ".algorithm",
"steps": [
{
- "html": "Set serialized.[[Expires]] to the value of\n value.expires
attribute."
+ "html": "Set serialized.[[Expires]] to the value of\n value.expires
attribute."
},
{
- "html": "Set serialized.[[Certificate]] to a copy of the\n unstructured binary data in\n value.[[Certificate]]
."
+ "html": "Set serialized.[[Certificate]] to a copy of the\n unstructured binary data in\n value.[[Certificate]]
."
},
{
- "html": "Set serialized.[[Origin]] to a copy of the\n unstructured binary data in value.[[Origin]]
."
+ "html": "Set serialized.[[Origin]] to a copy of the\n unstructured binary data in value.[[Origin]]
."
},
{
- "html": "Set serialized.[[KeyingMaterialHandle]] to a\n serialization of the handle in\n value.[[KeyingMaterialHandle]]
(not the private\n keying material itself)."
+ "html": "Set serialized.[[KeyingMaterialHandle]] to a\n serialization of the handle in\n value.[[KeyingMaterialHandle]]
(not the private\n keying material itself)."
}
]
},
{
- "html": "Their deserialization steps, given serialized and\n value, are:",
+ "html": "Their deserialization steps, given serialized and\n value, are:",
"rationale": ".algorithm",
"steps": [
{
- "html": "Initialize value.expires
\n attribute to contain serialized.[[Expires]]."
+ "html": "Initialize value.expires
\n attribute to contain serialized.[[Expires]]."
},
{
- "html": "Set value.[[Certificate]]
to a copy of \n serialized.[[Certificate]]"
+ "html": "Set value.[[Certificate]]
to a copy of \n serialized.[[Certificate]][[Origin]]
to a copy of\n serialized.[[Origin]]"
+ "html": "Set value.[[Origin]]
to a copy of\n serialized.[[Origin]][[KeyingMaterialHandle]]
to the\n private keying material handle resulting from deserializing\n serialized.[[KeyingMaterialHandle]]"
+ "html": "Set value.[[KeyingMaterialHandle]]
to the\n private keying material handle resulting from deserializing\n serialized.[[KeyingMaterialHandle]]CollectTransceivers
algorithm."
+ "html": "Let\n transceivers be the result of executing the\n CollectTransceivers
algorithm."
},
{
"html": "Let\n senders be a new empty sequence."
@@ -2162,7 +1853,7 @@
"rationale": "if",
"steps": [
{
- "html": "If\n transceiver.[[Stopped]]
is\n false
, add\n transceiver.[[Sender]]
to\n senders."
+ "html": "If\n transceiver.[[Stopped]]
is\n false
, add\n transceiver.[[Sender]]
to\n senders."
}
]
},
@@ -2174,11 +1865,11 @@
{
"name": "RTCPeerConnection/getReceivers()",
"href": "https://www.w3.org/TR/webrtc/#dom-peerconnection-getreceivers",
- "html": "When the getReceivers
method is invoked, the user agent\n MUST run the following steps:",
+ "html": "When the getReceivers
method is invoked, the user agent\n MUST run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "Let\n transceivers be the result of executing the\n CollectTransceivers
algorithm."
+ "html": "Let\n transceivers be the result of executing the\n CollectTransceivers
algorithm."
},
{
"html": "Let\n receivers be a new empty sequence."
@@ -2188,7 +1879,7 @@
"rationale": "if",
"steps": [
{
- "html": "If transceiver.[[Stopped]]
is\n false
, add\n transceiver.[[Receiver]]
to\n receivers."
+ "html": "If transceiver.[[Stopped]]
is\n false
, add\n transceiver.[[Receiver]]
to\n receivers."
}
]
},
@@ -2200,11 +1891,11 @@
{
"name": "CollectTransceivers",
"href": "https://www.w3.org/TR/webrtc/#dfn-collecttransceivers",
- "html": "We define the CollectTransceivers algorithm as\n follows:",
+ "html": "We define the CollectTransceivers algorithm as\n follows:",
"rationale": ".algorithm",
"steps": [
{
- "html": "Let\n transceivers be a new sequence consisting of all\n RTCRtpTransceiver
objects in this RTCPeerConnection
\n object's set of transceivers, in insertion order."
+ "html": "Let\n transceivers be a new sequence consisting of all\n RTCRtpTransceiver
objects in this RTCPeerConnection
\n object's set of transceivers, in insertion order."
},
{
"html": "Return transceivers."
@@ -2214,51 +1905,51 @@
{
"name": "RTCPeerConnection/addTrack()",
"href": "https://www.w3.org/TR/webrtc/#dom-rtcpeerconnection-addtrack",
- "html": "When the addTrack
method is invoked, the user agent MUST\n run the following steps:",
+ "html": "When the addTrack
method is invoked, the user agent MUST\n run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let connection be the RTCPeerConnection
\n object on which this method was invoked.\n
\n Let connection be the RTCPeerConnection
\n object on which this method was invoked.\n
\n Let track be the MediaStreamTrack
object\n indicated by the method's first argument.\n
\n Let track be the MediaStreamTrack
object\n indicated by the method's first argument.\n
\n Let kind be track.kind.\n
" }, { - "html": "\n Let streams be a list of MediaStream
\n objects constructed from the method's remaining\n arguments, or an empty list if the method was called with\n a single argument.\n
\n Let streams be a list of MediaStream
\n objects constructed from the method's remaining\n arguments, or an empty list if the method was called with\n a single argument.\n
\n If connection.[[IsClosed]]
is\n true
, throw an\n InvalidStateError
.\n
\n If connection.[[IsClosed]]
is\n true
, throw an\n InvalidStateError
.\n
\n Let senders be the result of executing the\n CollectSenders
algorithm. If an RTCRtpSender
for\n track already exists in senders, throw an InvalidAccessError
.\n
\n Let senders be the result of executing the\n CollectSenders
algorithm. If an RTCRtpSender
for\n track already exists in senders, throw an InvalidAccessError
.\n
\n The steps below describe how to determine if an existing\n sender can be reused. Doing so will cause future calls to\n createOffer
and\n createAnswer
to mark the\n corresponding media description as sendrecv
or sendonly
and add the MSID of the sender's\n streams, as defined in [RFC8829] (section 5.2.2. and section 5.3.2.).\n
\n If any RTCRtpSender
object in senders\n matches all the following criteria, let sender\n be that object, or null
otherwise:\n
\n The sender's track is null.\n
\n\n The transceiver kind of the\n RTCRtpTransceiver
, associated with the sender,\n matches kind.\n
\n The [[Stopping]]
slot of the\n RTCRtpTransceiver
associated with the sender is\n false
.\n
\n The sender has never been used to send. More\n precisely, the [[CurrentDirection]]
slot of\n the RTCRtpTransceiver
associated with the sender\n has never had a value of\n \"sendrecv
\" or\n \"sendonly
\".\n
\n The steps below describe how to determine if an existing\n sender can be reused. Doing so will cause future calls to\n createOffer
and\n createAnswer
to mark the\n corresponding media description as sendrecv
or sendonly
and add the MSID of the sender's\n streams, as defined in [RFC9429] (section 5.2.2. and section 5.3.2.).\n
\n If any RTCRtpSender
object in senders\n matches all the following criteria, let sender\n be that object, or null
otherwise:\n
\n The sender's track is null.\n
\n\n The transceiver kind of the\n RTCRtpTransceiver
, associated with the sender,\n matches kind.\n
\n The [[Stopping]]
slot of the\n RTCRtpTransceiver
associated with the sender is\n false
.\n
\n The sender has never been used to send. More\n precisely, the [[CurrentDirection]]
slot of\n the RTCRtpTransceiver
associated with the sender\n has never had a value of\n \"sendrecv
\" or\n \"sendonly
\".\n
null
, run the\n following steps to use that sender:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Set sender.[[SenderTrack]]
to\n track.\n
\n Set sender.[[SenderTrack]]
to\n track.\n
\n Set\n sender.[[AssociatedMediaStreamIds]]
\n to an empty set.\n
\n Set\n sender.[[AssociatedMediaStreamIds]]
\n to an empty set.\n
\n For each stream in streams, add\n stream.id to\n [[AssociatedMediaStreamIds]]
if it's not\n already there.\n
\n For each stream in streams, add\n stream.id to\n [[AssociatedMediaStreamIds]]
if it's not\n already there.\n
\n Let transceiver be the\n RTCRtpTransceiver
associated with\n sender.\n
\n Let transceiver be the\n RTCRtpTransceiver
associated with\n sender.\n
\n If transceiver.[[Direction]]
is\n \"recvonly
\", set\n transceiver.[[Direction]]
to\n \"sendrecv
\".\n
\n If transceiver.[[Direction]]
is\n \"recvonly
\", set\n transceiver.[[Direction]]
to\n \"sendrecv
\".\n
\n If transceiver.[[Direction]]
is\n \"inactive
\", set\n transceiver.[[Direction]]
to\n \"sendonly
\".\n
\n If transceiver.[[Direction]]
is\n \"inactive
\", set\n transceiver.[[Direction]]
to\n \"sendonly
\".\n
\n Create an RTCRtpReceiver with kind,\n and let receiver be the result.\n
" }, { - "html": "\n Create an RTCRtpTransceiver with\n sender, receiver and an\n RTCRtpTransceiverDirection
value of\n \"sendrecv
\", and let\n transceiver be the result.\n
\n Create an RTCRtpTransceiver with\n sender, receiver and an\n RTCRtpTransceiverDirection
value of\n \"sendrecv
\", and let\n transceiver be the result.\n
\n Add transceiver to connection's\n set of transceivers.\n
" + "html": "\n Add transceiver to connection's\n set of transceivers.\n
" } ] }, { - "html": "\n A track could have contents that are inaccessible to the\n application. This can be due to anything that would make\n a track CORS\n cross-origin. These tracks can be supplied to the\n addTrack
()
method, and have an\n RTCRtpSender
created for them, but content MUST NOT\n be transmitted. Silence (audio), black frames (video) or\n equivalently absent content is sent in place of track\n content.\n
\n Note that this property can change over time.\n
" + "html": "\n A track could have contents that are inaccessible to the\n application. This can be due to anything that would make\n a track CORS\n cross-origin. These tracks can be supplied to the\n addTrack
()
method, and have an\n RTCRtpSender
created for them, but content MUST NOT\n be transmitted. Silence (audio), black frames (video) or\n equivalently absent content is sent in place of track\n content.\n
\n Note that this property can change over time.\n
" }, { - "html": "\n Update the negotiation-needed flag for\n connection.\n
" + "html": "\n Update the negotiation-needed flag for\n connection.\n
" }, { "html": "\n Return sender.\n
" @@ -2294,151 +1985,77 @@ { "name": "RTCPeerConnection/removeTrack()", "href": "https://www.w3.org/TR/webrtc/#dom-rtcpeerconnection-removetrack", - "html": "When theremoveTrack
method is invoked, the user agent\n MUST run the following steps:",
+ "html": "When the removeTrack
method is invoked, the user agent\n MUST run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let sender be the argument to removeTrack
.\n
\n Let connection be the RTCPeerConnection
\n object on which the method was invoked.\n
\n If connection.[[IsClosed]]
is\n true
, throw an\n InvalidStateError
.\n
\n If sender was not created by\n connection, throw an\n InvalidAccessError
.\n
\n Let senders be the result of executing the\n CollectSenders
algorithm.\n
\n If sender is not in senders (which\n indicates its transceiver was stopped or removed due to\n setting a session description of\n type
\n \"rollback
\"), then abort these steps.\n
\n If sender.[[SenderTrack]]
is null,\n abort these steps.\n
\n Set sender.[[SenderTrack]]
to null.\n
\n Let transceiver be the RTCRtpTransceiver
\n object corresponding to sender.\n
\n If transceiver.[[Direction]]
is\n \"sendrecv
\", set\n transceiver.[[Direction]]
to\n \"recvonly
\".\n
\n If transceiver.[[Direction]]
is\n \"sendonly
\", set\n transceiver.[[Direction]]
to\n \"inactive
\".\n
\n Update the negotiation-needed flag for\n connection.\n
" - } - ] - }, - { - "rationale": "let", - "steps": [ - { - "html": "\n Let init be the second argument.\n
" + "html": "\n Let sender be the argument to removeTrack
.\n
\n Let streams be\n init.
.\n streams
\n Let connection be the RTCPeerConnection
\n object on which the method was invoked.\n
\n Let sendEncodings be\n init.
.\n sendEncodings
\n If connection.[[IsClosed]]
is\n true
, throw an\n InvalidStateError
.\n
\n Let direction be\n init.
.\n direction
\n If sender was not created by\n connection, throw an\n InvalidAccessError
.\n
\n If kind is not a legal\n MediaStreamTrack
kind
,\n throw a TypeError
.\n
\n Let track be null
.\n
\n Let transceiver be the RTCRtpTransceiver
\n object corresponding to sender.\n
\n If the first argument is a MediaStreamTrack
, let it\n be track and let kind be\n track.kind.\n
\n If transceiver.[[Stopping]]
is\n true
, abort these steps.\n
\n If connection.[[IsClosed]] is\n true
, throw an\n InvalidStateError
.\n
\n Let
\n Let senders be the result of executing the\n CollectSenders
algorithm.\n
\n Verify that each
value\n in sendEncodings conforms to the grammar\n specified in Section 10 of [RFC8851]. If one of\n the RIDs does not meet these requirements, throw a rid
TypeError
.\n
\n If any
dictionary in\n sendEncodings contains a read-only\n parameter other than\n RTCRtpEncodingParameters
, throw\n an rid
InvalidAccessError
.\n
\n Verify that the value of each\n
\n member in sendEncodings that is defined\n is greater than or equal to 1.0. If one of the\n scaleResolutionDownBy
\n values does not meet this requirement, throw a scaleResolutionDownBy
RangeError
.\n
\n Let maxN be the maximum number of total\n simultaneous encodings the user agent may support for\n this kind, at minimum 1
.This\n should be an optimistic number since the codec to be\n used is not known yet.\n
\n If sendEncodings contains any encoding\n whose\n
\n attribute is defined, set any undefined\n scaleResolutionDownBy
of\n the other encodings to 1.0.\n scaleResolutionDownBy
\n If the number of
stored\n in sendEncodings exceeds maxN,\n then trim sendEncodings from the tail\n until its length is maxN.\n RTCRtpEncodingParameters
scaleResolutionDownBy
\n attribues of sendEncodings are still\n undefined, initialize each encoding's\n scaleResolutionDownBy
to\n 2^(length of sendEncodings - encoding\n index - 1)
. This results in smaller-to-larger\n resolutions where the last encoding has no scaling\n applied to it, e.g. 4:2:1 if the length is 3."
- },
- {
- "html": "\n If the number of
now\n stored in sendEncodings is RTCRtpEncodingParameters
1
,\n then remove any
member\n from the lone entry.\n rid
\n If sender is not in senders (which\n indicates its transceiver was stopped or removed due to\n setting a session description of\n type
\n \"rollback
\"), then abort these steps.\n
\n Create an RTCRtpSender with track,\n kind, streams and\n sendEncodings and let sender be the\n result.\n
\n\n If sendEncodings is set, then subsequent calls\n to
will be configured to send multiple\n RTP encodings as defined in [RFC8829] (section 5.2.2. and section 5.2.1.). When\n createOffer
is called with\n a corresponding remote description that is able to\n receive multiple RTP encodings as defined in\n [RFC8829] (section 3.7.), the\n setRemoteDescription
may send multiple RTP encodings and the\n parameters retrieved via the transceiver's\n RTCRtpSender
.sender
getParameters
()
\n will reflect the encodings negotiated.\n
\n If sender.[[SenderTrack]]
is null,\n abort these steps.\n
\n Create an RTCRtpReceiver with kind and\n let receiver be the result.\n
" + "html": "\n Set sender.[[SenderTrack]]
to null.\n
\n Create an RTCRtpTransceiver with\n sender, receiver and\n direction, and let transceiver be\n the result.\n
" + "html": "\n Let transceiver be the
\n object corresponding to sender.\n RTCRtpTransceiver
\n Add transceiver to connection's set of transceivers.\n
" + "html": "\n
\n If transceiver.[[Direction]]
is\n \"sendrecv
\", set\n transceiver.[[Direction]]
to\n \"recvonly
\".\n
\n Update the negotiation-needed flag for\n connection.\n
" + "html": "\n If transceiver.[[Direction]]
is\n \"sendonly
\", set\n transceiver.[[Direction]]
to\n \"inactive
\".\n
\n Return transceiver.\n
" + "html": "\n Update the negotiation-needed flag for\n connection.\n
" } ] }, { + "name": "RTCPeerConnection/addTransceiver sendEncodings validation steps", + "href": "https://www.w3.org/TR/webrtc/#dfn-addtransceiver-sendencodings-validation-steps", + "html": "When this method is invoked, the user agent MUST run the\n following steps:", "rationale": ".algorithm", "steps": [ { "html": "\n Let init be the second argument.\n
" }, { - "html": "\n Let streams be\n init.streams
.\n
\n Let streams be\n init.streams
.\n
\n Let sendEncodings be\n init.sendEncodings
.\n
\n Let sendEncodings be\n init.sendEncodings
.\n
\n Let direction be\n init.direction
.\n
\n Let direction be\n init.direction
.\n
\n If kind is neither \"audio\"
nor \"video\"
,\n throw a TypeError
.\n
\n If kind is neither \"audio\"
nor \"video\"
,\n throw a TypeError
.\n
\n Let track be null
.\n
\n If the first argument is a MediaStreamTrack
, let\n track be the first argument and let kind be\n track.kind
.\n
\n If the first argument is a MediaStreamTrack
, let\n track be the first argument and let kind be\n track.kind
.\n
\n If connection.[[IsClosed]]
is\n true
, throw an\n InvalidStateError
.\n
\n If connection.[[IsClosed]]
is\n true
, throw an\n InvalidStateError
.\n
RTCRtpEncodingParameters
\n dictionary in it is an \"encoding\":",
- "rationale": "if",
+ "html": "Validate sendEncodings by running the following\n \n addTransceiver sendEncodings validation steps,\n where each RTCRtpEncodingParameters
\n dictionary in it is an \"encoding\":",
+ "rationale": "verify",
"steps": [
{
- "html": "\n If any encoding contains a\n rid
member whose value\n does not conform to the grammar requirements specified\n in Section 10 of [RFC8851], throw a TypeError
.\n
\n Verify that each
value\n in sendEncodings conforms to the grammar\n specified in Section 10 of [RFC8851]. If one of\n the RIDs does not meet these requirements, throw a rid
TypeError
.\n
TypeError
:\n rid
member whose value\n does not conform to the grammar requirements specified\n in Section 10 of [RFC8851].\n rid
member.\n rid
member whose value\n is the same as that of a rid
\n contained in another encoding in\n sendEncodings.\n \n If some but not all encodings contain a\n rid
member, throw a TypeError
.\n
\n If any encoding contains a read-only\n parameter other than\n rid
, throw\n an InvalidAccessError
.\n
\n If any encoding contains a\n rid
member whose value\n is the same as that of a rid
\n contained in another encoding in\n sendEncodings, throw a\n TypeError
.\n
\n If any encoding contains a\n codec
member whose value does\n not match any codec in RTCRtpSender
.getCapabilities
(kind)
.codecs
,\n throw an OperationError
.
\n If any encoding contains a read-only\n parameter other than\n rid
, throw\n an InvalidAccessError
.\n
If the user agent does not support changing codecs without negotiation or\n does not support setting codecs for individual encodings, return a promise\n rejected with a newly created OperationError
.
\n If kind is \"audio\"
, remove the\n scaleResolutionDownBy
and\n maxFramerate
\n members from all encodings that contain any of\n them.\n
\n If kind is \"audio\"
, remove the\n scaleResolutionDownBy
and\n maxFramerate
\n members from all encodings that contain any of\n them.\n
\n If any encoding contains a\n scaleResolutionDownBy
\n member whose value is less than 1.0
, throw a RangeError
.\n
\n If any encoding contains a\n scaleResolutionDownBy
\n member whose value is less than 1.0
, throw a RangeError
.\n
\n Verify that the value of each\n maxFramerate
\n member in sendEncodings that is defined\n is greater than 0.0. If one of the\n maxFramerate
\n values does not meet this requirement, throw a RangeError
.\n
\n Verify that the value of each\n maxFramerate
\n member in sendEncodings that is defined\n is greater than 0.0. If one of the\n maxFramerate
\n values does not meet this requirement, throw a RangeError
.\n
\n Let maxN be the maximum number of total\n simultaneous encodings the user agent may support for\n this kind, at minimum 1
.This\n should be an optimistic number since the codec to be\n used is not known yet.\n
\n If any encoding contains a\n scaleResolutionDownBy
\n member, then for each encoding without one,\n add a scaleResolutionDownBy
\n member with the value 1.0
.\n
\n If any encoding contains a\n scaleResolutionDownBy
\n member, then for each encoding without one,\n add a scaleResolutionDownBy
\n member with the value 1.0
.\n
\n If the number of encodings stored\n in sendEncodings exceeds maxN,\n then trim sendEncodings from the tail\n until its length is maxN.\n
" }, { - "html": "\n If kind is \"video\"
and none of the\n encodings contain a\n scaleResolutionDownBy
\n member, then for each encoding, add a\n scaleResolutionDownBy
\n member with the value\n 2^(length of sendEncodings - encoding\n index - 1)
. This results in smaller-to-larger\n resolutions where the last encoding has no scaling\n applied to it, e.g. 4:2:1 if the length is 3.\n
\n If the number of encodings now\n stored in sendEncodings is 1
,\n then remove any rid
member\n from the lone entry.\n
scaleResolutionDownBy
\n attribues of sendEncodings are still\n undefined, initialize each encoding's\n
scaleResolutionDownBy
to\n 2^(length of sendEncodings - encoding\n index - 1)
. This results in smaller-to-larger\n resolutions where the last encoding has no scaling\n applied to it, e.g. 4:2:1 if the length is 3.\n \n If kind is \"video\"
and none of the\n encodings contain a\n scaleResolutionDownBy
\n member, then for each encoding, add a\n scaleResolutionDownBy
\n member with the value\n 2^(length of sendEncodings - encoding\n index - 1)
. This results in smaller-to-larger\n resolutions where the last encoding has no scaling\n applied to it, e.g. 4:2:1 if the length is 3.\n
\n If the number of encodings now\n stored in sendEncodings is 1
,\n then remove any rid
member\n from the lone entry.\n
\n Create an RTCRtpSender with track,\n kind, streams and\n sendEncodings and let sender be the\n result.\n
\n\n If sendEncodings is set, then subsequent calls\n to createOffer
will be configured to send multiple\n RTP encodings as defined in [RFC8829] (section 5.2.2. and section 5.2.1.). When\n setRemoteDescription
is called with\n a corresponding remote description that is able to\n receive multiple RTP encodings as defined in\n [RFC8829] (section 3.7.), the\n RTCRtpSender
may send multiple RTP encodings and the\n parameters retrieved via the transceiver's\n sender
.getParameters
()
\n will reflect the encodings negotiated.\n
\n Create an RTCRtpSender with track,\n kind, streams and\n sendEncodings and let sender be the\n result.\n
\n\n If sendEncodings is set, then subsequent calls\n to createOffer
will be configured to send multiple\n RTP encodings as defined in [RFC9429] (section 5.2.2. and section 5.2.1.). When\n setRemoteDescription
is called with\n a corresponding remote description that is able to\n receive multiple RTP encodings as defined in\n [RFC9429] (section 3.7.), the\n RTCRtpSender
may send multiple RTP encodings and the\n parameters retrieved via the transceiver's\n sender
.getParameters
()
\n will reflect the encodings negotiated.\n
\n Create an RTCRtpReceiver with kind and\n let receiver be the result.\n
" @@ -2503,10 +2126,10 @@ "html": "\n Create an RTCRtpTransceiver with\n sender, receiver and\n direction, and let transceiver be\n the result.\n
" }, { - "html": "\n Add transceiver to connection's set of transceivers.\n
" + "html": "\n Add transceiver to connection's set of transceivers.\n
" }, { - "html": "\n Update the negotiation-needed flag for\n connection.\n
" + "html": "\n Update the negotiation-needed flag for\n connection.\n
" }, { "html": "\n Return transceiver.\n
" @@ -2516,57 +2139,57 @@ { "name": "process remote tracks", "href": "https://www.w3.org/TR/webrtc/#process-remote-tracks", - "html": "To process remote tracks\n given anRTCRtpTransceiver
transceiver,\n direction, msids, addList,\n removeList, and trackEventInits, run the\n following steps:",
+ "html": "To process remote tracks\n given an RTCRtpTransceiver
transceiver,\n direction, msids, addList,\n removeList, and trackEventInits, run the\n following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Set the associated remote streams with\n transceiver.[[Receiver]]
, msids,\n addList, and removeList.\n
\n Set the associated remote streams with\n transceiver.[[Receiver]]
, msids,\n addList, and removeList.\n
\n If direction is\n \"sendrecv
\" or\n \"recvonly
\" and\n transceiver.[[FiredDirection]]
is neither\n \"sendrecv
\" nor\n \"recvonly
\", or the previous step\n increased the length of addList, process the\n addition of a remote track with transceiver and\n trackEventInits.\n
\n If direction is\n \"sendrecv
\" or\n \"recvonly
\" and\n transceiver.[[FiredDirection]]
is neither\n \"sendrecv
\" nor\n \"recvonly
\", or the previous step\n increased the length of addList, process the\n addition of a remote track with transceiver and\n trackEventInits.\n
\n If direction is\n \"sendonly
\" or\n \"inactive
\", set\n transceiver.[[Receptive]]
to\n false
.\n
\n If direction is\n \"sendonly
\" or\n \"inactive
\", set\n transceiver.[[Receptive]]
to\n false
.\n
\n If direction is\n \"sendonly
\" or\n \"inactive
\", and\n transceiver.[[FiredDirection]]
is either\n \"sendrecv
\" or\n \"recvonly
\", process the\n removal of a remote track for the media description,\n with transceiver and muteTracks.\n
\n If direction is\n \"sendonly
\" or\n \"inactive
\", and\n transceiver.[[FiredDirection]]
is either\n \"sendrecv
\" or\n \"recvonly
\", process the\n removal of a remote track for the media description,\n with transceiver and muteTracks.\n
\n Set transceiver.[[FiredDirection]]
to\n direction.\n
\n Set transceiver.[[FiredDirection]]
to\n direction.\n
RTCRtpTransceiver
\n transceiver and trackEventInits, run the\n following steps:",
+ "html": "To process the addition of\n a remote track given an RTCRtpTransceiver
\n transceiver and trackEventInits, run the\n following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let receiver be\n transceiver.[[Receiver]]
.\n
\n Let receiver be\n transceiver.[[Receiver]]
.\n
\n Let track be\n receiver.[[ReceiverTrack]]
.\n
\n Let track be\n receiver.[[ReceiverTrack]]
.\n
\n Let streams be\n receiver.[[AssociatedRemoteMediaStreams]]
.\n
\n Let streams be\n receiver.[[AssociatedRemoteMediaStreams]]
.\n
\n Create a new RTCTrackEventInit
dictionary with\n receiver, track, streams and\n transceiver as members and add it to\n trackEventInits.\n
\n Create a new RTCTrackEventInit
dictionary with\n receiver, track, streams and\n transceiver as members and add it to\n trackEventInits.\n
RTCRtpTransceiver
\n transceiver and muteTracks, run the following\n steps:",
+ "html": "To process the removal of a\n remote track with an RTCRtpTransceiver
\n transceiver and muteTracks, run the following\n steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let receiver be\n transceiver.[[Receiver]]
.\n
\n Let receiver be\n transceiver.[[Receiver]]
.\n
\n Let track be\n receiver.[[ReceiverTrack]]
.\n
\n Let track be\n receiver.[[ReceiverTrack]]
.\n
\n If track.muted is false
, add\n track to muteTracks.\n
RTCRtpReceiver
receiver,\n msids, addList, and removeList,\n run the following steps:",
+ "html": "To set the associated\n remote streams given RTCRtpReceiver
receiver,\n msids, addList, and removeList,\n run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let connection be the RTCPeerConnection
object\n associated with receiver.\n
\n For each MSID in msids, unless a MediaStream
\n object has previously been created with that id
for this connection, create a\n MediaStream
object with that id
.\n
\n Let streams be a list of the MediaStream
objects\n created for this connection with the id
s corresponding to msids.\n
\n Let track be\n receiver.[[ReceiverTrack]]
.\n
\n For each stream in\n receiver.[[AssociatedRemoteMediaStreams]]
\n that is not present in streams, add\n stream and track as a pair to\n removeList.\n
\n For each stream in streams that is not\n present in\n receiver.[[AssociatedRemoteMediaStreams]]
,\n add stream and track as a pair to\n addList.\n
\n Set\n receiver.[[AssociatedRemoteMediaStreams]]
to\n streams.\n
\n Let sender be a new
object.\n RTCRtpSender
\n Let sender have a [[SenderTrack]] internal\n slot initialized to track.\n
" - }, - { - "html": "\n Let sender have a [[SenderTransport]]\n internal slot initialized to null
.\n
\n Let sender have a\n [[LastStableStateSenderTransport]] internal slot\n initialized to null
.\n
\n Let sender have a [[Dtmf]] internal slot\n initialized to null
.\n
\n If kind is \"audio\"
then create an\n RTCDTMFSender dtmf and set the [[Dtmf]]\n internal slot to dtmf.\n
\n Let sender have an\n [[AssociatedMediaStreamIds]] internal slot,\n representing a list of Ids of MediaStream
objects that this\n sender is to be associated with. The\n [[AssociatedMediaStreamIds]] slot is used when\n sender is represented in SDP as described in\n [RFC8829] (section 5.2.1.).\n
\n Set sender.[[AssociatedMediaStreamIds]] to an\n empty set.\n
" + "html": "\n Let connection be the RTCPeerConnection
object\n associated with receiver.\n
\n For each stream in streams, add\n stream.id to [[AssociatedMediaStreamIds]] if\n it's not already there.\n
" + "html": "\n For each MSID in msids, unless a MediaStream
\n object has previously been created with that id
for this connection, create a\n MediaStream
object with that id
.\n
\n Let sender have a [[SendEncodings]]\n internal slot, representing a list of\n
dictionaries.\n RTCRtpEncodingParameters
\n Let streams be a list of the MediaStream
objects\n created for this connection with the id
s corresponding to msids.\n
\n If sendEncodings is given as input to this algorithm,\n and is non-empty, set the [[SendEncodings]] slot to\n sendEncodings. Otherwise, set it to a list containing\n a single
with\n RTCRtpEncodingParameters
set to active
true
.\n
\n Let track be\n receiver.[[ReceiverTrack]]
.\n
\n Let sender have a [[SendCodecs]] internal\n slot, representing a list of
\n dictionaries, and initialized to an empty list.\n RTCRtpCodecParameters
\n For each stream in\n receiver.[[AssociatedRemoteMediaStreams]]
\n that is not present in streams, add\n stream and track as a pair to\n removeList.\n
\n Let sender have a\n [[LastReturnedParameters]] internal slot, which will\n be used to match
and\n getParameters
transactions.\n setParameters
\n For each stream in streams that is not\n present in\n receiver.[[AssociatedRemoteMediaStreams]]
,\n add stream and track as a pair to\n addList.\n
\n Return sender.\n
" + "html": "\n Set\n receiver.[[AssociatedRemoteMediaStreams]]
to\n streams.\n
MediaStreamTrack
,\n track, a string, kind, a list of\n MediaStream
objects, streams, and optionally a list of\n RTCRtpEncodingParameters
objects, sendEncodings, run\n the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let sender be a new RTCRtpSender
object.\n
\n Let sender be a new RTCRtpSender
object.\n
\n Let sender have a [[SenderTrack]] internal\n slot initialized to track.\n
" @@ -2670,173 +2247,123 @@ "html": "\n Let sender have a [[Dtmf]] internal slot\n initialized to null
.\n
\n If kind is \"audio\"
then create an\n RTCDTMFSender dtmf and set the [[Dtmf]]
\n internal slot to dtmf.\n
\n Let sender have an\n [[AssociatedMediaStreamIds]] internal slot,\n representing a list of Ids of MediaStream
objects that this\n sender is to be associated with. The\n [[AssociatedMediaStreamIds]]
slot is used when\n sender is represented in SDP as described in\n [RFC8829] (section 5.2.1.).\n
\n Set sender.[[AssociatedMediaStreamIds]]
to an\n empty set.\n
\n If kind is \"audio\"
then create an\n RTCDTMFSender dtmf and set the [[Dtmf]]
\n internal slot to dtmf.\n
\n For each stream in streams, add\n stream.id to [[AssociatedMediaStreamIds]]
if\n it's not already there.\n
\n Let sender have an\n [[AssociatedMediaStreamIds]] internal slot,\n representing a list of Ids of MediaStream
objects that this\n sender is to be associated with. The\n [[AssociatedMediaStreamIds]]
slot is used when\n sender is represented in SDP as described in\n [RFC9429] (section 5.2.1.).\n
\n Let sender have a [[SendEncodings]]\n internal slot, representing a list of\n RTCRtpEncodingParameters
dictionaries.\n
\n Set sender.[[AssociatedMediaStreamIds]]
to an\n empty set.\n
\n If sendEncodings is given as input to this algorithm,\n and is non-empty, set the [[SendEncodings]]
slot to\n sendEncodings. Otherwise, set it to a list containing\n a single new RTCRtpEncodingParameters
dictionary, and if\n kind is \"video\"
, add a\n scaleResolutionDownBy
member with the\n value 1.0
to that dictionary.\n
\n For each stream in streams, add\n stream.id to [[AssociatedMediaStreamIds]]
if\n it's not already there.\n
\n Let sender have a\n [[LastStableRidlessSendEncodings]] internal slot\n initialized to null
.\n
\n Let sender have a [[SendEncodings]]\n internal slot, representing a list of\n RTCRtpEncodingParameters
dictionaries.\n
\n Let sender have a [[SendCodecs]] internal\n slot, representing a list of RTCRtpCodecParameters
\n dictionaries, and initialized to an empty list.\n
\n Let sender have a\n [[LastReturnedParameters]] internal slot, which will\n be used to match getParameters
and\n setParameters
transactions.\n
\n Return sender.\n
" - } - ] - }, - { - "rationale": "let", - "steps": [ - { - "html": "Let parameters be the\n method's first argument." - }, - { - "html": "Let sender be the\nRTCRtpSender
object on which setParameters
is\n invoked."
- },
- {
- "html": "Let transceiver be the\n RTCRtpTransceiver
object associated with\n sender (i.e. sender is\n transceiver.[[Sender]])."
- },
- {
- "html": "If transceiver.[[Stopped]] is\n true
, return a promise rejected with a\n newly created InvalidStateError
."
- },
- {
- "html": "If \n sender.[[LastReturnedParameters]] is\n null
, return a promise rejected with a\n newly created InvalidStateError
."
- },
- {
- "html": "Validate parameters by running the following\n steps:",
- "rationale": "let",
- "steps": [
- {
- "html": "Let encodings be\n parameters.encodings
."
- },
- {
- "html": "Let codecs be \n parameters.codecs
."
- },
- {
- "html": "Let N be the number\n of RTCRtpEncodingParameters
stored in\n sender.[[SendEncodings]]."
- },
- {
- "html": "If any of the following conditions are met, return a\n promise rejected with a newly created InvalidModificationError
:",
- "ignored": [
- "encodings.length is different from N. encodings has been re-ordered. Any parameter in parameters is marked as a Read-only parameter (such as RID) and has a value that is different from the corresponding parameter value in sender.[[LastReturnedParameters]]. Note that this also applies to transactionId."
- ]
- },
- {
- "html": "\n Verify that each encoding in encodings has\n a
\n member whose value is greater than or equal to 1.0. If one of the\n scaleResolutionDownBy
\n values does not meet this requirement, return a\n promise rejected with a newly created scaleResolutionDownBy
RangeError
.\n
\n If sendEncodings is given as input to this algorithm,\n and is non-empty, set the [[SendEncodings]]
slot to\n sendEncodings. Otherwise, set it to a list containing\n a single new RTCRtpEncodingParameters
with\n dictionary, active
set and if\n kind is \"video\"
, add a\n scaleResolutionDownBy
member with the\n value 1.0
to that dictionary.\n true
null
."
- },
- {
- "html": "Set sender.[[SendEncodings]]\n to\n parameters.encodings
."
- },
- {
- "html": "Resolve p with\n undefined
."
- }
- ]
- },
- {
- "html": "If any error occurred while configuring the media\n stack, queue a task to run the following steps:",
- "rationale": "if",
- "steps": [
- {
- "html": "If an error occurred due to hardware resources\n not being available, reject p with a\n newly created RTCError
whose\n errorDetail
is set to\n \"hardware-encoder-not-available
\"\n and abort these steps."
- },
- {
- "html": "If an error occurred due to a hardware encoder\n not supporting parameters, reject\n p with a newly created RTCError
whose\n errorDetail
is set to\n \"hardware-encoder-error
\" and\n abort these steps."
- },
- {
- "html": "For all other errors, reject p\n with a newly created\n OperationError
."
- }
- ]
- }
- ]
+ "html": "\n Let sender have a\n [[LastStableRidlessSendEncodings]] internal slot\n initialized to null
.\n
\n Let sender have a [[SendCodecs]] internal\n slot, representing a list of RTCRtpCodecParameters
\n dictionaries, and initialized to an empty list.\n
\n Let sender have a\n [[LastReturnedParameters]] internal slot, which will\n be used to match getParameters
and\n setParameters
transactions.\n
\n Return sender.\n
" + } + ] + }, + { + "name": "RTCRtpSender/getCapabilities()", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpsender-getcapabilities", + "html": "When thegetCapabilities
method is called, the user agent MUST run the\n following steps:",
+ "rationale": ".algorithm",
+ "steps": [
+ {
+ "html": "Let kind be the method's first argument.
" + }, + { + "html": "If kind is neither \"video\"
nor \"audio\"
return null
.
Return a new RTCRtpCapabilities
dictionary, with its\n codecs
member initialized to the\n list of implemented send codecs for kind, and its\n headerExtensions
member initialized to the\n list of implemented header extensions for sending with\n kind.
setParameters
method is called, the user agent\n MUST run the following steps:",
"rationale": ".algorithm",
"steps": [
{
"html": "Let parameters be the\n method's first argument."
},
{
- "html": "Let sender be the\n RTCRtpSender
object on which setParameters
is\n invoked."
+ "html": "Let sender be the\n RTCRtpSender
object on which setParameters
is\n invoked."
+ },
+ {
+ "html": "Let transceiver be the\n RTCRtpTransceiver
object associated with\n sender (i.e. sender is\n transceiver.[[Sender]]
)."
},
{
- "html": "Let transceiver be the\n RTCRtpTransceiver
object associated with\n sender (i.e. sender is\n transceiver.[[Sender]]
)."
+ "html": "[[Stopped]]
is\n true
, return a promise rejected with a\n newly created InvalidStateError
."
+ "html": "If transceiver.[[true
, return a promise rejected with a\n newly created InvalidStateError
."
},
{
- "html": "If \n sender.[[LastReturnedParameters]]
is\n null
, return a promise rejected with a\n newly created InvalidStateError
."
+ "html": "If \n sender.[[LastReturnedParameters]]
is\n null
, return a promise rejected with a\n newly created InvalidStateError
."
},
{
- "html": "Validate parameters by running the following steps:",
+ "html": "Validate parameters by running the following\n \n setParameters validation steps:",
"rationale": "let",
"steps": [
{
- "html": "Let encodings be\n parameters.encodings
."
+ "html": "Let encodings be\n parameters.encodings
."
},
{
- "html": "Let codecs be \n parameters.codecs
."
+ "html": "Let codecs be \n parameters.codecs
."
},
{
- "html": "Let N be the number\n of RTCRtpEncodingParameters
stored in\n sender.[[SendEncodings]]
."
+ "html": "Let choosableCodecs be codecs.
\n " }, { - "html": "If any of the following conditions are met, return a\n promise rejected with a newly createdInvalidModificationError
:",
- "ignored": [
- "encodings.length is different from N. encodings has been re-ordered. Any parameter in parameters is marked as a Read-only parameter (such as RID) and has a value that is different from the corresponding parameter value in sender.[[LastReturnedParameters]]. Note that this also applies to transactionId."
- ]
+ "html": "If choosableCodecs is an empty list, set choosableCodecs\n to transceiver.[[PreferredCodecs]]
.
If choosableCodecs is still an empty list, set choosableCodecs\n to the list of implemented send codecs for transceiver's kind.
\n " + }, + { + "html": "Let N be the number\n ofRTCRtpEncodingParameters
stored in\n sender.[[SendEncodings]]
."
+ },
+ {
+ "html": "If any of the following conditions are met, return a\n promise rejected with a newly created InvalidModificationError
:\n encodings.length
is\n different from N.\n [[LastReturnedParameters]]
.\n Note that this also applies to\n transactionId.\n \n If transceiver kind is \"audio\"
, remove the\n scaleResolutionDownBy
and\n maxFramerate
\n members from all encodings that\n contain any of them.\n
\n If transceiver kind is \"audio\"
, remove the\n scaleResolutionDownBy
and\n maxFramerate
\n members from all encodings that\n contain any of them.\n
\n If transceiver kind is \"video\"
, then for\n each encoding in encodings that doesn't\n contain a\n scaleResolutionDownBy
\n member, add a\n scaleResolutionDownBy
\n member with the value 1.0
.\n
\n If transceiver kind is \"video\"
, then for\n each encoding in encodings that doesn't\n contain a\n scaleResolutionDownBy
\n member, add a\n scaleResolutionDownBy
\n member with the value 1.0
.\n
\n If transceiver kind is \"video\"
,\n and any encoding in encodings\n contains a\n scaleResolutionDownBy
\n member whose value is less than 1.0
, return a\n promise rejected with a newly created RangeError
.\n
\n Verify that each encoding in encodings has\n a maxFramerate
\n member whose value is greater than or equal to 0.0. If one of the\n maxFramerate
\n values does not meet this requirement, return a\n promise rejected with a newly created RangeError
.\n
\n Verify that each If transceiver kind is \"video\"
,\n and any encoding in encodings\n contains has\n a a\n scaleResolutionDownBy
\n member whose value is greater less than or equal to 1.0. If one of the\n
\n values does not meet this requirementscaleResolutionDownBy
1.0
, return a\n promise rejected with a newly created RangeError
.\n
\n Verify that each encoding in encodings has\n a maxFramerate
\n member whose value is greater than or equal to 0.0. If one of the\n maxFramerate
\n values does not meet this requirement, return a\n promise rejected with a newly created RangeError
.\n
If the user agent does not support setting the codec for any encoding or mixing\n different codec values on the different encodings, return a promise rejected\n with a newly created OperationError
.\n
[[SenderTrack]]
.",
+ "html": "In parallel, configure the media stack to use\n parameters to transmit\n sender.[[SenderTrack]]
.",
"rationale": "if",
"steps": [
{
@@ -2852,13 +2379,13 @@
"rationale": "set",
"steps": [
{
- "html": "Set\n sender.[[LastReturnedParameters]]
\n to null
."
+ "html": "Set\n sender.[[LastReturnedParameters]]
\n to null
."
},
{
- "html": "Set sender.[[SendEncodings]]
\n to\n parameters.encodings
."
+ "html": "Set sender.[[SendEncodings]]
\n to\n parameters.encodings
."
},
{
- "html": "Resolve p with\n undefined
."
+ "html": "Resolve p with\n undefined
."
}
]
},
@@ -2867,13 +2394,13 @@
"rationale": "if",
"steps": [
{
- "html": "If an error occurred due to hardware resources\n not being available, reject p with a\n newly created RTCError
whose\n errorDetail
is set to\n \"hardware-encoder-not-available
\"\n and abort these steps."
+ "html": "If an error occurred due to hardware resources\n not being available, reject p with a\n newly created RTCError
whose\n errorDetail
is set to\n \"hardware-encoder-not-available
\"\n and abort these steps."
},
{
- "html": "If an error occurred due to a hardware encoder\n not supporting parameters, reject\n p with a newly created RTCError
whose\n errorDetail
is set to\n \"hardware-encoder-error
\" and\n abort these steps."
+ "html": "If an error occurred due to a hardware encoder\n not supporting parameters, reject\n p with a newly created RTCError
whose\n errorDetail
is set to\n \"hardware-encoder-error
\" and\n abort these steps."
},
{
- "html": "For all other errors, reject p\n with a newly created\n OperationError
."
+ "html": "For all other errors, reject p\n with a newly created\n OperationError
."
}
]
}
@@ -2887,23 +2414,23 @@
{
"name": "RTCRtpSender/getParameters()",
"href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpsender-getparameters",
- "html": "When getParameters
is called, the user agent MUST run the\n following steps:",
+ "html": "When getParameters
is called, the user agent MUST run the\n following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let sender be the RTCRtpSender
object on\n which the getter was invoked.\n
\n Let sender be the RTCRtpSender
object on\n which the getter was invoked.\n
\n If sender.[[LastReturnedParameters]]
\n is not null
, return\n sender.[[LastReturnedParameters]]
, and\n abort these steps.\n
\n If sender.[[LastReturnedParameters]]
\n is not null
, return\n sender.[[LastReturnedParameters]]
, and\n abort these steps.\n
\n Let result be a new RTCRtpSendParameters
\n dictionary constructed as follows:\n
transactionId
is set to a new\n unique identifier.\n encodings
is set to the value of\n the [[SendEncodings]]
internal slot.\n headerExtensions
sequence is\n populated based on the header extensions that have been\n negotiated for sending.\n codecs
is set to the value of the\n [[SendCodecs]]
internal slot.\n rtcp
.cname
is\n set to the CNAME of the associated RTCPeerConnection
.\n rtcp
.reducedSize
\n is set to true
if reduced-size RTCP has been\n negotiated for sending, and false
otherwise.\n \n Let result be a new RTCRtpSendParameters
\n dictionary constructed as follows:\n
transactionId
is set to a new\n unique identifier.\n encodings
is set to the value of\n the [[SendEncodings]]
internal slot.\n headerExtensions
sequence is\n populated based on the header extensions that have been\n negotiated for sending.\n codecs
is set to the value of the\n [[SendCodecs]]
internal slot.\n rtcp
.cname
is\n set to the CNAME of the associated RTCPeerConnection
.\n rtcp
.reducedSize
\n is set to true
if reduced-size RTCP has been\n negotiated for sending, and false
otherwise.\n \n Set sender.[[LastReturnedParameters]]
\n to result.\n
\n Set sender.[[LastReturnedParameters]]
\n to result.\n
\n Queue a task that sets\n sender.[[LastReturnedParameters]]
to\n null
.\n
\n Queue a task that sets\n sender.[[LastReturnedParameters]]
to\n null
.\n
\n Return result.\n
" @@ -2913,46 +2440,49 @@ { "name": "RTCRtpSender/replaceTrack()", "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpsender-replacetrack", - "html": "When thereplaceTrack
method is invoked, the user agent\n MUST run the following steps:",
+ "html": "When the replaceTrack
method is invoked, the user agent\n MUST run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let sender be the RTCRtpSender
object on\n which replaceTrack
is invoked.\n
\n Let sender be the RTCRtpSender
object on\n which replaceTrack
is invoked.\n
\n Let transceiver be the RTCRtpTransceiver
\n object associated with sender.\n
\n Let transceiver be the RTCRtpTransceiver
\n object associated with sender.\n
\n Let connection be the RTCPeerConnection
\n object associated with sender.\n
\n Let connection be the RTCPeerConnection
\n object associated with sender.\n
\n Let withTrack be the argument to this method.\n
" }, { - "html": "\n If withTrack is non-null and\n withTrack.kind
differs from the\n transceiver kind of transceiver, return\n a promise rejected with a newly created TypeError
.\n
\n If withTrack is non-null and\n withTrack.kind
differs from the\n transceiver kind of transceiver, return\n a promise rejected with a newly created TypeError
.\n
\n If transceiver.[[Stopped]]
is\n true
, return a promise rejected\n with a newly created\n InvalidStateError
.\n
\n If transceiver.[[StoppedStopping]] is\n true
, return a promise rejected\n with a newly created\n InvalidStateError
.\n
\n Let p be a new promise.\n
" }, { - "html": "\n Let sending be true
if\n transceiver.[[CurrentDirection]]
\n is \"sendrecv
\" or\n \"sendonly
\", and\n false
otherwise.\n
\n Let sending be true
if\n transceiver.[[CurrentDirection]]
\n is \"sendrecv
\" or\n \"sendonly
\", and\n false
otherwise.\n
\n If sending is true
, and\n withTrack is null
, have\n the sender stop sending.\n
\n If sending is true
, and\n withTrack is not null
,\n determine if withTrack can be sent\n immediately by the sender without violating the\n sender's already-negotiated envelope, and if it\n cannot, then reject p with a\n newly created\n InvalidModificationError
, and abort these\n steps.\n
\n If sending is true
, and\n withTrack is not null
,\n determine if withTrack can be sent\n immediately by the sender without violating the\n sender's already-negotiated envelope, and if it\n cannot, then reject p with a\n newly created\n InvalidModificationError
, and abort these\n steps.\n
\n If sending is true
, and\n withTrack is not null
,\n have the sender switch seamlessly to transmitting\n withTrack instead of the sender's\n existing track.\n
\n If connection.[[IsClosed]]
\n is true
, abort these steps.\n
\n If connection.[[IsClosed]]
\n is true
, abort these steps.\n
\n Set sender.[[SenderTrack]]
\n to withTrack.\n
\n Set sender.[[SenderTrack]]
\n to withTrack.\n
\n Resolve p with\n undefined
.\n
\n Resolve p with\n undefined
.\n
setStreams
method is invoked, the user agent\n MUST run the following steps:",
+ "html": "When the setStreams
method is invoked, the user agent\n MUST run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let sender be the RTCRtpSender
object on\n which this method was invoked.\n
\n Let sender be the RTCRtpSender
object on\n which this method was invoked.\n
\n Let connection be the RTCPeerConnection
\n object on which this method was invoked.\n
\n Let connection be the RTCPeerConnection
\n object on which this method was invoked.\n
\n If connection.[[IsClosed]]
is\n true
, throw an\n InvalidStateError
.\n
\n If connection.[[IsClosed]]
is\n true
, throw an\n InvalidStateError
.\n
\n Let streams be a list of MediaStream
\n objects constructed from the method's arguments, or an\n empty list if the method was called without arguments.\n
\n Let streams be a list of MediaStream
\n objects constructed from the method's arguments, or an\n empty list if the method was called without arguments.\n
\n Set\n sender.[[AssociatedMediaStreamIds]]
to\n an empty set.\n
\n Set\n sender.[[AssociatedMediaStreamIds]]
to\n an empty set.\n
\n For each stream in streams, add\n stream.id to\n [[AssociatedMediaStreamIds]]
if it's not already\n there.\n
\n For each stream in streams, add\n stream.id to\n [[AssociatedMediaStreamIds]]
if it's not already\n there.\n
\n Update the negotiation-needed flag for\n connection.\n
" + "html": "\n Update the negotiation-needed flag for\n connection.\n
" } ] }, { "name": "RTCRtpSender/getStats()", "href": "https://www.w3.org/TR/webrtc/#widl-RTCRtpSender-getStats-Promise-RTCStatsReport", - "html": "When thegetStats
()
method is invoked, the user agent\n MUST run the following steps:",
+ "html": "When the getStats
()
method is invoked, the user agent\n MUST run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let selector be the RTCRtpSender
object on\n which the method was invoked.\n
\n Let selector be the RTCRtpSender
object on\n which the method was invoked.\n
\n Gather the stats indicated by selector\n according to the stats selection algorithm.\n
" + "html": "\n Gather the stats indicated by selector\n according to the stats selection algorithm.\n
" }, { - "html": "\n Resolve p with the resulting\n RTCStatsReport
object, containing the gathered\n stats.\n
\n Resolve p with the resulting\n RTCStatsReport
object, containing the gathered\n stats.\n
\n Let receiver be a new RTCRtpReceiver
object.\n
\n Let receiver be a new RTCRtpReceiver
object.\n
\n Let track be a new MediaStreamTrack
object\n [GETUSERMEDIA]. The source of track is a\n remote source provided by receiver. Note\n that the track.id
is\n generated by the user agent and does not map to any track\n IDs on the remote side.\n
\n Let track be a new MediaStreamTrack
object\n [GETUSERMEDIA]. The source of track is a\n remote source provided by receiver. Note\n that the track.id
is\n generated by the user agent and does not map to any track\n IDs on the remote side.\n
\n Initialize track.kind to kind.\n
" @@ -3058,10 +2588,10 @@ "html": "\n Initialize track.readyState to live
.\n
\n Initialize track.muted to true
. See the\n MediaStreamTrack\n section about how the muted
attribute\n reflects if a MediaStreamTrack
is receiving media data or\n not.\n
\n Initialize track.muted to true
. See the\n MediaStreamTrack\n section about how the muted
attribute\n reflects if a MediaStreamTrack
is receiving media data or\n not.\n
\n Let receiver have a [[ReceiverTrack]]\n internal slot initialized to track.\n
" + "html": "\n Let receiver have a [[ReceiverTrack]]\n internal slot initialized to track.\n
" }, { "html": "\n Let receiver have a [[ReceiverTransport]]\n internal slot initialized to null
.\n
\n Let receiver have a\n [[LastStableStateReceiverTransport]] internal slot\n initialized to null
.\n
\n Let receiver have an\n [[AssociatedRemoteMediaStreams]] internal slot,\n representing a list of MediaStream
objects that the\n MediaStreamTrack
object of this receiver is associated with,\n and initialized to an empty list.\n
\n Let receiver have an\n [[AssociatedRemoteMediaStreams]] internal slot,\n representing a list of MediaStream
objects that the\n MediaStreamTrack
object of this receiver is associated with,\n and initialized to an empty list.\n
\n Let receiver have a\n [[LastStableStateAssociatedRemoteMediaStreams]]\n internal slot and initialize it to an empty list.\n
" }, { - "html": "\n Let receiver have a [[ReceiveCodecs]]\n internal slot, representing a list of RTCRtpCodecParameters
\n dictionaries, and initialized to an empty list.\n
\n Let receiver have a [[ReceiveCodecs]]\n internal slot, representing a list of RTCRtpCodecParameters
\n dictionaries, and initialized to an empty list.\n
\n Let receiver have a\n [[LastStableStateReceiveCodecs]] internal slot and\n initialize it to an empty list.\n
" }, + { + "html": "\n Let receiver have a [[JitterBufferTarget]]\n internal slot initialized to null
.\n
\n Return receiver.\n
" } ] }, + { + "html": "On setting, the user agent MUST run the following steps:", + "rationale": ".algorithm", + "steps": [ + { + "html": "Let receiver be the\n RTCRtpReceiver
object on which the setter is\n invoked.
Let target be the argument to the setter.
" + }, + { + "html": "If target is negative or larger than 4000 milliseconds, then\n throw a RangeError
.
Set receiver's [[JitterBufferTarget]]
\n to target.
Let track be receiver's\n [[ReceiverTrack]]
.
Update the underlying system about the new target,\n or that there is no application preference if target is\n null
.
\n If track is synchronized with another\n RTCRtpReceiver
's track for\n audio/video synchronization,\n then the user agent SHOULD use the larger of the two receivers'\n [[JitterBufferTarget]]
for both receivers.\n
\n When the underlying system is applying a jitter buffer target, it will\n continuously make sure that the actual jitter buffer target is clamped\n within the minimum allowed target and maximum allowed\n target.\n
\n " + }, + { + "html": "Modifying the jitter buffer target of the underlying system SHOULD\n affect the internal audio or video buffering gradually in order not\n to hurt user experience. Audio samples or video frames SHOULD\n be accelerated or decelerated before playout, similarly to how\n it is done for\n \n audio/video synchronization or in response to congestion\n control.
\nThe acceleration or deceleration rate may vary depending on\n network conditions or the type of audio received (e.g. speech\n or background noise). It MAY take several seconds to achieve 1\n second of buffering but SHOULD not take more than 30 seconds\n assuming packets are being received. The speed MAY be\n different for audio and video.
" + } + ] + } + ] + }, + { + "name": "RTCRtpReceiver/getCapabilities()", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpreceiver-getcapabilities", + "html": "When thegetCapabilities
method is called, the user agent MUST run the\n following steps:",
+ "rationale": ".algorithm",
+ "steps": [
+ {
+ "html": "Let kind be the method's first argument.
" + }, + { + "html": "If kind is neither \"video\"
nor \"audio\"
return null
.
Return a new RTCRtpCapabilities
dictionary, with its\n codecs
member initialized to the\n list of implemented receive codecs for kind, and its\n headerExtensions
member initialized to the\n list of implemented header extensions for receiving for\n kind.
getStats
()
method is invoked, the user agent\n MUST run the following steps:",
+ "html": "When the getStats
()
method is invoked, the user agent\n MUST run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let selector be the RTCRtpReceiver
object\n on which the method was invoked.\n
\n Let selector be the RTCRtpReceiver
object\n on which the method was invoked.\n
\n Gather the stats indicated by selector\n according to the stats selection algorithm.\n
" + "html": "\n Gather the stats indicated by selector\n according to the stats selection algorithm.\n
" }, { - "html": "\n Resolve p with the resulting\n RTCStatsReport
object, containing the gathered\n stats.\n
\n Resolve p with the resulting\n RTCStatsReport
object, containing the gathered\n stats.\n
RTCRtpReceiver
\n object, receiver, RTCRtpSender
object,\n sender, and an RTCRtpTransceiverDirection
value,\n direction, run the following steps:",
+ "html": "To create an RTCRtpTransceiver with an RTCRtpReceiver
\n object, receiver, RTCRtpSender
object,\n sender, and an RTCRtpTransceiverDirection
value,\n direction, run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let transceiver be a new RTCRtpTransceiver
object.\n
\n Let transceiver be a new RTCRtpTransceiver
object.\n
\n Let transceiver have a [[Sender]] internal\n slot, initialized to sender.\n
" + "html": "\n Let transceiver have a [[Sender]] internal\n slot, initialized to sender.\n
" }, { "html": "\n Let transceiver have a [[Receiver]]\n internal slot, initialized to receiver.\n
" @@ -3146,10 +2729,10 @@ "html": "\n Let transceiver have a [[FiredDirection]]\n internal slot, initialized to null
.\n
\n Let transceiver have a [[PreferredCodecs]]\n internal slot, initialized to an empty list.\n
" + "html": "\n Let transceiver have a [[PreferredCodecs]]\n internal slot, initialized to an empty list.\n
" }, { - "html": "\n Let transceiver have a [[JsepMid]]\n internal slot, initialized to null
. This is the\n \"RtpTransceiver mid property\" defined in [RFC8829] (section 5.2.1. and section 5.3.1.), and is only\n modified there.\n
\n Let transceiver have a [[JsepMid]]\n internal slot, initialized to null
. This is the\n \"RtpTransceiver mid property\" defined in [RFC9429] (section 5.2.1. and section 5.3.1.), and is only\n modified there.\n
\n Let transceiver have a [[Mid]] internal\n slot, initialized to null
.\n
\n Let transceiver be the RTCRtpTransceiver
\n object on which the getter is invoked.\n
\n Let transceiver be the RTCRtpTransceiver
\n object on which the getter is invoked.\n
\n If transceiver.[[Stopping]]
is\n true
, return\n \"stopped
\".\n
\n If transceiver.[[Stopping]]
is\n true
, return\n \"stopped
\".\n
\n Otherwise, return the value of the [[Direction]]
\n slot.\n
\n Otherwise, return the value of the [[Direction]]
\n slot.\n
\n Let transceiver be the RTCRtpTransceiver
\n object on which the setter is invoked.\n
\n Let transceiver be the RTCRtpTransceiver
\n object on which the setter is invoked.\n
\n Let connection be the RTCPeerConnection
\n object associated with transceiver.\n
\n Let connection be the RTCPeerConnection
\n object associated with transceiver.\n
\n If transceiver.[[Stopping]]
is\n true
, throw an\n InvalidStateError
.\n
\n If transceiver.[[Stopping]]
is\n true
, throw an\n InvalidStateError
.\n
\n Let newDirection be the argument to the\n setter.\n
" }, { - "html": "\n If newDirection is equal to\n transceiver.[[Direction]]
, abort these\n steps.\n
\n If newDirection is equal to\n transceiver.[[Direction]]
, abort these\n steps.\n
\n If newDirection is equal to\n \"stopped
\", throw a TypeError
.\n
\n If newDirection is equal to\n \"stopped
\", throw a TypeError
.\n
\n Set transceiver.[[Direction]]
to\n newDirection.\n
\n Set transceiver.[[Direction]]
to\n newDirection.\n
\n Update the negotiation-needed flag for\n connection.\n
" @@ -3215,36 +2798,36 @@ "rationale": ".algorithm", "steps": [ { - "html": "\n Let transceiver be the RTCRtpTransceiver
\n object on which the getter is invoked.\n
\n Let transceiver be the RTCRtpTransceiver
\n object on which the getter is invoked.\n
\n If transceiver.[[Stopped]]
is\n true
, return\n \"stopped
\".\n
\n If transceiver.[[Stopped]]
is\n true
, return\n \"stopped
\".\n
\n Otherwise, return the value of the\n [[CurrentDirection]]
slot.\n
\n Otherwise, return the value of the\n [[CurrentDirection]]
slot.\n
stop
method is invoked, the user agent MUST run\n the following steps:",
+ "html": "When the stop
method is invoked, the user agent MUST run\n the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let transceiver be the RTCRtpTransceiver
\n object on which the method is invoked.\n
\n Let transceiver be the RTCRtpTransceiver
\n object on which the method is invoked.\n
\n Let connection be the RTCPeerConnection
\n object associated with transceiver.\n
\n Let connection be the RTCPeerConnection
\n object associated with transceiver.\n
\n If connection.[[IsClosed]]
is\n true
, throw an\n InvalidStateError
.\n
\n If connection.[[IsClosed]]
is\n true
, throw an\n InvalidStateError
.\n
\n If transceiver.[[Stopping]]
is\n true
, abort these steps.\n
\n If transceiver.[[Stopping]]
is\n true
, abort these steps.\n
\n Stop sending and receiving with\n transceiver.\n
" + "html": "\n Stop sending and receiving with\n transceiver.\n
" }, { "html": "\n Update the negotiation-needed flag for\n connection.\n
" @@ -3254,93 +2837,126 @@ { "name": "stop sending and receiving", "href": "https://www.w3.org/TR/webrtc/#dfn-stop-sending-and-receiving", - "html": "The stop sending and receiving algorithm given a\n transceiver and, optionally, a\n disappear boolean defaulting to\nfalse
, is as follows:",
+ "html": "The stop sending and receiving algorithm given a\n transceiver and, optionally, a\n disappear boolean defaulting to\n false
, is as follows:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let sender be\n transceiver.[[Sender]]
.\n
\n Let receiver be\n transceiver.[[Receiver]]
.\n
\n Let sender be\n transceiver.[[Sender]]
.\n
\n Stop sending media with sender.\n
" + "html": "\n Let receiver be\n transceiver.[[Receiver]]
.\n
\n Send an RTCP BYE for each RTP stream that was being sent\n by sender, as specified in [RFC3550].\n
" + "html": "\n In parallel, stop sending media with sender, and\n send an RTCP BYE for each RTP stream that was being sent\n by sender, as specified in [RFC3550].\n
" }, { - "html": "\n Stop receiving media with receiver.\n
" + "html": "\n In parallel, stop receiving media with receiver.\n
" }, { - "html": "\n If disappear is false
, execute\n the steps for\n receiver.[[ReceiverTrack]]
to be\n ended. This\n fires an event.\n
\n If disappear is false
, execute\n the steps for\n receiver.[[ReceiverTrack]]
to be\n ended. This\n fires an event.\n
\n Set transceiver.[[Direction]]
to\n \"inactive
\".\n
\n Set transceiver.[[Direction]]
to\n \"inactive
\".\n
\n Set transceiver.[[Stopping]]
to\n true
.\n
\n Set transceiver.[[Stopping]]
to\n true
.\n
false
, is as follows:",
+ "html": "The stop the RTCRtpTransceiver algorithm given a\n transceiver and, optionally, a\n disappear boolean defaulting to\n false
, is as follows:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n If transceiver.[[Stopping]]
is\n false
, stop sending and receiving with\n transceiver and disappear.\n
\n If transceiver.[[Stopping]]
is\n false
, stop sending and receiving with\n transceiver and disappear.\n
\n Set transceiver.[[Stopped]]
to\n true
.\n
\n Set transceiver.[[Stopped]]
to\n true
.\n
\n Set transceiver.[[Receptive]]
to\n false
.\n
\n Set transceiver.[[Receptive]]
to\n false
.\n
\n Set transceiver.[[CurrentDirection]]
\n to null
.\n
\n Set transceiver.[[CurrentDirection]]
\n to null
.\n
setCodecPreferences
()
is invoked, the user\n agent MUST run the following steps:",
+ "html": "When setCodecPreferences
()
\n Let transceiver be the RTCRtpTransceiver
\n object this method was invoked on.\n
\n Let transceiver be the RTCRtpTransceiver
\n object this method was invoked on.\n
\n Let codecs be the first argument.\n
" }, { - "html": "\n If codecs is an empty list, set\n transceiver.[[PreferredCodecs]]
to\n codecs and abort these steps.\n
\n If codecs is an empty list, set\n transceiver.[[PreferredCodecs]]
to\n codecs and abort these steps.\n
\n Remove any duplicate values in codecs. Start\n at the back of the list such that the priority of the\n codecs is maintained; the index of the first occurrence\n of a codec within the list is the same before and after\n this step.\n
\n Remove any duplicate values in\n codecs, ensuring that the first occurrence of each\n value remains in place.\n
" }, { - "html": "\n Remove any duplicate values in codecs. Start\n at the back of the list such that the priority of the\n codecs is maintained; the index of the first occurrence\n of a codec within the list is the same before and after\n this step.\n
" + "html": "\n Let kind be the transceiver's transceiver kind.\n
" }, { - "html": "\n Let kind be the transceiver's transceiver kind.\n
" + "html": "\n If the intersection between codecs and\n
.RTCRtpSender
getCapabilities
(kind).
\n or the intersection between codecs and\n codecs
.RTCRtpReceiver
(kind).getCapabilities
\n only contains RTX, RED or FEC codecs or is an empty set,\n throw codecs
InvalidModificationError
. This ensures that we\n always have something to offer, regardless of\n transceiver.direction
.\n
\n If the intersection between codecs and\n RTCRtpSender
.getCapabilities
(kind).codecs
\n or the intersection between codecs and\n RTCRtpReceiver
.getCapabilities
(kind).codecs
\n only contains RTX, RED or FEC codecs or is an empty set,\n throw InvalidModificationError
. This ensures that we\n always have something to offer, regardless of\n transceiver.direction
.\n
\n Let codecCapabilities be the union of\n be\n
.RTCRtpSender
(kind).getCapabilities
\n and\n codecs
RTCRtpReceiver
.getCapabilities
(kind).codecs
.\n
\n Let codecCapabilities be the union of\n RTCRtpSender
.getCapabilities
(kind).codecs
\n and\n RTCRtpReceiver
.getCapabilities
(kind).codecs
.\n
InvalidModificationError
."
+ }
+ ]
},
{
"html": "For each codec in codecs,",
"rationale": "if",
"steps": [
{
- "html": "If codec is not in\n codecCapabilities, throw\n InvalidModificationError
."
+ "html": "If codec does not match any codec\n in codecCapabilities, throw InvalidModificationError
.\n
\n Set transceiver.[[PreferredCodecs]]
to\n codecs.\n
\n If codecs only contains entries for RTX, RED, FEC\n or Comfort Noise or is an empty set,\n throw InvalidModificationError
. This ensures that we\n always have something to offer, regardless of\n transceiver.direction
.\n
\n
\n Set transceiver.[[PreferredCodecs]]
to\n codecs.\n
RTCRtpCodec
dictionaries\n first and second is as follows:",
+ "rationale": ".algorithm",
+ "steps": [
+ {
+ "html": "\n If first.mimeType
is not an\n ASCII case-insensitive match for\n second.mimeType
, return false
.\n
\n If first.clockRate
is different from\n second.clockRate
, return false
.\n
\n If either (but not both) of first.channels
\n and second.channels
are missing,\n or if they both exist and first.channels
\n is different from second.channels
, return\n false
.\n
\n If either (but not both) of first.sdpFmtpLine
\n and second.sdpFmtpLine
are missing,\n or if they both exist and first.sdpFmtpLine
\n is different from second.sdpFmtpLine
, return\n false
.\n
\n Return true
.\n
\n Let transport be the RTCDtlsTransport
object to\n receive the state update and error notification.\n
\n Let transport be the RTCDtlsTransport
object to\n receive the state update and error notification.\n
\n If the state of transport is already\n \"failed
\", abort these steps.\n
\n If the state of transport is already\n \"failed
\", abort these steps.\n
\n Set transport.[[DtlsTransportState]]
to\n \"failed
\".\n
\n Set transport.[[DtlsTransportState]]
to\n \"failed
\".\n
\n Fire an event named error
using the\n RTCErrorEvent
interface with its errorDetail attribute set to\n either \"dtls-failure
\" or\n \"fingerprint-failure
\", as appropriate, and\n other fields set as described under the RTCErrorDetailType
\n enum description, at transport.\n
\n Fire an event named error
using the\n RTCErrorEvent
interface with its errorDetail attribute set to\n either \"dtls-failure
\" or\n \"fingerprint-failure
\", as appropriate, and\n other fields set as described under the RTCErrorDetailType
\n enum description, at transport.\n
\n Fire an event named statechange
at\n transport.\n
\n Fire an event named statechange
at\n transport.\n
RTCDtlsTransport
object for any other reason, the\n user agent MUST queue a task that runs the following steps:",
+ "html": "When the underlying DTLS transport needs to update the state of the\n corresponding RTCDtlsTransport
object for any other reason, the\n user agent MUST queue a task that runs the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let transport be the RTCDtlsTransport
object to\n receive the state update.\n
\n Let transport be the RTCDtlsTransport
object to\n receive the state update.\n
\n Let newState be the new state.\n
" }, { - "html": "\n Set transport.[[DtlsTransportState]]
to\n newState.\n
\n Set transport.[[DtlsTransportState]]
to\n newState.\n
\n If newState is connected
\n then let newRemoteCertificates be the certificate\n chain in use by the remote side, with each certificate encoded in\n binary Distinguished Encoding Rules (DER) [X690], and set\n transport.[[RemoteCertificates]]
to\n newRemoteCertificates.\n
\n If newState is connected
\n then let newRemoteCertificates be the certificate\n chain in use by the remote side, with each certificate encoded in\n binary Distinguished Encoding Rules (DER) [X690], and set\n transport.[[RemoteCertificates]]
to\n newRemoteCertificates.\n
\n Fire an event named statechange
at\n transport.\n
\n Fire an event named statechange
at\n transport.\n
RTCIceTransport
, the user\n agent MUST queue a task that runs the following steps:",
+ "html": "When the ICE Agent indicates that it began gathering a generation of candidates for an RTCIceTransport
RTCPeerConnection
connection, the user\n agent MUST queue a task that runs the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let connection be the RTCPeerConnection
object\n associated with this ICE Agent.\n
\n Let connection be the
object\n associated with this ICE Agent.\n RTCPeerConnection
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n Let transport be the RTCIceTransport
for which\n candidate gathering began.\n
\n Let transport be the
for which\n candidate gathering began.\n RTCIceTransport
\n Set transport.[[IceGathererState]]
to\n gathering
.\n
\n Set transport.[[IceGathererState]]
to\n gathering
.\n
.\n
\n Fire an event named gatheringstatechange
at\n transport.\n
\n Set connection.[[IceGatheringState]]
\n to the value of deriving a new state value as described by the\n RTCIceGatheringState
enum.\n
\n Update the ICE gathering state of connection.\n
" + "html": "\n Let connectionIceGatheringStateChanged be\n true
if\n connection.[[IceGatheringState]]
\n changed in the previous step, otherwise false
.\n
Do not read or modify state beyond this point.
" + }, + { + "html": "\n Fire an event named gatheringstatechange
at\n transport.\n
\n Update the ICE gathering state of connection.\n
\n If connectionIceGatheringStateChanged is\n true
, fire an event named\n icegatheringstatechange
at connection.\n
RTCIceTransport
, and those candidates have been\n surfaced to the application, the user agent MUST queue a task that\n runs the following steps:",
+ "html": "When the ICE Agent is finished gathering a generation of\n candidates for an RTCIceTransport
RTCPeerConnection
connection, and those candidates have been\n surfaced to the application, the user agent MUST queue a task \n Let connection be the RTCPeerConnection
object\n associated with this ICE Agent.\n
\n Let connection be the
object\n associated with this ICE Agent.\n RTCPeerConnection
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n Let transport be the RTCIceTransport
for which\n candidate gathering finished.\n
\n Let transport be the
for which\n candidate gathering finished.\n RTCIceTransport
\n Let newCandidate be the result of creating an RTCIceCandidate with a new dictionary whose\n sdpMid
and\n sdpMLineIndex
are set to the values\n associated with this RTCIceTransport
,\n usernameFragment
is set to the username\n fragment of the generation of candidates for which\n gathering finished, and candidate
is set\n to an empty string.\n
\n If connection.[[PendingLocalDescription]]
is\n not null
, and represents the ICE generation\n for which gathering finished, add\n a=end-of-candidates
to\n connection.[[PendingLocalDescription]]
.sdp.\n
\n Fire an event named icecandidate
using the\n RTCPeerConnectionIceEvent
interface with the candidate\n attribute set to newCandidate at\n connection.\n
\n If connection.[[CurrentLocalDescription]]
is\n not null
, and represents the ICE generation\n for which gathering finished, add\n a=end-of-candidates
to\n connection.[[CurrentLocalDescription]]
.sdp.\n
\n If another generation of candidates is still being\n gathered, abort these steps.\n
" + "html": "\n Let newCandidateendOfGatheringCandidate be the result of creating an\n an RTCIceCandidate with a new dictionary whose\n sdpMid
and\n sdpMLineIndex
are set to the values\n associated with this RTCIceTransport
,\n usernameFragment
is is set to the username\n fragment of the generation of candidates for which\n gathering finished, and candidate
is set\n set to an empty string\"\"
.\n
\n Fire an event named icecandidate
using the\n RTCPeerConnectionIceEvent
interface with the candidate\n attribute set to newCandidateendOfGatheringCandidate at\n connection.\n
\n If another generation of candidates is still being\n gathered, abort these steps.\n
" }, { - "html": "\n Set transport.[[IceGathererState]]
to\n complete
.\n
\n Set transport.[[IceGathererState]] to\n
.\n complete
\n Fire an event named gatheringstatechange
at\n transport.\n
\n Fire an event named
at\n transport.\n gatheringstatechange
\n Update the ICE gathering state of connection.\n
" @@ -3444,81 +3083,113 @@ ] }, { - "html": "When the ICE Agent indicates that a new ICE candidate is\n available for anRTCIceTransport
, either by taking one from the\n ICE candidate pool or gathering it\n from scratch, the user agent MUST queue a task that runs the\n following steps:",
+ "html": "When the ICE Agent has queued the above task, and no other\n generations of candidates is being gathered, the user agent\n MUST also queue a second task to run the following steps:",
+ "rationale": ".algorithm",
+ "steps": [
+ {
+ "html": "\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n Set transport.[[IceGathererState]]
to\n complete
.\n
\n Set connection.[[IceGatheringState]]
\n to the value of deriving a new state value as described by the\n RTCIceGatheringState
enum.\n
\n Let connectionIceGatheringStateChanged be\n true
if\n connection.[[IceGatheringState]]
\n changed in the previous step, otherwise false
.\n
Do not read or modify state beyond this point.
" + }, + { + "html": "\n Fire an event named gatheringstatechange
at\n transport.\n
\n If connectionIceGatheringStateChanged is\n true
, fire an event named\n icegatheringstatechange
at connection.\n
\n Fire an event\n named icecandidate
using the\n RTCPeerConnectionIceEvent
interface with the candidate\n attribute set to null
at connection.\n
RTCIceTransport
, either by taking one from the\n ICE candidate pool or gathering it\n from scratch, the user agent MUST queue a task that runs the\n following steps:",
"rationale": ".algorithm",
"steps": [
{
"html": "\n Let candidate be the available ICE candidate.\n
" }, { - "html": "\n Let connection be the RTCPeerConnection
object\n associated with this ICE Agent.\n
\n Let connection be the RTCPeerConnection
object\n associated with this ICE Agent.\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n If either\n connection.[[PendingLocalDescription]]
or\n connection.[[CurrentLocalDescription]]
are not\n null
, and represent the ICE generation for\n which candidate was gathered, surface the candidate with candidate and connection, and abort\n these steps.\n
\n If either\n connection.[[PendingLocalDescription]]
or\n connection.[[CurrentLocalDescription]]
are not\n null
, and represent the ICE generation for\n which candidate was gathered, surface the candidate with candidate and connection, and abort\n these steps.\n
\n Otherwise, append candidate to\n connection.[[EarlyCandidates]]
.\n
\n Otherwise, append candidate to\n connection.[[EarlyCandidates]]
.\n
\n For each candidate, candidate, in\n connection.[[EarlyCandidates]]
, queue a task\n to surface the candidate with candidate and\n connection.\n
\n For each candidate, candidate, in\n connection.[[EarlyCandidates]]
, queue a task\n to surface the candidate with candidate and\n connection.\n
\n Set connection.[[EarlyCandidates]]
to an empty\n list.\n
\n Set connection.[[EarlyCandidates]]
to an empty\n list.\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n Let transport be the RTCIceTransport
for which\n candidate is being made available.\n
\n Let transport be the RTCIceTransport
for which\n candidate is being made available.\n
\n If connection.[[PendingLocalDescription]]
is\n not null
, and represents the ICE generation\n for which candidate was gathered, add\n candidate to\n connection.[[PendingLocalDescription]]
.sdp.\n
\n If connection.[[PendingLocalDescription]]
is\n not null
, and represents the ICE generation\n for which candidate was gathered, add\n candidate to\n connection.[[PendingLocalDescription]]
.sdp.\n
\n If connection.[[CurrentLocalDescription]]
is\n not null
, and represents the ICE generation\n for which candidate was gathered, add\n candidate to\n connection.[[CurrentLocalDescription]]
.sdp.\n
\n If connection.[[CurrentLocalDescription]]
is\n not null
, and represents the ICE generation\n for which candidate was gathered, add\n candidate to\n connection.[[CurrentLocalDescription]]
.sdp.\n
\n Let newCandidate be the result of creating an RTCIceCandidate with a new dictionary whose\n sdpMid
and\n sdpMLineIndex
are set to the values\n associated with this RTCIceTransport
,\n usernameFragment
is set to the username\n fragment of the candidate, and candidate
\n is set to a string encoded using the candidate-attribute
\n grammar to represent candidate.\n
\n Let newCandidate be the result of creating an RTCIceCandidate with a new dictionary whose\n sdpMid
and\n sdpMLineIndex
are set to the values\n associated with this RTCIceTransport
,\n usernameFragment
is set to the username\n fragment of the candidate, and candidate
\n is set to a string encoded using the candidate-attribute
\n grammar to represent candidate.\n
\n Add newCandidate to transport's set of\n local candidates.\n
" }, { - "html": "\n Fire an event named icecandidate
using the\n RTCPeerConnectionIceEvent
interface with the candidate\n attribute set to newCandidate at\n connection.\n
\n Fire an event named icecandidate
using the\n RTCPeerConnectionIceEvent
interface with the candidate\n attribute set to newCandidate at\n connection.\n
RTCIceTransport
has\n changed either the selected candidate pair, the\n RTCIceTransportState
or both, the user agent MUST queue a task\n that runs the following steps:",
+ "name": "RTCIceTransport/change the selected candidate pair and state",
+ "href": "https://www.w3.org/TR/webrtc/#dfn-change-the-selected-candidate-pair-and-state",
+ "html": "When the ICE Agent indicates that an RTCIceTransport
has\n changed either the selected candidate pair, the\n RTCIceTransportState
or both, the user agent MUST queue a task\n that runs the steps to change the selected candidate pair and state:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let connection be the RTCPeerConnection
object\n associated with this ICE Agent.\n
\n Let connection be the RTCPeerConnection
object\n associated with this ICE Agent.\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n Let transport be the RTCIceTransport
whose state\n is changing.\n
\n Let transport be the RTCIceTransport
whose state\n is changing.\n
\n Let selectedCandidatePairChanged be\n false
.\n
\n Let newCandidatePair be a newly created\n RTCIceCandidatePair
representing the indicated pair if\n one is selected, and null
otherwise.\n
\n Let newCandidatePair be the result of creating an RTCIceCandidatePair with local and remote, representing the local and remote candidates of the indicated pair if one is selected, and null
otherwise.\n
\n Set transport.[[SelectedCandidatePair]]
to\n newCandidatePair.\n
\n Set transport.[[SelectedCandidatePair]]
to\n newCandidatePair.\n
\n Set selectedCandidatePairChanged to\n true
.\n
RTCIceTransportState
was changed,\n run the following steps:",
+ "html": "If transport's RTCIceTransportState
was changed,\n run the following steps:",
"rationale": "set",
"steps": [
{
- "html": "\n Set transport.[[IceTransportState]]
to the\n new indicated RTCIceTransportState
.\n
\n Set transport.[[IceTransportState]]
to the\n new indicated RTCIceTransportState
.\n
\n Set transportIceConnectionStateChanged to\n true
.\n
\n Set connection's ICE connection state to the\n value of deriving a new state value as described by the\n RTCIceConnectionState
enum.\n
\n Set connection.[[IceConnectionState]]
to the\n value of deriving a new state value as described by the\n RTCIceConnectionState
enum.\n
\n If the ice connection state changed in the previous\n step, set connectionIceConnectionStateChanged to\n true
.\n
\n If connection.[[IceConnectionState]]
\n changed in the previous\n step, set connectionIceConnectionStateChanged to\n true
.\n
\n Set connection's connection state to the\n value of deriving a new state value as described by the\n RTCPeerConnectionState
enum.\n
\n Set connection.[[ConnectionState]]
to the\n value of deriving a new state value as described by the\n RTCPeerConnectionState
enum.\n
\n If the connection state changed in the previous step,\n set connectionStateChanged to true
.\n
\n If connection.[[ConnectionState]]
\n changed in the previous step,\n set connectionStateChanged to true
.\n
\n If selectedCandidatePairChanged is true
,\n fire an event named selectedcandidatepairchange
at\n transport.\n
\n If selectedCandidatePairChanged is true
,\n fire an event named selectedcandidatepairchange
at\n transport.\n
\n If transportIceConnectionStateChanged is\n true
, fire an event named statechange
at\n transport.\n
\n If connectionIceConnectionStateChanged is\n true
, fire an event named\n iceconnectionstatechange
at connection.\n
\n If connectionStateChanged is true
, fire an event named connectionstatechange
at\n connection.\n
RTCIceCandidate
objects, local and remote, run the following steps:",
+ "rationale": ".algorithm",
+ "steps": [
+ {
+ "html": "Let candidatePair be a newly created RTCIceCandidatePair
object."
},
{
- "html": "\n If transportIceConnectionStateChanged is\n true
, fire an event named statechange
at\n transport.\n
\n If connectionIceConnectionStateChanged is\n true
, fire an event named\n iceconnectionstatechange
at connection.\n
\n If connectionStateChanged is true
, fire an event named connectionstatechange
at\n connection.\n
createDataChannel
method is invoked, the user\n agent MUST run the following steps.",
+ "html": "When the createDataChannel
method is invoked, the user\n agent MUST run the following steps.",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let connection be the RTCPeerConnection
\n object on which the method is invoked.\n
\n Let connection be the RTCPeerConnection
\n object on which the method is invoked.\n
\n If connection.[[IsClosed]]
is\n true
, throw an\n InvalidStateError
.\n
\n If connection.[[IsClosed]]
is\n true
, throw an\n InvalidStateError
.\n
\n Create an RTCDataChannel, channel.\n
" + "html": "\n Create an RTCDataChannel, channel.\n
" }, { - "html": "\n Initialize\n channel.[[DataChannelLabel]]
to the\n value of the first argument.\n
\n Initialize\n channel.[[DataChannelLabel]]
to the\n value of the first argument.\n
\n If the UTF-8 representation of\n [[DataChannelLabel]]
is longer than 65535 bytes,\n throw a TypeError
.\n
\n If the UTF-8 representation of\n [[DataChannelLabel]]
is longer than 65535 bytes,\n throw a TypeError
.\n
\n Let options be the second argument.\n
" }, { - "html": "\n Initialize\n channel.[[MaxPacketLifeTime]]
to\n option.maxPacketLifeTime
,\n if present, otherwise null
.\n
\n Initialize\n channel.[[MaxPacketLifeTime]]
to\n option.maxPacketLifeTime
,\n if present, otherwise null
.\n
\n Initialize channel.[[MaxRetransmits]]
\n to\n option.maxRetransmits
,\n if present, otherwise null
.\n
\n Initialize channel.[[MaxRetransmits]]
\n to\n option.maxRetransmits
,\n if present, otherwise null
.\n
\n Initialize channel.[[Ordered]]
to\n option.ordered
.\n
\n Initialize channel.[[Ordered]]
to\n option.ordered
.\n
\n Initialize\n channel.[[DataChannelProtocol]]
to\n option.protocol
.\n
\n Initialize\n channel.[[DataChannelProtocol]]
to\n option.protocol
.\n
\n If the UTF-8 representation of\n [[DataChannelProtocol]]
is longer than 65535\n bytes, throw a TypeError
.\n
\n If the UTF-8 representation of\n [[DataChannelProtocol]]
is longer than 65535\n bytes, throw a TypeError
.\n
\n Initialize channel.[[Negotiated]]
to\n option.negotiated
.\n
\n Initialize channel.[[Negotiated]]
to\n option.negotiated
.\n
\n Initialize channel.[[DataChannelId]]
\n to the value of\n option.id
, if it is\n present and [[Negotiated]]
is true, otherwise\n null
.\n
\n Initialize channel.[[DataChannelId]]
\n to the value of\n option.id
, if it is\n present and [[Negotiated]]
is true, otherwise\n null
.\n
\n If [[Negotiated]]
is true
and\n [[DataChannelId]]
is null
, throw a TypeError
.\n
\n If [[Negotiated]]
is true
and\n [[DataChannelId]]
is null
, throw a TypeError
.\n
\n If both [[MaxPacketLifeTime]]
and\n [[MaxRetransmits]]
attributes are set (not null),\n throw a TypeError
.\n
\n If both [[MaxPacketLifeTime]]
and\n [[MaxRetransmits]]
attributes are set (not null),\n throw a TypeError
.\n
\n If a setting, either [[MaxPacketLifeTime]]
or\n [[MaxRetransmits]]
, has been set to indicate\n unreliable mode, and that value exceeds the maximum value\n supported by the user agent, the value MUST be set to the\n user agents maximum value.\n
\n If a setting, either [[MaxPacketLifeTime]]
or\n [[MaxRetransmits]]
, has been set to indicate\n unreliable mode, and that value exceeds the maximum value\n supported by the user agent, the value MUST be set to the\n user agents maximum value.\n
\n If [[DataChannelId]]
is equal to 65535, which is\n greater than the maximum allowed ID of 65534 but still\n qualifies as an unsigned\n short, throw a TypeError
.\n
\n If [[DataChannelId]]
is equal to 65535, which is\n greater than the maximum allowed ID of 65534 but still\n qualifies as an unsigned\n short, throw a TypeError
.\n
\n If the [[DataChannelId]]
slot is\n null
(due to no ID being passed into\n createDataChannel
, or [[Negotiated]]
being\n false), and the DTLS role of the SCTP transport has\n already been negotiated, then initialize\n [[DataChannelId]]
to a value generated by the\n user agent, according to [RFC8832], and\n skip to the next step. If no available ID could be\n generated, or if the value of the\n [[DataChannelId]]
slot is being used by an\n existing RTCDataChannel
, throw an\n OperationError
exception.\n
\n If the [[DataChannelId]]
slot is\n null
(due to no ID being passed into\n createDataChannel
, or [[Negotiated]]
being\n false), and the DTLS role of the SCTP transport has\n already been negotiated, then initialize\n [[DataChannelId]]
to a value generated by the\n user agent, according to [RFC8832], and\n skip to the next step. If no available ID could be\n generated, or if the value of the\n [[DataChannelId]]
slot is being used by an\n existing RTCDataChannel
, throw an\n OperationError
exception.\n
\n Let transport be\n connection.[[SctpTransport]]
.\n
\n If the [[DataChannelId]]
slot is not\n null
, transport is in the\n \"connected
\" state and\n [[DataChannelId]]
is greater or equal to\n transport.[[MaxChannels]]
, throw an OperationError
.\n
\n Let transport be\n connection.[[SctpTransport]]
.\n
\n If the [[DataChannelId]]
slot is not\n null
, transport is in the\n \"connected
\" state and\n [[DataChannelId]]
is greater or equal to\n transport.[[MaxChannels]]
, throw an OperationError
.\n
\n If channel is the first RTCDataChannel
\n created on connection, update the negotiation-needed flag for connection.\n
\n If channel is the first RTCDataChannel
\n created on connection, update the negotiation-needed flag for connection.\n
\n Append channel to\n connection.[[DataChannels]]
.\n
\n Return channel and continue the following\n steps in parallel.\n
" + "html": "\n Return channel and continue the following\n steps in parallel.\n
" }, { - "html": "\n Create channel's associated underlying data transport and configure it according to the relevant\n properties of channel.\n
" + "html": "\n Create channel's associated underlying data transport and configure it according to the relevant\n properties of channel.\n
" } ] }, { "name": "RTCSctpTransport/[[SctpTransportState]]", "href": "https://www.w3.org/TR/webrtc/#dfn-sctptransportstate", - "html": "To create anRTCSctpTransport
with an initial\n state, initialState, run the following steps:",
+ "html": "To create an RTCSctpTransport
with an initial\n state, initialState, run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let transport be a new RTCSctpTransport
\n object.\n
\n Let transport be a new RTCSctpTransport
\n object.\n
\n Let transport have a\n [[SctpTransportState]] internal slot initialized\n to initialState.\n
" }, { - "html": "\n Let transport have a\n [[MaxMessageSize]] internal slot and run the\n steps labeled update the data max message size to\n initialize it.\n
" + "html": "\n Let transport have a\n [[MaxMessageSize]] internal slot and run the\n steps labeled update the data max message size to\n initialize it.\n
" }, { "html": "\n Let transport have a [[MaxChannels]]\n internal slot initialized to null
.\n
RTCSctpTransport
run the following steps:",
+ "html": "To update the data max message size of an\n RTCSctpTransport
run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let transport be the RTCSctpTransport
object\n to be updated.\n
\n Let transport be the RTCSctpTransport
object\n to be updated.\n
\n Let remoteMaxMessageSize be the value of the\n max-message-size
SDP attribute read\n from the remote description, as described in [RFC8841]\n (section 6), or 65536 if the attribute is missing.\n
\n Let canSendSize be the number of bytes that this\n client can send (i.e. the size of the local send buffer) or 0\n if the implementation can handle messages of any size.\n
" }, { - "html": "\n If both remoteMaxMessageSize and\n canSendSize are 0, set [[MaxMessageSize]]
\n to the positive Infinity value.\n
\n If both remoteMaxMessageSize and\n canSendSize are 0, set [[MaxMessageSize]]
\n to the positive Infinity value.\n
\n Else, if either remoteMaxMessageSize or\n canSendSize is 0, set [[MaxMessageSize]]
\n to the larger of the two.\n
\n Else, if either remoteMaxMessageSize or\n canSendSize is 0, set [[MaxMessageSize]]
\n to the larger of the two.\n
\n Else, set [[MaxMessageSize]]
to the smaller of\n remoteMaxMessageSize or canSendSize.\n
\n Else, set [[MaxMessageSize]]
to the smaller of\n remoteMaxMessageSize or canSendSize.\n
RTCSctpTransport
has been established, run the following steps:",
+ "html": "Once an SCTP transport\n is connected, meaning the SCTP association of an RTCSctpTransport
has been established, run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let transport be the RTCSctpTransport
object.\n
\n Let transport be the RTCSctpTransport
object.\n
\n Let connection be the RTCPeerConnection
object\n associated with transport.\n
\n Let connection be the RTCPeerConnection
object\n associated with transport.\n
\n Set [[MaxChannels]]
to the minimum of the negotiated\n amount of incoming and outgoing SCTP streams.\n
\n Set [[MaxChannels]]
to the minimum of the negotiated\n amount of incoming and outgoing SCTP streams.\n
RTCDataChannel
:",
+ "html": "For each of connection's RTCDataChannel
:",
"rationale": "let",
"steps": [
{
- "html": "\n Let channel be the RTCDataChannel
object.\n
\n Let channel be the RTCDataChannel
object.\n
\n If channel.[[DataChannelId]]
is\n null
, initialize [[DataChannelId]]
\n to the value generated by the underlying sctp data\n channel, according to [RFC8832].\n
\n If channel.[[DataChannelId]]
is\n null
, initialize [[DataChannelId]]
\n to the value generated by the underlying sctp data\n channel, according to [RFC8832].\n
\n If channel.[[DataChannelId]]
is\n greater or equal to\n transport.[[MaxChannels]]
, or the\n previous step failed to assign an id, close the channel due\n to a failure. Otherwise, announce the channel as open.\n
\n If channel.[[DataChannelId]]
is\n greater or equal to\n transport.[[MaxChannels]]
, or the\n previous step failed to assign an id, close the channel due\n to a failure. Otherwise, announce the channel as open.\n
\n Fire an event named statechange
at\n transport.\n
\n Fire an event named statechange
at\n transport.\n
RTCDataChannel
, run the following\n steps:",
+ "html": "To create an RTCDataChannel
, run the following\n steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let channel be a newly created RTCDataChannel
\n object.\n
\n Let channel be a newly created RTCDataChannel
\n object.\n
\n Let channel have a [[ReadyState]]\n internal slot initialized to\n \"connecting
\".\n
\n Let channel have a [[ReadyState]]\n internal slot initialized to\n \"connecting
\".\n
\n Let channel have a [[BufferedAmount]]\n internal slot initialized to 0
.\n
\n Let channel have internal slots named\n [[DataChannelLabel]], [[Ordered]],\n [[MaxPacketLifeTime]],\n [[MaxRetransmits]],\n [[DataChannelProtocol]],\n [[Negotiated]], and [[DataChannelId]].\n
" }, + { + "html": "true
."
+ },
+ {
+ "rationale": "set",
+ "steps": [
+ {
+ "html": "Set channel.[[IsTransferable]]
to false
."
+ }
+ ],
+ "html": "This task needs to run before any task enqueued by the receiving messages on a data channel algorithm for channel.\n\t\tThis ensures that no message is lost during the transfer of a RTCDataChannel
.
\n Return channel.\n
" } @@ -3769,86 +3475,95 @@ { "name": "announce the rtcdatachannel as open", "href": "https://www.w3.org/TR/webrtc/#announce-datachannel-open", - "html": "When the user agent is to announce anRTCDataChannel
as\n open, the user agent MUST queue a task to run the following\n steps:",
+ "html": "When the user agent is to announce an RTCDataChannel
as\n open, the user agent MUST queue a task to run the following\n steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n If the associated RTCPeerConnection
object's\n [[IsClosed]]
slot is true
, abort these\n steps.\n
\n If the associated RTCPeerConnection
object's\n [[IsClosed]]
slot is true
, abort these\n steps.\n
\n Let channel be the RTCDataChannel
object to be\n announced.\n
\n Let channel be the RTCDataChannel
object to be\n announced.\n
\n If channel.[[ReadyState]]
is\n \"closing
\" or\n \"closed
\", abort these steps.\n
\n If channel.[[ReadyState]]
is\n \"closing
\" or\n \"closed
\", abort these steps.\n
\n Set channel.[[ReadyState]]
to\n \"open
\".\n
\n Set channel.[[ReadyState]]
to\n \"open
\".\n
\n Fire an event named open
at channel.\n
\n Fire an event named open
at channel.\n
negotiated
\n unset or set to false), the user agent of the peer that did not\n initiate the creation process MUST queue a task to run the\n following steps:",
+ "html": "When an underlying data transport is to be announced (the\n other peer created a channel with negotiated
\n unset or set to false), the user agent of the peer that did not\n initiate the creation process MUST queue a task to run the\n following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let connection be the RTCPeerConnection
object\n associated with the underlying data transport.\n
\n Let connection be the RTCPeerConnection
object\n associated with the underlying data transport.\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n If connection.[[IsClosed]]
is\n true
, abort these steps.\n
\n Create an RTCDataChannel, channel.\n
" }, { - "html": "\n Create an RTCDataChannel, channel.\n
" + "html": "\n Let configuration be an information bundle received\n from the other peer as a part of the process to establish the\n underlying data transport described by the WebRTC\n DataChannel Protocol specification [RFC8832].\n
" }, { - "html": "\n Let configuration be an information bundle received\n from the other peer as a part of the process to establish the\n underlying data transport described by the WebRTC\n DataChannel Protocol specification [RFC8832].\n
" + "html": "\n Initialize channel.[[DataChannelLabel]]
,\n [[Ordered]]
, [[MaxPacketLifeTime]]
,\n [[MaxRetransmits]]
, [[DataChannelProtocol]]
,\n and [[DataChannelId]]
internal slots to the\n corresponding values in configuration.\n
\n Initialize channel.[[DataChannelLabel]]
,\n [[Ordered]]
, [[MaxPacketLifeTime]]
,\n [[MaxRetransmits]]
, [[DataChannelProtocol]]
,\n and [[DataChannelId]]
internal slots to the\n corresponding values in configuration.\n
\n Initialize channel.[[Negotiated]]
to\n false
.\n
\n Initialize channel.[[Negotiated]]
to\n false
.\n
\n Append channel to\n connection.[[DataChannels]]
.\n
\n Set channel.[[ReadyState]]
to\n \"open
\" (but do not fire the open
\n event, yet).\n
\n Set channel.[[ReadyState]]
to\n \"open
\" (but do not fire the open
\n event, yet).\n
\n Fire an event named datachannel
using the\n RTCDataChannelEvent
interface with the\n channel
attribute set to\n channel at connection.\n
\n Fire an event named datachannel
using the\n RTCDataChannelEvent
interface with the\n channel
attribute set to\n channel at connection.\n
\n Announce the data channel as open.\n
" + "html": "\n Announce the data channel as open.\n
" } ] }, { "name": "closing procedure", "href": "https://www.w3.org/TR/webrtc/#data-transport-closing-procedure", - "html": "AnRTCDataChannel
object's underlying data transport may\n be torn down in a non-abrupt manner by running the closing procedure. When\n that happens the user agent MUST queue a task to run the following\n steps:",
+ "html": "An RTCDataChannel
object's underlying data transport may\n be torn down in a non-abrupt manner by running the closing procedure. When\n that happens the user agent MUST queue a task to run the following\n steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let channel be the RTCDataChannel
object whose\n underlying data transport was closed.\n
\n Let channel be the RTCDataChannel
object whose\n underlying data transport was closed.\n
\n Unless the procedure was initiated by\n channel.close
, set\n channel.[[ReadyState]]
to\n \"closing
\" and fire an event named\n closing
at channel.\n
\n Let connection be the RTCPeerConnection
object\n associated with channel.\n
\n Remove channel from connection.[[DataChannels]]
.\n
\n
\n Unless the procedure was initiated by\n channel.close
, set\n channel.[[ReadyState]]
to\n \"closing
\" and fire an event named\n closing
at channel.\n
\n Finish sending all currently pending messages of the\n channel.\n
" }, { - "html": "\n Follow the closing procedure defined for the\n channel's underlying data transport :\n
", + "html": "\n Follow the closing procedure defined for the\n channel's underlying data transport :\n
", "ignored": [ "In the case of an SCTP-based transport, follow [RFC8831], section 6.7." ] }, { - "html": "\n Close the channel's data transport\n by following the associated procedure.\n
" + "html": "\n Render Close the channel's data transport\n \n by following the associated procedure.\n closed
RTCDataChannel
object's underlying data transport\n has been closed, the user agent MUST queue a task to run the\n following steps:",
+ "html": "When an RTCDataChannel
object's underlying data transport\n has been closed, the user agent MUST queue a task to run the\n following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let channel be the RTCDataChannel
object whose\n underlying data transport was closed.\n
\n Let channel be the RTCDataChannel
object whose\n underlying data transport was closed.\n
[[ReadyState]]
is\n \"closed
\", abort these steps."
+ },
+ {
+ "html": "\n Set channel.[[ReadyState]]
to\n \"closed
\".\n
\n Remove channel from connection.[[DataChannels]]
\n if it is still there.\n
\n If the transport was closed\n with an error, fire an event named error
using the RTCErrorEvent
\n interface with its errorDetail
attribute set to\n \"sctp-failure
\" at channel.\n
\n Fire an event named close at channel.\n
" + } + ] + }, + { + "html": "TheRTCDataChannel
transfer steps, given value and dataHolder, are:",
+ "rationale": "if",
+ "steps": [
+ {
+ "html": "If value.[[IsTransferable]]
is false
, throw a DataCloneError
DOMException.
Set dataHolder.[[ReadyState]]
to value.[[ReadyState]]
.
Set dataHolder.[[DataChannelLabel]]
to value.[[DataChannelLabel]]
.
Set dataHolder.[[Ordered]]
to value.[[Ordered]]
.
Set dataHolder.[[MaxPacketLifeTime]]
to value..[[MaxPacketLifeTime]]
Set dataHolder.[[MaxRetransmits]]
to value.[[MaxRetransmits]]
.
Set dataHolder.[[DataChannelProtocol]]
to value.[[DataChannelProtocol]]
.
Set dataHolder.[[Negotiated]]
to value.[[Negotiated]]
.
Set dataHolder.[[DataChannelId]]
to value.[[DataChannelId]]
.
Set dataHolder’s underlying data transport to value underlying data transport.
" + }, + { + "html": "Set value.[[IsTransferable]]
to false
.
Set value.[[ReadyState]]
to \"closed\".
RTCDataChannel
transfer-receiving steps, given dataHolder and channel, are:",
+ "rationale": "initialize",
+ "steps": [
+ {
+ "html": "Initialize channel.[[ReadyState]]
to dataHolder.[[ReadyState]]
.
Initialize channel.[[DataChannelLabel]]
to dataHolder.[[DataChannelLabel]]
.
Initialize channel.[[Ordered]]
to dataHolder.[[Ordered]]
.
Initialize channel.[[MaxPacketLifeTime]]
to dataHolder.[[MaxPacketLifeTime]]
.
[[ReadyState]]
is\n \"closed
\", abort these steps."
+ "html": "Initialize channel.[[MaxRetransmits]]
to dataHolder.[[MaxRetransmits]]
.
\n Set channel.[[ReadyState]]
to\n \"closed
\".\n
Initialize channel.[[DataChannelProtocol]]
to dataHolder.[[DataChannelProtocol]]
.
\n If the transport was closed\n with an error, fire an event named error
using the RTCErrorEvent
\n interface with its errorDetail
attribute set to\n \"sctp-failure
\" at channel.\n
Initialize channel.[[Negotiated]]
to dataHolder.[[Negotiated]]
.
\n Fire an event named close at channel.\n
" + "html": "Initialize channel.[[DataChannelId]]
to dataHolder.[[DataChannelId]]
.
Initialize channel’s underlying data transport to dataHolder’s underlying data transport.
" } ] }, { "name": "unable to create an RTCDataChannel", "href": "https://www.w3.org/TR/webrtc/#dfn-unable-to-create-an-rtcdatachannel", - "html": "In some cases, the user agent may be unable to create an\nRTCDataChannel
's underlying data transport. For\n example, the data channel's id
may be outside\n the range negotiated by the [RFC8831] implementations in the\n SCTP handshake. When the user agent determines that an\n RTCDataChannel
's underlying data transport cannot be\n created, the user agent MUST queue a task to run the following\n steps:",
+ "html": "In some cases, the user agent may be unable to create an\n RTCDataChannel
's underlying data transport. For\n example, the data channel's id
may be outside\n the range negotiated by the [RFC8831] implementations in the\n SCTP handshake. When the user agent determines that an\n RTCDataChannel
's underlying data transport cannot be\n created, the user agent MUST queue a task to run the following\n steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let channel be the RTCDataChannel
object for\n which the user agent could not create an underlying data transport.\n
\n Let channel be the RTCDataChannel
object for\n which the user agent could not create an underlying data transport.\n
\n Set channel.[[ReadyState]]
to\n \"closed
\".\n
\n Set channel.[[ReadyState]]
to\n \"closed
\".\n
\n Fire an event named error
using the\n RTCErrorEvent
interface with the errorDetail
\n attribute set to \"data-channel-failure
\"\n at channel.\n
\n Fire an event named error
using the\n RTCErrorEvent
interface with the errorDetail
\n attribute set to \"data-channel-failure
\"\n at channel.\n
\n Fire an event named close at channel.\n
" + "html": "\n Fire an event named close at channel.\n
" } ] }, { - "html": "When anRTCDataChannel
message has\n been received via the underlying data transport with\n type type and data rawData, the user agent\n MUST queue a task to run the following steps:",
+ "html": "When an RTCDataChannel
message has\n been received via the underlying data transport with\n type type and data rawData, the user agent\n MUST queue a task to run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let channel be the RTCDataChannel
object for\n which the user agent has received a message.\n
\n Let channel be the RTCDataChannel
object for\n which the user agent has received a message.\n
\n Let connection be the RTCPeerConnection
object\n associated with channel.\n
\n Let connection be the RTCPeerConnection
object\n associated with channel.\n
\n If channel.[[ReadyState]]
is not\n \"open
\", abort these steps and discard\n rawData.\n
\n If channel.[[ReadyState]]
is not\n \"open
\", abort these steps and discard\n rawData.\n
\n Execute the sub step by switching on type and\n channel.binaryType
:\n
\n If type indicates that rawData is a\n string
:\n
\n Let data be a DOMString that represents the result\n of decoding rawData as UTF-8.\n
\n\n If type indicates that rawData is\n binary and binaryType
is \"blob\"
:\n
\n Let data be a new Blob
object containing\n rawData as its raw data source.\n
\n If type indicates that rawData is\n binary and binaryType
is \"arraybuffer\"
:\n
\n Let data be a new ArrayBuffer
object\n containing rawData as its raw data source.\n
\n Execute the sub step by switching on type and\n channel.binaryType
:\n
\n If type indicates that rawData is a\n string
:\n
\n Let data be a DOMString that represents the result\n of decoding rawData as UTF-8.\n
\n\n If type indicates that rawData is\n binary and binaryType
is \"blob\"
:\n
\n Let data be a new Blob
object containing\n rawData as its raw data source.\n
\n If type indicates that rawData is\n binary and binaryType
is \"arraybuffer\"
:\n
\n Let data be a new ArrayBuffer
object\n containing rawData as its raw data source.\n
\n Fire an event named message
using the\n MessageEvent
interface with its origin
attribute initialized to the\n serialization of an origin of\n connection.[[DocumentOrigin]]
, and the\n data
attribute initialized to\n data at channel.\n
\n Fire an event named message
using the\n MessageEvent
interface with its origin
attribute initialized to the\n serialization of an origin of\n connection.[[DocumentOrigin]]
, and the\n data
attribute initialized to\n data at channel.\n
close
method is called, the user agent MUST run\n the following steps:",
+ "html": "When the close
method is called, the user agent MUST run\n the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let channel be the RTCDataChannel
object\n which is about to be closed.\n
\n Let channel be the RTCDataChannel
object\n which is about to be closed.\n
\n If channel.[[ReadyState]]
is\n \"closing
\" or\n \"closed
\", then abort these steps.\n
\n If channel.[[ReadyState]]
is\n \"closing
\" or\n \"closed
\", then abort these steps.\n
\n Set channel.[[ReadyState]]
to\n \"closing
\".\n
\n Set channel.[[ReadyState]]
to\n \"closing
\".\n
\n If the closing procedure has not started yet, start\n it.\n
" + "html": "\n If the closing procedure has not started yet, start\n it.\n
" } ] }, { "name": "send() algorithm", "href": "https://www.w3.org/TR/webrtc/#datachannel-send", - "html": "Thesend()
method is overloaded to\n handle different data argument types. When any version of the\n method is called, the user agent MUST run the following\n steps:",
+ "html": "The send()
method is overloaded to\n handle different data argument types. When any version of the\n method is called, the user agent MUST run the following\n steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "\n Let channel be the RTCDataChannel
object on\n which data is to be sent.\n
\n Let channel be the RTCDataChannel
object on\n which data is to be sent.\n
Set channel.[[IsTransferable]]
to false
.
\n If channel.[[ReadyState]]
is not\n \"open
\", throw an\n InvalidStateError
.\n
\n If channel.[[ReadyState]]
is not\n \"open
\", throw an\n InvalidStateError
.\n
\n Execute the sub step that corresponds to the type of the\n methods argument:\n
\n\n string
object:\n
\n Let data be a byte buffer that represents the\n result of encoding the method's argument as UTF-8.\n
\n\n Blob
object:\n
\n Let data be the raw data represented by the\n Blob
object.\n
\n ArrayBuffer
object:\n
\n Let data be the data stored in the buffer\n described by the ArrayBuffer
object.\n
\n ArrayBufferView
object:\n
\n Let data be the data stored in the section of\n the buffer described by the ArrayBuffer
object that\n the ArrayBufferView
object references.\n
\n Execute the sub step that corresponds to the type of the\n methods argument:\n
\n\n string
object:\n
\n Let data be a byte buffer that represents the\n result of encoding the method's argument as UTF-8.\n
\n\n Blob
object:\n
\n Let data be the raw data represented by the\n Blob
object.\n
\n ArrayBuffer
object:\n
\n Let data be the data stored in the buffer\n described by the ArrayBuffer
object.\n
\n ArrayBufferView
object:\n
\n Let data be the data stored in the section of\n the buffer described by the ArrayBuffer
object that\n the ArrayBufferView
object references.\n
\n If the byte size of data exceeds the value of\n maxMessageSize
on channel's\n associated RTCSctpTransport
, throw a\n TypeError
.\n
\n If the byte size of data exceeds the value of\n maxMessageSize
on channel's\n associated RTCSctpTransport
, throw a\n TypeError
.\n
\n Queue data for transmission on\n channel's underlying data transport. If\n queuing data is not possible because not enough\n buffer space is available, throw an\n OperationError
.\n
\n Queue data for transmission on\n channel's underlying data transport. If\n queuing data is not possible because not enough\n buffer space is available, throw an\n OperationError
.\n
\n Increase the value of the [[BufferedAmount]]
slot by\n the byte size of data.\n
\n Increase the value of the [[BufferedAmount]]
slot by\n the byte size of data.\n
\n Let dtmf be a newly created RTCDTMFSender
object.\n
\n Let dtmf be a newly created RTCDTMFSender
object.\n
\n Let dtmf have a [[Duration]] internal\n slot.\n
" @@ -3985,22 +3781,22 @@ ] }, { - "name": "RTCDTMFSender/insertDTMF()", - "href": "https://www.w3.org/TR/webrtc/#dom-RTCDTMFSender-insertDTMF", - "html": "When theinsertDTMF
()
method is invoked, the user agent\n MUST run the following steps:",
+ "name": "DTMF playout task steps",
+ "href": "https://www.w3.org/TR/webrtc/#dfn-dtmf-playout-task-steps",
+ "html": "When the insertDTMF
()
method is invoked, the user agent\n MUST run the following steps:",
"rationale": ".algorithm",
"steps": [
{
- "html": "Let sender be the\n RTCRtpSender
used to send DTMF."
+ "html": "Let sender be the\n RTCRtpSender
used to send DTMF."
},
{
- "html": "\n Let transceiver be the RTCRtpTransceiver
\n object associated with sender.\n
\n Let transceiver be the RTCRtpTransceiver
\n object associated with sender.\n
RTCDTMFSender
associated with sender."
+ "html": "Let dtmf be the\n RTCDTMFSender
associated with sender."
},
{
- "html": "If determine if DTMF can be sent for\n dtmf returns false
, throw an InvalidStateError
."
+ "html": "If determine if DTMF can be sent for\n dtmf returns false
, throw an InvalidStateError
."
},
{
"html": "Let tones be the\n method's first argument."
@@ -4012,53 +3808,56 @@
"html": "Let interToneGap be the\n method's third argument."
},
{
- "html": "If \n tones contains any unrecognized
characters, throw an InvalidCharacterError
."
+ "html": "If \n tones contains any unrecognized
characters, throw an InvalidCharacterError
."
},
{
- "html": "Set the object's [[ToneBuffer]]
slot to\n tones."
+ "html": "Set the object's [[ToneBuffer]]
slot to\n tones."
},
{
- "html": "Set dtmf.[[Duration]]
to the value of\n duration."
+ "html": "Set dtmf.[[Duration]]
to the value of\n duration."
},
{
- "html": "Set dtmf.[[InterToneGap]]
to the value\n of interToneGap."
+ "html": "Set dtmf.[[InterToneGap]]
to the value\n of interToneGap."
},
{
- "html": "If the value of duration is less than 40 ms, set\n dtmf.[[Duration]]
to 40 ms."
+ "html": "If the value of duration is less than 40 ms, set\n dtmf.[[Duration]]
to 40 ms."
},
{
- "html": "If the value of duration parameter is greater than\n 6000 ms, set dtmf.[[Duration]]
to 6000 ms."
+ "html": "If the value of duration parameter is greater than\n 6000 ms, set dtmf.[[Duration]]
to 6000 ms."
},
{
- "html": "If the\n value of interToneGap is less than 30 ms, set\n dtmf.[[InterToneGap]]
to 30 ms."
+ "html": "If the\n value of interToneGap is less than 30 ms, set\n dtmf.[[InterToneGap]]
to 30 ms."
},
{
- "html": "If the value of interToneGap is greater than 6000\n ms, set dtmf.[[InterToneGap]]
to 6000 ms."
+ "html": "If the value of interToneGap is greater than 6000\n ms, set dtmf.[[InterToneGap]]
to 6000 ms."
},
{
"html": "If \n [[ToneBuffer]] slot is an empty string, abort these\n steps."
},
{
- "html": "If a\n Playout task is scheduled to be run, abort these\n steps; otherwise queue a task that runs the following steps\n (Playout task):",
+ "html": "If a\n task to run the DTMF playout task steps is scheduled to be run,\n abort these steps; otherwise queue a task that runs the following\n DTMF playout task steps:",
"rationale": "if",
"steps": [
{
- "html": "If\n transceiver.[[CurrentDirection]]
is\n neither \"sendrecv
\" nor\n \"sendonly
\", abort these\n steps."
+ "html": ""
},
{
- "html": "If the [[ToneBuffer]]
slot contains the empty\n string, fire an event named tonechange
using\n the RTCDTMFToneChangeEvent
interface with the\n tone
attribute set to an empty\n string at the RTCDTMFSender
object and abort these\n steps."
+ "html": "
sendrecv
\" nor\n \"
sendonly
\"false
, abort these\n steps."
},
{
- "html": "Remove the first character from the\n [[ToneBuffer]]
slot and let that character be\n tone."
+ "html": "If the [[ToneBuffer]]
slot contains the empty\n string, fire an event named tonechange
using\n the RTCDTMFToneChangeEvent
interface with the\n tone
attribute set to an empty\n string at the RTCDTMFSender
object and abort these\n steps."
},
{
- "html": "If tone is \",\"
delay sending\n tones for 2000
ms on the associated RTP\n media stream, and queue a task to be executed in\n 2000
ms from now that runs the steps\n labelled Playout task."
+ "html": "Remove the first character from the\n [[ToneBuffer]]
slot and let that character be\n tone."
},
{
- "html": "If tone is not \",\"
start\n playout of tone for [[Duration]]
ms on\n the associated RTP media stream, using the appropriate\n codec, then queue a task to be executed in\n [[Duration]]
+ [[InterToneGap]]
ms from\n now that runs the steps labelled Playout task."
+ "html": "If tone is \",\"
delay sending\n tones for 2000
ms on the associated RTP\n media stream, and queue a task to be executed in\n 2000
ms from now that runs the\n DTMF playout task steps."
},
{
- "html": "Fire an event named tonechange
using the\n RTCDTMFToneChangeEvent
interface with the\n tone
attribute set to\n tone at the RTCDTMFSender
object."
+ "html": "If tone is not \",\"
start\n playout of tone for [[Duration]]
ms on\n the associated RTP media stream, using the appropriate\n codec, then queue a task to be executed in\n [[Duration]]
+ [[InterToneGap]]
ms from\n now that runs the DTMF playout task steps."
+ },
+ {
+ "html": "Fire an event named tonechange
using the\n RTCDTMFToneChangeEvent
interface with the\n tone
attribute set to\n tone at the RTCDTMFSender
object."
}
]
}
@@ -4067,29 +3866,32 @@
{
"name": "determine if DTMF can be sent",
"href": "https://www.w3.org/TR/webrtc/#dfn-determine-if-dtmf-can-be-sent",
- "html": "\n To determine if DTMF can be sent for an RTCDTMFSender
\n instance dtmfSender, the user agent MUST run the following\n steps:\n ",
+ "html": "To determine if DTMF can be sent for an RTCDTMFSender
\n instance dtmfSender, the user agent MUST RTCRtpSender
associated with dtmfSender."
+ "html": "Let sender be the\n RTCRtpSender
associated with dtmfSender."
+ },
+ {
+ "html": "Let transceiver be the\n RTCRtpTransceiver
associated with sender."
},
{
- "html": "Let transceiver be the\n RTCRtpTransceiver
associated with sender."
+ "html": "Let connection be the\n RTCPeerConnection
associated with transceiver."
},
{
- "html": "Let connection be the\n RTCPeerConnection
associated with transceiver."
+ "html": "If connection's RTCPeerConnectionState
is not\n \"connected
\" return false
."
},
{
- "html": "If connection's RTCPeerConnectionState
is not\n \"connected
\" return false
."
+ "html": "[[Stopping]]
is\n true
return false
.\n "
},
{
- "html": "If sender.[[SenderTrack]]
is null
\n return false
."
+ "html": "If sender.[[SenderTrack]]
is null
\n return false
."
},
{
- "html": "If transceiver.[[CurrentDirection]]
is neither\n \"sendrecv
\" nor\n \"sendonly
\" return false
."
+ "html": "If transceiver.[[CurrentDirection]]
is neither\n \"sendrecv
\" nor\n \"sendonly
\" return false
."
},
{
- "html": "If\n sender.[[SendEncodings]]
[0]
.active
\n is false
return false
."
+ "html": "If\n sender.[[SendEncodings]]
[0]
.active
\n is false
return false
."
},
{
"html": "If no codec with mimetype \"audio/telephone-event\"
has been negotiated for sending\n with this sender, return false
."
@@ -4102,33 +3904,33 @@
{
"name": "RTCPeerConnection/getStats()",
"href": "https://www.w3.org/TR/webrtc/#widl-RTCPeerConnection-getStats-Promise-RTCStatsReport--MediaStreamTrack-selector",
- "html": "When the getStats
()
method is invoked, the user agent\n MUST run the following steps:",
+ "html": "When the getStats
()
method is invoked, the user agent\n MUST run the following steps:",
"rationale": ".algorithm",
"steps": [
{
"html": "\n Let selectorArg be the method's first\n argument.\n
" }, { - "html": "\n Let connection be the RTCPeerConnection
\n object on which the method was invoked.\n
\n Let connection be the RTCPeerConnection
\n object on which the method was invoked.\n
\n If selectorArg is null
, let\n selector be null
.\n
\n If selectorArg is a MediaStreamTrack
let\n selector be an RTCRtpSender
or\n RTCRtpReceiver
on connection which\n track
attribute matches\n selectorArg. If no such sender or receiver\n exists, or if more than one sender or receiver fit this\n criteria, return a promise rejected with a newly created InvalidAccessError
.\n
\n If selectorArg is a MediaStreamTrack
let\n selector be an RTCRtpSender
or\n RTCRtpReceiver
on connection which\n track
attribute matches\n selectorArg. If no such sender or receiver\n exists, or if more than one sender or receiver fit this\n criteria, return a promise rejected with a newly created InvalidAccessError
.\n
\n Let p be a new promise.\n
" }, { - "html": "Run the following steps in parallel:", + "html": "Run the following steps in parallel:", "rationale": "gather", "steps": [ { - "html": "\n Gather the stats indicated by selector\n according to the stats selection algorithm.\n
" + "html": "\n Gather the stats indicated by selector\n according to the stats selection algorithm.\n
" }, { - "html": "\n Resolve p with the resulting\n RTCStatsReport
object, containing the gathered\n stats.\n
\n Resolve p with the resulting\n RTCStatsReport
object, containing the gathered\n stats.\n
RTCStatsReport
."
+ "html": "Let result be an empty\n RTCStatsReport
."
},
{
"html": "If\n selector is null
,\n gather stats for the whole connection, add them to\n result, return result, and abort these steps."
},
{
- "html": "If selector is an RTCRtpSender
, gather stats for and\n add the following objects to result:\n RTCOutboundRtpStreamStats
objects representing RTP\n streams being sent by selector.\n RTCOutboundRtpStreamStats
objects added.\n RTCRtpSender
, gather stats for and\n add the following objects to result:\n RTCOutboundRtpStreamStats
objects representing RTP\n streams being sent by selector.\n RTCOutboundRtpStreamStats
objects added.\n RTCRtpReceiver
, gather stats for and\n add the following objects to result:\n RTCInboundRtpStreamStats
objects representing RTP\n streams being received by selector.\n RTCInboundRtpStreamStats
added.\n RTCRtpReceiver
, gather stats for and\n add the following objects to result:\n RTCInboundRtpStreamStats
objects representing RTP\n streams being received by selector.\n RTCInboundRtpStreamStats
added.\n \n Let message be the constructor's second\n argument.\n
" }, { - "html": "\n Let e be a new RTCError
object.\n
\n Let e be a new RTCError
object.\n
\n Invoke the DOMException
constructor of e\n with the message
argument set to\n message and the name
argument\n set to \"OperationError\"
.\n
\n Invoke the DOMException
constructor of e\n with the message
argument set to\n message and the name
argument\n set to \"OperationError\"
.\n
\n Set all RTCError
attributes of e to the\n value of the corresponding attribute in init if\n it is present, otherwise set it to null
.\n
\n Set all RTCError
attributes of e to the\n value of the corresponding attribute in init if\n it is present, otherwise set it to null
.\n
\n Return e.\n
" diff --git a/tr/dfns/presentation-api.json b/tr/dfns/presentation-api.json index 17457fe69f5f..dec8efb8c375 100644 --- a/tr/dfns/presentation-api.json +++ b/tr/dfns/presentation-api.json @@ -585,6 +585,45 @@ }, "definedIn": "prose" }, + { + "id": "dfn-presentation-task-source", + "href": "https://www.w3.org/TR/presentation-api/#dfn-presentation-task-source", + "linkingText": [ + "presentation task source" + ], + "localLinkingText": [], + "type": "dfn", + "for": [], + "access": "private", + "informative": false, + "heading": { + "id": "common-idioms", + "href": "https://www.w3.org/TR/presentation-api/#common-idioms", + "title": "Common idioms", + "number": "6.1" + }, + "definedIn": "prose" + }, + { + "id": "dfn-queue-a-presentation-api-task", + "href": "https://www.w3.org/TR/presentation-api/#dfn-queue-a-presentation-api-task", + "linkingText": [ + "queue a Presentation API task", + "queues a Presentation API task" + ], + "localLinkingText": [], + "type": "dfn", + "for": [], + "access": "private", + "informative": false, + "heading": { + "id": "common-idioms", + "href": "https://www.w3.org/TR/presentation-api/#common-idioms", + "title": "Common idioms", + "number": "6.1" + }, + "definedIn": "prose" + }, { "id": "dom-presentation", "href": "https://www.w3.org/TR/presentation-api/#dom-presentation", @@ -1900,7 +1939,7 @@ "id": "dfn-send-a-termination-request", "href": "https://www.w3.org/TR/presentation-api/#dfn-send-a-termination-request", "linkingText": [ - "Send a termination request" + "send a termination request" ], "localLinkingText": [], "type": "dfn", diff --git a/tr/dfns/webrtc.json b/tr/dfns/webrtc.json index 7dcad798f0a7..6447ddcf5c14 100644 --- a/tr/dfns/webrtc.json +++ b/tr/dfns/webrtc.json @@ -196,8 +196,8 @@ "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcconfiguration-members-new", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcconfiguration-members-new", + "id": "dictionary-rtcconfiguration-members-0-dedup-2", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcconfiguration-members-0-dedup-2", "title": "Dictionary RTCConfiguration Members" }, "definedIn": "dt" @@ -216,8 +216,8 @@ "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcconfiguration-members-new", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcconfiguration-members-new", + "id": "dictionary-rtcconfiguration-members-0-dedup-2", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcconfiguration-members-0-dedup-2", "title": "Dictionary RTCConfiguration Members" }, "definedIn": "dt" @@ -236,8 +236,8 @@ "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcconfiguration-members-new", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcconfiguration-members-new", + "id": "dictionary-rtcconfiguration-members-0-dedup-2", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcconfiguration-members-0-dedup-2", "title": "Dictionary RTCConfiguration Members" }, "definedIn": "dt" @@ -256,8 +256,8 @@ "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcconfiguration-members-new", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcconfiguration-members-new", + "id": "dictionary-rtcconfiguration-members-0-dedup-2", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcconfiguration-members-0-dedup-2", "title": "Dictionary RTCConfiguration Members" }, "definedIn": "dt" @@ -276,8 +276,8 @@ "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcconfiguration-members-new", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcconfiguration-members-new", + "id": "dictionary-rtcconfiguration-members-0-dedup-2", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcconfiguration-members-0-dedup-2", "title": "Dictionary RTCConfiguration Members" }, "definedIn": "dt" @@ -296,12 +296,52 @@ "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcconfiguration-members-new", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcconfiguration-members-new", + "id": "dictionary-rtcconfiguration-members-0-dedup-2", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcconfiguration-members-0-dedup-2", "title": "Dictionary RTCConfiguration Members" }, "definedIn": "dt" }, + { + "id": "dom-rtcicecredentialtype", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcicecredentialtype", + "linkingText": [ + "RTCIceCredentialType" + ], + "localLinkingText": [], + "type": "enum", + "for": [], + "access": "public", + "informative": false, + "heading": { + "id": "rtcicecredentialtype-enum-dedup-4", + "href": "https://www.w3.org/TR/webrtc/#rtcicecredentialtype-enum-dedup-4", + "title": "RTCIceCredentialType Enum", + "number": "4.2.2" + }, + "definedIn": "heading" + }, + { + "id": "dom-rtcicecredentialtype-password", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcicecredentialtype-password", + "linkingText": [ + "password" + ], + "localLinkingText": [], + "type": "enum-value", + "for": [ + "RTCIceCredentialType" + ], + "access": "public", + "informative": false, + "heading": { + "id": "rtcicecredentialtype-enum-dedup-4", + "href": "https://www.w3.org/TR/webrtc/#rtcicecredentialtype-enum-dedup-4", + "title": "RTCIceCredentialType Enum", + "number": "4.2.2" + }, + "definedIn": "table" + }, { "id": "dom-rtciceserver", "href": "https://www.w3.org/TR/webrtc/#dom-rtciceserver", @@ -314,10 +354,10 @@ "access": "public", "informative": false, "heading": { - "id": "rtciceserver-dictionary-new", - "href": "https://www.w3.org/TR/webrtc/#rtciceserver-dictionary-new", + "id": "rtciceserver-dictionary", + "href": "https://www.w3.org/TR/webrtc/#rtciceserver-dictionary", "title": "RTCIceServer Dictionary", - "number": "4.2.2" + "number": "4.2.3" }, "definedIn": "heading" }, @@ -335,8 +375,8 @@ "access": "public", "informative": false, "heading": { - "id": "dictionary-rtciceserver-members-dedup-1", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtciceserver-members-dedup-1", + "id": "dictionary-rtciceserver-members-dedup-7", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtciceserver-members-dedup-7", "title": "Dictionary RTCIceServer Members" }, "definedIn": "dt" @@ -355,8 +395,8 @@ "access": "public", "informative": false, "heading": { - "id": "dictionary-rtciceserver-members-dedup-1", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtciceserver-members-dedup-1", + "id": "dictionary-rtciceserver-members-dedup-7", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtciceserver-members-dedup-7", "title": "Dictionary RTCIceServer Members" }, "definedIn": "dt" @@ -375,8 +415,28 @@ "access": "public", "informative": false, "heading": { - "id": "dictionary-rtciceserver-members-dedup-1", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtciceserver-members-dedup-1", + "id": "dictionary-rtciceserver-members-dedup-7", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtciceserver-members-dedup-7", + "title": "Dictionary RTCIceServer Members" + }, + "definedIn": "dt" + }, + { + "id": "dom-rtciceserver-credentialtype", + "href": "https://www.w3.org/TR/webrtc/#dom-rtciceserver-credentialtype", + "linkingText": [ + "credentialType" + ], + "localLinkingText": [], + "type": "dict-member", + "for": [ + "RTCIceServer" + ], + "access": "public", + "informative": false, + "heading": { + "id": "dictionary-rtciceserver-members-dedup-7", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtciceserver-members-dedup-7", "title": "Dictionary RTCIceServer Members" }, "definedIn": "dt" @@ -993,6 +1053,27 @@ { "id": "dom-rtcpeerconnectionstate-connected", "href": "https://www.w3.org/TR/webrtc/#dom-rtcpeerconnectionstate-connected", + "linkingText": [ + "" + ], + "localLinkingText": [], + "type": "enum-value", + "for": [ + "RTCPeerConnectionState" + ], + "access": "public", + "informative": false, + "heading": { + "id": "rtcpeerconnectionstate-enum", + "href": "https://www.w3.org/TR/webrtc/#rtcpeerconnectionstate-enum", + "title": "RTCPeerConnectionState Enum", + "number": "4.3.3" + }, + "definedIn": "table" + }, + { + "id": "dom-rtcpeerconnectionstate-connected-dedup-17", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcpeerconnectionstate-connected-dedup-17", "linkingText": [ "connected" ], @@ -1177,82 +1258,6 @@ }, "definedIn": "table" }, - { - "id": "dfn-signaling-state", - "href": "https://www.w3.org/TR/webrtc/#dfn-signaling-state", - "linkingText": [ - "signaling state" - ], - "localLinkingText": [], - "type": "dfn", - "for": [], - "access": "private", - "informative": false, - "heading": { - "id": "operation", - "href": "https://www.w3.org/TR/webrtc/#operation", - "title": "Operation", - "number": "4.4.1" - }, - "definedIn": "prose" - }, - { - "id": "dfn-connection-state", - "href": "https://www.w3.org/TR/webrtc/#dfn-connection-state", - "linkingText": [ - "connection state" - ], - "localLinkingText": [], - "type": "dfn", - "for": [], - "access": "private", - "informative": false, - "heading": { - "id": "operation", - "href": "https://www.w3.org/TR/webrtc/#operation", - "title": "Operation", - "number": "4.4.1" - }, - "definedIn": "prose" - }, - { - "id": "dfn-ice-gathering-state", - "href": "https://www.w3.org/TR/webrtc/#dfn-ice-gathering-state", - "linkingText": [ - "ICE gathering state" - ], - "localLinkingText": [], - "type": "dfn", - "for": [], - "access": "private", - "informative": false, - "heading": { - "id": "operation", - "href": "https://www.w3.org/TR/webrtc/#operation", - "title": "Operation", - "number": "4.4.1" - }, - "definedIn": "prose" - }, - { - "id": "dfn-ice-connection-state", - "href": "https://www.w3.org/TR/webrtc/#dfn-ice-connection-state", - "linkingText": [ - "ICE connection state" - ], - "localLinkingText": [], - "type": "dfn", - "for": [], - "access": "private", - "informative": false, - "heading": { - "id": "operation", - "href": "https://www.w3.org/TR/webrtc/#operation", - "title": "Operation", - "number": "4.4.1" - }, - "definedIn": "prose" - }, { "id": "dfn-ice-agent", "href": "https://www.w3.org/TR/webrtc/#dfn-ice-agent", @@ -1403,6 +1408,27 @@ }, "definedIn": "prose" }, + { + "id": "dfn-datachannels", + "href": "https://www.w3.org/TR/webrtc/#dfn-datachannels", + "linkingText": [ + "[[DataChannels]]" + ], + "localLinkingText": [], + "type": "attribute", + "for": [ + "RTCPeerConnection" + ], + "access": "private", + "informative": false, + "heading": { + "id": "constructor", + "href": "https://www.w3.org/TR/webrtc/#constructor", + "title": "Constructor", + "number": "4.4.1.1" + }, + "definedIn": "prose" + }, { "id": "dfn-operations", "href": "https://www.w3.org/TR/webrtc/#dfn-operations", @@ -1508,6 +1534,90 @@ }, "definedIn": "prose" }, + { + "id": "dfn-signalingstate", + "href": "https://www.w3.org/TR/webrtc/#dfn-signalingstate", + "linkingText": [ + "[[SignalingState]]" + ], + "localLinkingText": [], + "type": "attribute", + "for": [ + "RTCPeerConnection" + ], + "access": "private", + "informative": false, + "heading": { + "id": "constructor", + "href": "https://www.w3.org/TR/webrtc/#constructor", + "title": "Constructor", + "number": "4.4.1.1" + }, + "definedIn": "prose" + }, + { + "id": "dfn-iceconnectionstate", + "href": "https://www.w3.org/TR/webrtc/#dfn-iceconnectionstate", + "linkingText": [ + "[[IceConnectionState]]" + ], + "localLinkingText": [], + "type": "attribute", + "for": [ + "RTCPeerConnection" + ], + "access": "private", + "informative": false, + "heading": { + "id": "constructor", + "href": "https://www.w3.org/TR/webrtc/#constructor", + "title": "Constructor", + "number": "4.4.1.1" + }, + "definedIn": "prose" + }, + { + "id": "dfn-icegatheringstate", + "href": "https://www.w3.org/TR/webrtc/#dfn-icegatheringstate", + "linkingText": [ + "[[IceGatheringState]]" + ], + "localLinkingText": [], + "type": "attribute", + "for": [ + "RTCPeerConnection" + ], + "access": "private", + "informative": false, + "heading": { + "id": "constructor", + "href": "https://www.w3.org/TR/webrtc/#constructor", + "title": "Constructor", + "number": "4.4.1.1" + }, + "definedIn": "prose" + }, + { + "id": "dfn-connectionstate", + "href": "https://www.w3.org/TR/webrtc/#dfn-connectionstate", + "linkingText": [ + "[[ConnectionState]]" + ], + "localLinkingText": [], + "type": "attribute", + "for": [ + "RTCPeerConnection" + ], + "access": "private", + "informative": false, + "heading": { + "id": "constructor", + "href": "https://www.w3.org/TR/webrtc/#constructor", + "title": "Constructor", + "number": "4.4.1.1" + }, + "definedIn": "prose" + }, { "id": "dfn-pendinglocaldescription", "href": "https://www.w3.org/TR/webrtc/#dfn-pendinglocaldescription", @@ -1641,9 +1751,9 @@ "chain an operation" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "chain-an-asynchronous-operation", @@ -1653,25 +1763,6 @@ }, "definedIn": "prose" }, - { - "id": "update-ice-gathering-state", - "href": "https://www.w3.org/TR/webrtc/#update-ice-gathering-state", - "linkingText": [ - "update the ICE gathering state" - ], - "localLinkingText": [], - "type": "dfn", - "for": [], - "access": "private", - "informative": false, - "heading": { - "id": "update-the-ice-gathering-state", - "href": "https://www.w3.org/TR/webrtc/#update-the-ice-gathering-state", - "title": "Update the ICE gathering state", - "number": "4.4.1.4" - }, - "definedIn": "prose" - }, { "id": "set-local-description", "href": "https://www.w3.org/TR/webrtc/#set-local-description", @@ -1689,7 +1780,7 @@ "id": "set-the-session-description", "href": "https://www.w3.org/TR/webrtc/#set-the-session-description", "title": "Set the session description", - "number": "4.4.1.5" + "number": "4.4.1.4" }, "definedIn": "prose" }, @@ -1710,7 +1801,7 @@ "id": "set-the-session-description", "href": "https://www.w3.org/TR/webrtc/#set-the-session-description", "title": "Set the session description", - "number": "4.4.1.5" + "number": "4.4.1.4" }, "definedIn": "prose" }, @@ -1723,15 +1814,15 @@ "set a session description" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "set-the-session-description", "href": "https://www.w3.org/TR/webrtc/#set-the-session-description", "title": "Set the session description", - "number": "4.4.1.5" + "number": "4.4.1.4" }, "definedIn": "prose" }, @@ -1743,15 +1834,15 @@ "set a configuration" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { - "id": "set-the-configuration-new", - "href": "https://www.w3.org/TR/webrtc/#set-the-configuration-new", + "id": "set-the-configuration", + "href": "https://www.w3.org/TR/webrtc/#set-the-configuration", "title": "Set the configuration", - "number": "4.4.1.6" + "number": "4.4.1.5" }, "definedIn": "prose" }, @@ -1767,10 +1858,10 @@ "access": "private", "informative": false, "heading": { - "id": "set-the-configuration-new", - "href": "https://www.w3.org/TR/webrtc/#set-the-configuration-new", + "id": "set-the-configuration", + "href": "https://www.w3.org/TR/webrtc/#set-the-configuration", "title": "Set the configuration", - "number": "4.4.1.6" + "number": "4.4.1.5" }, "definedIn": "prose" }, @@ -1786,10 +1877,10 @@ "access": "private", "informative": false, "heading": { - "id": "set-the-configuration-new", - "href": "https://www.w3.org/TR/webrtc/#set-the-configuration-new", + "id": "set-the-configuration", + "href": "https://www.w3.org/TR/webrtc/#set-the-configuration", "title": "Set the configuration", - "number": "4.4.1.6" + "number": "4.4.1.5" }, "definedIn": "prose" }, @@ -1805,28 +1896,47 @@ "access": "private", "informative": false, "heading": { - "id": "set-the-configuration-new", - "href": "https://www.w3.org/TR/webrtc/#set-the-configuration-new", + "id": "set-the-configuration", + "href": "https://www.w3.org/TR/webrtc/#set-the-configuration", "title": "Set the configuration", - "number": "4.4.1.6" + "number": "4.4.1.5" }, "definedIn": "prose" }, { - "id": "dom-rtcpeerconnection", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcpeerconnection", + "id": "dfn-validate-an-ice-server-url", + "href": "https://www.w3.org/TR/webrtc/#dfn-validate-an-ice-server-url", "linkingText": [ - "RTCPeerConnection" + "validate an ICE server URL" ], "localLinkingText": [], - "type": "interface", + "type": "abstract-op", "for": [], "access": "public", "informative": false, "heading": { - "id": "interface-definition", - "href": "https://www.w3.org/TR/webrtc/#interface-definition", - "title": "Interface Definition", + "id": "set-the-configuration", + "href": "https://www.w3.org/TR/webrtc/#set-the-configuration", + "title": "Set the configuration", + "number": "4.4.1.5" + }, + "definedIn": "prose" + }, + { + "id": "dom-rtcpeerconnection", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcpeerconnection", + "linkingText": [ + "RTCPeerConnection" + ], + "localLinkingText": [], + "type": "interface", + "for": [], + "access": "public", + "informative": false, + "heading": { + "id": "interface-definition", + "href": "https://www.w3.org/TR/webrtc/#interface-definition", + "title": "Interface Definition", "number": "4.4.2" }, "definedIn": "prose" @@ -2260,9 +2370,9 @@ "create an offer" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "methods", @@ -2278,9 +2388,9 @@ "in-parallel steps to create an offer" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "methods", @@ -2314,9 +2424,9 @@ "final steps to create an offer" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "methods", @@ -2358,9 +2468,9 @@ "create an answer" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "methods", @@ -2376,9 +2486,9 @@ "in-parallel steps to create an answer" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "methods", @@ -2412,9 +2522,9 @@ "final steps to create an answer" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "methods", @@ -2620,9 +2730,9 @@ "close the connection" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "methods", @@ -3190,9 +3300,9 @@ "update the negotiation-needed flag" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "updating-the-negotiation-needed-flag", @@ -3228,9 +3338,9 @@ "check if negotiation is needed" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "updating-the-negotiation-needed-flag", @@ -3310,9 +3420,9 @@ "create an RTCIceCandidate" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "constructor-0", @@ -4221,8 +4331,8 @@ "access": "public", "informative": false, "heading": { - "id": "rtcpeerconnectioniceevent-attributes", - "href": "https://www.w3.org/TR/webrtc/#rtcpeerconnectioniceevent-attributes", + "id": "attributes-5", + "href": "https://www.w3.org/TR/webrtc/#attributes-5", "title": "Attributes" }, "definedIn": "dt" @@ -4243,8 +4353,8 @@ "access": "public", "informative": false, "heading": { - "id": "rtcpeerconnectioniceevent-attributes", - "href": "https://www.w3.org/TR/webrtc/#rtcpeerconnectioniceevent-attributes", + "id": "attributes-5", + "href": "https://www.w3.org/TR/webrtc/#attributes-5", "title": "Attributes" }, "definedIn": "dt" @@ -4616,8 +4726,8 @@ "access": "public", "informative": false, "heading": { - "id": "rtccertificateexpiration-dictionary-new", - "href": "https://www.w3.org/TR/webrtc/#rtccertificateexpiration-dictionary-new", + "id": "rtccertificateexpiration-dictionary", + "href": "https://www.w3.org/TR/webrtc/#rtccertificateexpiration-dictionary", "title": "RTCCertificateExpiration Dictionary", "number": "4.9.1" }, @@ -4637,8 +4747,8 @@ "access": "public", "informative": false, "heading": { - "id": "rtccertificateexpiration-dictionary-new", - "href": "https://www.w3.org/TR/webrtc/#rtccertificateexpiration-dictionary-new", + "id": "x4-9-1-rtccertificateexpiration-dictionary-dedup-72", + "href": "https://www.w3.org/TR/webrtc/#x4-9-1-rtccertificateexpiration-dictionary-dedup-72", "title": "RTCCertificateExpiration Dictionary", "number": "4.9.1" }, @@ -4656,8 +4766,8 @@ "access": "public", "informative": false, "heading": { - "id": "rtccertificate-interface-new", - "href": "https://www.w3.org/TR/webrtc/#rtccertificate-interface-new", + "id": "rtccertificate-interface", + "href": "https://www.w3.org/TR/webrtc/#rtccertificate-interface", "title": "RTCCertificate Interface", "number": "4.9.2" }, @@ -4677,8 +4787,8 @@ "access": "private", "informative": false, "heading": { - "id": "rtccertificate-interface-new", - "href": "https://www.w3.org/TR/webrtc/#rtccertificate-interface-new", + "id": "x4-9-2-rtccertificate-interface-dedup-74", + "href": "https://www.w3.org/TR/webrtc/#x4-9-2-rtccertificate-interface-dedup-74", "title": "RTCCertificate Interface", "number": "4.9.2" }, @@ -4698,8 +4808,8 @@ "access": "private", "informative": false, "heading": { - "id": "rtccertificate-interface-new", - "href": "https://www.w3.org/TR/webrtc/#rtccertificate-interface-new", + "id": "x4-9-2-rtccertificate-interface-dedup-74", + "href": "https://www.w3.org/TR/webrtc/#x4-9-2-rtccertificate-interface-dedup-74", "title": "RTCCertificate Interface", "number": "4.9.2" }, @@ -4719,8 +4829,8 @@ "access": "private", "informative": false, "heading": { - "id": "rtccertificate-interface-new", - "href": "https://www.w3.org/TR/webrtc/#rtccertificate-interface-new", + "id": "x4-9-2-rtccertificate-interface-dedup-74", + "href": "https://www.w3.org/TR/webrtc/#x4-9-2-rtccertificate-interface-dedup-74", "title": "RTCCertificate Interface", "number": "4.9.2" }, @@ -4742,8 +4852,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-7-dedup-5", - "href": "https://www.w3.org/TR/webrtc/#attributes-7-dedup-5", + "id": "attributes-7-dedup-76", + "href": "https://www.w3.org/TR/webrtc/#attributes-7-dedup-76", "title": "Attributes" }, "definedIn": "dt" @@ -4766,8 +4876,8 @@ "access": "public", "informative": false, "heading": { - "id": "methods-4-dedup-6", - "href": "https://www.w3.org/TR/webrtc/#methods-4-dedup-6", + "id": "methods-4-dedup-77", + "href": "https://www.w3.org/TR/webrtc/#methods-4-dedup-77", "title": "Methods" }, "definedIn": "dt" @@ -4801,7 +4911,7 @@ "localLinkingText": [], "type": "dfn", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "rtp-media-api", @@ -4864,9 +4974,9 @@ "CollectSenders" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "methods-5", @@ -4930,9 +5040,9 @@ "CollectTransceivers" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "methods-5", @@ -5018,6 +5128,26 @@ }, "definedIn": "dt" }, + { + "id": "dfn-addtransceiver-sendencodings-validation-steps", + "href": "https://www.w3.org/TR/webrtc/#dfn-addtransceiver-sendencodings-validation-steps", + "linkingText": [ + "addTransceiver sendEncodings validation steps" + ], + "localLinkingText": [], + "type": "dfn", + "for": [ + "RTCPeerConnection" + ], + "access": "public", + "informative": false, + "heading": { + "id": "methods-5", + "href": "https://www.w3.org/TR/webrtc/#methods-5", + "title": "Methods" + }, + "definedIn": "prose" + }, { "id": "dom-rtcrtptransceiverinit", "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtptransceiverinit", @@ -5227,9 +5357,9 @@ "process remote tracks" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "processing-remote-mediastreamtracks", @@ -5246,9 +5376,9 @@ "process the addition of a remote track" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "processing-remote-mediastreamtracks", @@ -5265,9 +5395,9 @@ "process the removal of a remote track" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "processing-remote-mediastreamtracks", @@ -5284,9 +5414,9 @@ "set the associated remote streams" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "processing-remote-mediastreamtracks", @@ -5322,9 +5452,9 @@ "create an RTCRtpSender" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "rtcrtpsender-interface", @@ -5450,7 +5580,7 @@ "for": [ "RTCRtpSender" ], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "rtcrtpsender-interface", @@ -5492,7 +5622,7 @@ "for": [ "RTCRtpSender" ], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "rtcrtpsender-interface", @@ -5592,12 +5722,51 @@ }, "definedIn": "dt" }, + { + "id": "dfn-list-of-implemented-send-codecs", + "href": "https://www.w3.org/TR/webrtc/#dfn-list-of-implemented-send-codecs", + "linkingText": [ + "list of implemented send codecs" + ], + "localLinkingText": [], + "type": "dfn", + "for": [ + "RTCRtpSender" + ], + "access": "public", + "informative": false, + "heading": { + "id": "methods-6", + "href": "https://www.w3.org/TR/webrtc/#methods-6", + "title": "Methods" + }, + "definedIn": "prose" + }, + { + "id": "dfn-list-of-implemented-header-extensions-for-sending", + "href": "https://www.w3.org/TR/webrtc/#dfn-list-of-implemented-header-extensions-for-sending", + "linkingText": [ + "list of implemented header extensions for sending" + ], + "localLinkingText": [], + "type": "dfn", + "for": [], + "access": "private", + "informative": false, + "heading": { + "id": "methods-6", + "href": "https://www.w3.org/TR/webrtc/#methods-6", + "title": "Methods" + }, + "definedIn": "prose" + }, { "id": "dom-rtcrtpsender-setparameters", "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpsender-setparameters", "linkingText": [ "setParameters()", - "setParameters(parameters)" + "setParameters(parameters)", + "setParameters(parameters, setParameterOptions)" ], "localLinkingText": [ "RTCRtpSender.setParameters", @@ -5617,6 +5786,26 @@ }, "definedIn": "dt" }, + { + "id": "dfn-setparameters-validation-steps", + "href": "https://www.w3.org/TR/webrtc/#dfn-setparameters-validation-steps", + "linkingText": [ + "setParameters validation steps" + ], + "localLinkingText": [], + "type": "dfn", + "for": [ + "RTCRtpSender" + ], + "access": "public", + "informative": false, + "heading": { + "id": "methods-6", + "href": "https://www.w3.org/TR/webrtc/#methods-6", + "title": "Methods" + }, + "definedIn": "prose" + }, { "id": "dfn-read-only-parameter", "href": "https://www.w3.org/TR/webrtc/#dfn-read-only-parameter", @@ -5929,6 +6118,25 @@ }, "definedIn": "dt" }, + { + "id": "dom-rtcrtpdecodingparameters", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpdecodingparameters", + "linkingText": [ + "RTCRtpDecodingParameters" + ], + "localLinkingText": [], + "type": "dictionary", + "for": [], + "access": "public", + "informative": false, + "heading": { + "id": "rtcrtpdecodingparameters-dedup-95", + "href": "https://www.w3.org/TR/webrtc/#rtcrtpdecodingparameters-dedup-95", + "title": "RTCRtpDecodingParameters Dictionary", + "number": "5.2.5" + }, + "definedIn": "heading" + }, { "id": "dom-rtcrtpencodingparameters", "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpencodingparameters", @@ -5968,6 +6176,26 @@ }, "definedIn": "dt" }, + { + "id": "dom-rtcrtpencodingparameters-codec", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpencodingparameters-codec", + "linkingText": [ + "codec" + ], + "localLinkingText": [], + "type": "dict-member", + "for": [ + "RTCRtpEncodingParameters" + ], + "access": "public", + "informative": false, + "heading": { + "id": "dictionary-rtcrtpencodingparameters-members", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpencodingparameters-members", + "title": "Dictionary RTCRtpEncodingParameters Members" + }, + "definedIn": "dt" + }, { "id": "dom-rtcrtpencodingparameters-maxbitrate", "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpencodingparameters-maxbitrate", @@ -6167,10 +6395,10 @@ "definedIn": "dt" }, { - "id": "dom-rtcrtpcodecparameters", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodecparameters", + "id": "dom-rtcrtpcodec", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodec", "linkingText": [ - "RTCRtpCodecParameters" + "RTCRtpCodec" ], "localLinkingText": [], "type": "dictionary", @@ -6178,118 +6406,98 @@ "access": "public", "informative": false, "heading": { - "id": "rtcrtpcodecparameters", - "href": "https://www.w3.org/TR/webrtc/#rtcrtpcodecparameters", - "title": "RTCRtpCodecParameters Dictionary", + "id": "rtcrtpcodec", + "href": "https://www.w3.org/TR/webrtc/#rtcrtpcodec", + "title": "RTCRtpCodec Dictionary", "number": "5.2.8" }, "definedIn": "heading" }, { - "id": "dom-rtcrtpcodecparameters-payloadtype", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodecparameters-payloadtype", - "linkingText": [ - "payloadType" - ], - "localLinkingText": [], - "type": "dict-member", - "for": [ - "RTCRtpCodecParameters" - ], - "access": "public", - "informative": false, - "heading": { - "id": "dictionary-rtcrtpcodecparameters-members", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodecparameters-members", - "title": "Dictionary RTCRtpCodecParameters Members" - }, - "definedIn": "dt" - }, - { - "id": "dom-rtcrtpcodecparameters-mimetype", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodecparameters-mimetype", + "id": "dom-rtcrtpcodec-mimetype", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodec-mimetype", "linkingText": [ "mimeType" ], "localLinkingText": [], "type": "dict-member", "for": [ - "RTCRtpCodecParameters" + "RTCRtpCodec" ], "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcrtpcodecparameters-members", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodecparameters-members", - "title": "Dictionary RTCRtpCodecParameters Members" + "id": "dictionary-rtcrtpcodec-members", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodec-members", + "title": "Dictionary RTCRtpCodec Members" }, "definedIn": "dt" }, { - "id": "dom-rtcrtpcodecparameters-clockrate", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodecparameters-clockrate", + "id": "dom-rtcrtpcodec-clockrate", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodec-clockrate", "linkingText": [ "clockRate" ], "localLinkingText": [], "type": "dict-member", "for": [ - "RTCRtpCodecParameters" + "RTCRtpCodec" ], "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcrtpcodecparameters-members", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodecparameters-members", - "title": "Dictionary RTCRtpCodecParameters Members" + "id": "dictionary-rtcrtpcodec-members", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodec-members", + "title": "Dictionary RTCRtpCodec Members" }, "definedIn": "dt" }, { - "id": "dom-rtcrtpcodecparameters-channels", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodecparameters-channels", + "id": "dom-rtcrtpcodec-channels", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodec-channels", "linkingText": [ "channels" ], "localLinkingText": [], "type": "dict-member", "for": [ - "RTCRtpCodecParameters" + "RTCRtpCodec" ], "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcrtpcodecparameters-members", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodecparameters-members", - "title": "Dictionary RTCRtpCodecParameters Members" + "id": "dictionary-rtcrtpcodec-members", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodec-members", + "title": "Dictionary RTCRtpCodec Members" }, "definedIn": "dt" }, { - "id": "dom-rtcrtpcodecparameters-sdpfmtpline", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodecparameters-sdpfmtpline", + "id": "dom-rtcrtpcodec-sdpfmtpline", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodec-sdpfmtpline", "linkingText": [ "sdpFmtpLine" ], "localLinkingText": [], "type": "dict-member", "for": [ - "RTCRtpCodecParameters" + "RTCRtpCodec" ], "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcrtpcodecparameters-members", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodecparameters-members", - "title": "Dictionary RTCRtpCodecParameters Members" + "id": "dictionary-rtcrtpcodec-members", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodec-members", + "title": "Dictionary RTCRtpCodec Members" }, "definedIn": "dt" }, { - "id": "dom-rtcrtpcapabilities", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcapabilities", + "id": "dom-rtcrtpcodecparameters", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodecparameters", "linkingText": [ - "RTCRtpCapabilities" + "RTCRtpCodecParameters" ], "localLinkingText": [], "type": "dictionary", @@ -6297,149 +6505,169 @@ "access": "public", "informative": false, "heading": { - "id": "rtcrtpcapabilities", - "href": "https://www.w3.org/TR/webrtc/#rtcrtpcapabilities", - "title": "RTCRtpCapabilities Dictionary", + "id": "rtcrtpcodecparameters", + "href": "https://www.w3.org/TR/webrtc/#rtcrtpcodecparameters", + "title": "RTCRtpCodecParameters Dictionary", "number": "5.2.9" }, "definedIn": "heading" }, { - "id": "dom-rtcrtpcapabilities-codecs", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcapabilities-codecs", + "id": "dom-rtcrtpcodecparameters-payloadtype", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodecparameters-payloadtype", "linkingText": [ - "codecs" + "payloadType" ], "localLinkingText": [], "type": "dict-member", "for": [ - "RTCRtpCapabilities" + "RTCRtpCodecParameters" ], "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcrtpcapabilities-members", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcapabilities-members", - "title": "Dictionary RTCRtpCapabilities Members" + "id": "dictionary-rtcrtpcodecparameters-members", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodecparameters-members", + "title": "Dictionary RTCRtpCodecParameters Members" }, "definedIn": "dt" }, { - "id": "dom-rtcrtpcapabilities-headerextensions", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcapabilities-headerextensions", + "id": "dom-rtcrtpcodecparameters-mimetype", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodecparameters-mimetype", "linkingText": [ - "headerExtensions" + "mimeType" ], "localLinkingText": [], "type": "dict-member", "for": [ - "RTCRtpCapabilities" + "RTCRtpCodecParameters" ], "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcrtpcapabilities-members", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcapabilities-members", - "title": "Dictionary RTCRtpCapabilities Members" + "id": "dictionary-rtcrtpcodecparameters-members", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodecparameters-members", + "title": "Dictionary RTCRtpCodecParameters Members" }, "definedIn": "dt" }, { - "id": "dom-rtcrtpcodeccapability", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodeccapability", + "id": "dom-rtcrtpcodecparameters-clockrate", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodecparameters-clockrate", "linkingText": [ - "RTCRtpCodecCapability" + "clockRate" ], "localLinkingText": [], - "type": "dictionary", - "for": [], + "type": "dict-member", + "for": [ + "RTCRtpCodecParameters" + ], "access": "public", "informative": false, "heading": { - "id": "rtcrtpcodeccapability", - "href": "https://www.w3.org/TR/webrtc/#rtcrtpcodeccapability", - "title": "RTCRtpCodecCapability Dictionary", - "number": "5.2.10" + "id": "dictionary-rtcrtpcodecparameters-members", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodecparameters-members", + "title": "Dictionary RTCRtpCodecParameters Members" }, - "definedIn": "heading" + "definedIn": "dt" }, { - "id": "dom-rtcrtpcodeccapability-mimetype", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodeccapability-mimetype", + "id": "dom-rtcrtpcodecparameters-channels", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodecparameters-channels", "linkingText": [ - "mimeType" + "channels" ], "localLinkingText": [], "type": "dict-member", "for": [ - "RTCRtpCodecCapability" + "RTCRtpCodecParameters" ], "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcrtpcodeccapability-members", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodeccapability-members", - "title": "Dictionary RTCRtpCodecCapability Members" + "id": "dictionary-rtcrtpcodecparameters-members", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodecparameters-members", + "title": "Dictionary RTCRtpCodecParameters Members" }, "definedIn": "dt" }, { - "id": "dom-rtcrtpcodeccapability-clockrate", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodeccapability-clockrate", + "id": "dom-rtcrtpcodecparameters-sdpfmtpline", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodecparameters-sdpfmtpline", "linkingText": [ - "clockRate" + "sdpFmtpLine" ], "localLinkingText": [], "type": "dict-member", "for": [ - "RTCRtpCodecCapability" + "RTCRtpCodecParameters" ], "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcrtpcodeccapability-members", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodeccapability-members", - "title": "Dictionary RTCRtpCodecCapability Members" + "id": "dictionary-rtcrtpcodecparameters-members", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodecparameters-members", + "title": "Dictionary RTCRtpCodecParameters Members" + }, + "definedIn": "dt" + }, + { + "id": "dom-rtcrtpcapabilities", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcapabilities", + "linkingText": [ + "RTCRtpCapabilities" + ], + "localLinkingText": [], + "type": "dictionary", + "for": [], + "access": "public", + "informative": false, + "heading": { + "id": "rtcrtpcapabilities", + "href": "https://www.w3.org/TR/webrtc/#rtcrtpcapabilities", + "title": "RTCRtpCapabilities Dictionary", + "number": "5.2.10" }, - "definedIn": "dt" + "definedIn": "heading" }, { - "id": "dom-rtcrtpcodeccapability-channels", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodeccapability-channels", + "id": "dom-rtcrtpcapabilities-codecs", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcapabilities-codecs", "linkingText": [ - "channels" + "codecs" ], "localLinkingText": [], "type": "dict-member", "for": [ - "RTCRtpCodecCapability" + "RTCRtpCapabilities" ], "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcrtpcodeccapability-members", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodeccapability-members", - "title": "Dictionary RTCRtpCodecCapability Members" + "id": "dictionary-rtcrtpcapabilities-members", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcapabilities-members", + "title": "Dictionary RTCRtpCapabilities Members" }, "definedIn": "dt" }, { - "id": "dom-rtcrtpcodeccapability-sdpfmtpline", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcodeccapability-sdpfmtpline", + "id": "dom-rtcrtpcapabilities-headerextensions", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpcapabilities-headerextensions", "linkingText": [ - "sdpFmtpLine" + "headerExtensions" ], "localLinkingText": [], "type": "dict-member", "for": [ - "RTCRtpCodecCapability" + "RTCRtpCapabilities" ], "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcrtpcodeccapability-members", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodeccapability-members", - "title": "Dictionary RTCRtpCodecCapability Members" + "id": "dictionary-rtcrtpcapabilities-members", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcapabilities-members", + "title": "Dictionary RTCRtpCapabilities Members" }, "definedIn": "dt" }, @@ -6482,6 +6710,25 @@ }, "definedIn": "dt" }, + { + "id": "dom-rtcsetparameteroptions", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcsetparameteroptions", + "linkingText": [ + "RTCSetParameterOptions" + ], + "localLinkingText": [], + "type": "dictionary", + "for": [], + "access": "public", + "informative": false, + "heading": { + "id": "rtcsetparameteroptions-dictionary", + "href": "https://www.w3.org/TR/webrtc/#rtcsetparameteroptions-dictionary", + "title": "RTCSetParameterOptions Dictionary", + "number": "5.2.12" + }, + "definedIn": "heading" + }, { "id": "dom-rtcrtpreceiver", "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpreceiver", @@ -6508,9 +6755,9 @@ "create an RTCRtpReceiver" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "rtcrtpreceiver-interface", @@ -6550,7 +6797,7 @@ "for": [ "RTCRtpReceiver" ], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "rtcrtpreceiver-interface", @@ -6686,6 +6933,27 @@ }, "definedIn": "prose" }, + { + "id": "dfn-jitterbuffertarget", + "href": "https://www.w3.org/TR/webrtc/#dfn-jitterbuffertarget", + "linkingText": [ + "[[JitterBufferTarget]]" + ], + "localLinkingText": [], + "type": "attribute", + "for": [ + "RTCRtpReceiver" + ], + "access": "public", + "informative": false, + "heading": { + "id": "rtcrtpreceiver-interface", + "href": "https://www.w3.org/TR/webrtc/#rtcrtpreceiver-interface", + "title": "RTCRtpReceiver Interface", + "number": "5.3" + }, + "definedIn": "prose" + }, { "id": "dom-rtpreceiver-track", "href": "https://www.w3.org/TR/webrtc/#dom-rtpreceiver-track", @@ -6730,6 +6998,64 @@ }, "definedIn": "dt" }, + { + "id": "dom-rtcrtpreceiver-jitterbuffertarget", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpreceiver-jitterbuffertarget", + "linkingText": [ + "jitterBufferTarget" + ], + "localLinkingText": [ + "RTCRtpReceiver.jitterBufferTarget" + ], + "type": "attribute", + "for": [ + "RTCRtpReceiver" + ], + "access": "public", + "informative": false, + "heading": { + "id": "attributes-10", + "href": "https://www.w3.org/TR/webrtc/#attributes-10", + "title": "Attributes" + }, + "definedIn": "dt" + }, + { + "id": "dfn-minimum-allowed-target", + "href": "https://www.w3.org/TR/webrtc/#dfn-minimum-allowed-target", + "linkingText": [ + "minimum allowed target" + ], + "localLinkingText": [], + "type": "dfn", + "for": [], + "access": "private", + "informative": false, + "heading": { + "id": "attributes-10", + "href": "https://www.w3.org/TR/webrtc/#attributes-10", + "title": "Attributes" + }, + "definedIn": "prose" + }, + { + "id": "dfn-maximum-allowed-target", + "href": "https://www.w3.org/TR/webrtc/#dfn-maximum-allowed-target", + "linkingText": [ + "maximum allowed target" + ], + "localLinkingText": [], + "type": "dfn", + "for": [], + "access": "private", + "informative": false, + "heading": { + "id": "attributes-10", + "href": "https://www.w3.org/TR/webrtc/#attributes-10", + "title": "Attributes" + }, + "definedIn": "prose" + }, { "id": "dom-rtcrtpreceiver-getcapabilities", "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpreceiver-getcapabilities", @@ -6755,6 +7081,42 @@ }, "definedIn": "dt" }, + { + "id": "dfn-list-of-implemented-receive-codecs", + "href": "https://www.w3.org/TR/webrtc/#dfn-list-of-implemented-receive-codecs", + "linkingText": [ + "list of implemented receive codecs" + ], + "localLinkingText": [], + "type": "dfn", + "for": [], + "access": "public", + "informative": false, + "heading": { + "id": "methods-7", + "href": "https://www.w3.org/TR/webrtc/#methods-7", + "title": "Methods" + }, + "definedIn": "prose" + }, + { + "id": "dfn-list-of-implemented-header-extensions-for-receiving", + "href": "https://www.w3.org/TR/webrtc/#dfn-list-of-implemented-header-extensions-for-receiving", + "linkingText": [ + "list of implemented header extensions for receiving" + ], + "localLinkingText": [], + "type": "dfn", + "for": [], + "access": "private", + "informative": false, + "heading": { + "id": "methods-7", + "href": "https://www.w3.org/TR/webrtc/#methods-7", + "title": "Methods" + }, + "definedIn": "prose" + }, { "id": "dom-rtcrtpreceiver-getparameters", "href": "https://www.w3.org/TR/webrtc/#dom-rtcrtpreceiver-getparameters", @@ -7015,8 +7377,10 @@ ], "localLinkingText": [], "type": "dfn", - "for": [], - "access": "private", + "for": [ + "RTCRtpTransceiver" + ], + "access": "public", "informative": false, "heading": { "id": "rtcrtptransceiver-interface", @@ -7033,9 +7397,9 @@ "create an RTCRtpTransceiver" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "rtcrtptransceiver-interface", @@ -7056,7 +7420,7 @@ "for": [ "RTCRtpTransceiver" ], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "rtcrtptransceiver-interface", @@ -7224,7 +7588,7 @@ "for": [ "RTCRtpTransceiver" ], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "rtcrtptransceiver-interface", @@ -7453,9 +7817,9 @@ "stop sending and receiving" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "methods-8", @@ -7471,9 +7835,9 @@ "stop the RTCRtpTransceiver" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "methods-8", @@ -7507,6 +7871,24 @@ }, "definedIn": "dt" }, + { + "id": "dfn-codec-dictionary-match", + "href": "https://www.w3.org/TR/webrtc/#dfn-codec-dictionary-match", + "linkingText": [ + "codec dictionary match" + ], + "localLinkingText": [], + "type": "dfn", + "for": [], + "access": "public", + "informative": false, + "heading": { + "id": "methods-8", + "href": "https://www.w3.org/TR/webrtc/#methods-8", + "title": "Methods" + }, + "definedIn": "prose" + }, { "id": "dfn-simulcast-envelope", "href": "https://www.w3.org/TR/webrtc/#dfn-simulcast-envelope", @@ -7519,8 +7901,8 @@ "access": "private", "informative": false, "heading": { - "id": "simulcast-functionality-new", - "href": "https://www.w3.org/TR/webrtc/#simulcast-functionality-new", + "id": "simulcast-functionality", + "href": "https://www.w3.org/TR/webrtc/#simulcast-functionality", "title": "Simulcast functionality", "number": "5.4.1" }, @@ -7538,8 +7920,8 @@ "access": "private", "informative": false, "heading": { - "id": "simulcast-functionality-new", - "href": "https://www.w3.org/TR/webrtc/#simulcast-functionality-new", + "id": "simulcast-functionality", + "href": "https://www.w3.org/TR/webrtc/#simulcast-functionality", "title": "Simulcast functionality", "number": "5.4.1" }, @@ -7927,9 +8309,9 @@ "release early candidates" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "rtcicetransport", @@ -7947,9 +8329,30 @@ "surface a candidate" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", + "informative": false, + "heading": { + "id": "rtcicetransport", + "href": "https://www.w3.org/TR/webrtc/#rtcicetransport", + "title": "RTCIceTransport Interface", + "number": "5.6" + }, + "definedIn": "prose" + }, + { + "id": "dfn-change-the-selected-candidate-pair-and-state", + "href": "https://www.w3.org/TR/webrtc/#dfn-change-the-selected-candidate-pair-and-state", + "linkingText": [ + "change the selected candidate pair and state" + ], + "localLinkingText": [], + "type": "dfn", + "for": [ + "RTCIceTransport" + ], + "access": "public", "informative": false, "heading": { "id": "rtcicetransport", @@ -8395,23 +8798,106 @@ }, "definedIn": "heading" }, + { + "id": "dom-rtcicecandidatepair-dedup-163", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcicecandidatepair-dedup-163", + "linkingText": [ + "RTCIceCandidatePair" + ], + "localLinkingText": [], + "type": "interface", + "for": [], + "access": "public", + "informative": false, + "heading": { + "id": "x5-6-2-rtcicecandidatepair-interface", + "href": "https://www.w3.org/TR/webrtc/#x5-6-2-rtcicecandidatepair-interface", + "title": "RTCIceCandidatePair Interface", + "number": "5.6.2" + }, + "definedIn": "heading" + }, + { + "id": "dfn-creating-an-rtcicecandidatepair", + "href": "https://www.w3.org/TR/webrtc/#dfn-creating-an-rtcicecandidatepair", + "linkingText": [ + "creating an RTCIceCandidatePair", + "create an RTCIceCandidatePair" + ], + "localLinkingText": [], + "type": "abstract-op", + "for": [], + "access": "public", + "informative": false, + "heading": { + "id": "x5-6-2-rtcicecandidatepair-interface", + "href": "https://www.w3.org/TR/webrtc/#x5-6-2-rtcicecandidatepair-interface", + "title": "RTCIceCandidatePair Interface", + "number": "5.6.2" + }, + "definedIn": "prose" + }, + { + "id": "dfn-local", + "href": "https://www.w3.org/TR/webrtc/#dfn-local", + "linkingText": [ + "[[Local]]" + ], + "localLinkingText": [], + "type": "attribute", + "for": [ + "RTCIceCandidatePair" + ], + "access": "private", + "informative": false, + "heading": { + "id": "x5-6-2-rtcicecandidatepair-interface", + "href": "https://www.w3.org/TR/webrtc/#x5-6-2-rtcicecandidatepair-interface", + "title": "RTCIceCandidatePair Interface", + "number": "5.6.2" + }, + "definedIn": "prose" + }, + { + "id": "dfn-remote", + "href": "https://www.w3.org/TR/webrtc/#dfn-remote", + "linkingText": [ + "[[Remote]]" + ], + "localLinkingText": [], + "type": "attribute", + "for": [ + "RTCIceCandidatePair" + ], + "access": "private", + "informative": false, + "heading": { + "id": "x5-6-2-rtcicecandidatepair-interface", + "href": "https://www.w3.org/TR/webrtc/#x5-6-2-rtcicecandidatepair-interface", + "title": "RTCIceCandidatePair Interface", + "number": "5.6.2" + }, + "definedIn": "prose" + }, { "id": "dom-rtcicecandidatepair-local", "href": "https://www.w3.org/TR/webrtc/#dom-rtcicecandidatepair-local", "linkingText": [ "local" ], - "localLinkingText": [], - "type": "dict-member", + "localLinkingText": [ + "RTCIceCandidatePair.local" + ], + "type": "attribute", "for": [ "RTCIceCandidatePair" ], "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcicecandidatepair-members", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcicecandidatepair-members", - "title": "Dictionary RTCIceCandidatePair Members" + "id": "attributes-14-dedup-164", + "href": "https://www.w3.org/TR/webrtc/#attributes-14-dedup-164", + "title": "Attributes" }, "definedIn": "dt" }, @@ -8421,17 +8907,19 @@ "linkingText": [ "remote" ], - "localLinkingText": [], - "type": "dict-member", + "localLinkingText": [ + "RTCIceCandidatePair.remote" + ], + "type": "attribute", "for": [ "RTCIceCandidatePair" ], "access": "public", "informative": false, "heading": { - "id": "dictionary-rtcicecandidatepair-members", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcicecandidatepair-members", - "title": "Dictionary RTCIceCandidatePair Members" + "id": "attributes-14-dedup-164", + "href": "https://www.w3.org/TR/webrtc/#attributes-14-dedup-164", + "title": "Attributes" }, "definedIn": "dt" }, @@ -8537,10 +9025,10 @@ "definedIn": "heading" }, { - "id": "dom-rtcicetransportstate-new", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcicetransportstate-new", + "id": "dom-rtcicetransportstate-closed", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcicetransportstate-closed", "linkingText": [ - "new" + "closed" ], "localLinkingText": [], "type": "enum-value", @@ -8558,10 +9046,10 @@ "definedIn": "table" }, { - "id": "dom-rtcicetransportstate-checking", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcicetransportstate-checking", + "id": "dom-rtcicetransportstate-failed", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcicetransportstate-failed", "linkingText": [ - "checking" + "failed" ], "localLinkingText": [], "type": "enum-value", @@ -8579,10 +9067,10 @@ "definedIn": "table" }, { - "id": "dom-rtcicetransportstate-connected", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcicetransportstate-connected", + "id": "dom-rtcicetransportstate-disconnected", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcicetransportstate-disconnected", "linkingText": [ - "connected" + "disconnected" ], "localLinkingText": [], "type": "enum-value", @@ -8600,10 +9088,10 @@ "definedIn": "table" }, { - "id": "dom-rtcicetransportstate-completed", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcicetransportstate-completed", + "id": "dom-rtcicetransportstate-new", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcicetransportstate-new", "linkingText": [ - "completed" + "new" ], "localLinkingText": [], "type": "enum-value", @@ -8621,10 +9109,10 @@ "definedIn": "table" }, { - "id": "dom-rtcicetransportstate-disconnected", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcicetransportstate-disconnected", + "id": "dom-rtcicetransportstate-checking", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcicetransportstate-checking", "linkingText": [ - "disconnected" + "checking" ], "localLinkingText": [], "type": "enum-value", @@ -8642,10 +9130,10 @@ "definedIn": "table" }, { - "id": "dom-rtcicetransportstate-failed", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcicetransportstate-failed", + "id": "dom-rtcicetransportstate-completed", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcicetransportstate-completed", "linkingText": [ - "failed" + "completed" ], "localLinkingText": [], "type": "enum-value", @@ -8663,10 +9151,10 @@ "definedIn": "table" }, { - "id": "dom-rtcicetransportstate-closed", - "href": "https://www.w3.org/TR/webrtc/#dom-rtcicetransportstate-closed", + "id": "dom-rtcicetransportstate-connected", + "href": "https://www.w3.org/TR/webrtc/#dom-rtcicetransportstate-connected", "linkingText": [ - "closed" + "connected" ], "localLinkingText": [], "type": "enum-value", @@ -8886,8 +9374,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-14", - "href": "https://www.w3.org/TR/webrtc/#attributes-14", + "id": "attributes-15", + "href": "https://www.w3.org/TR/webrtc/#attributes-15", "title": "Attributes" }, "definedIn": "dt" @@ -8908,8 +9396,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-14", - "href": "https://www.w3.org/TR/webrtc/#attributes-14", + "id": "attributes-15", + "href": "https://www.w3.org/TR/webrtc/#attributes-15", "title": "Attributes" }, "definedIn": "dt" @@ -8930,8 +9418,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-14", - "href": "https://www.w3.org/TR/webrtc/#attributes-14", + "id": "attributes-15", + "href": "https://www.w3.org/TR/webrtc/#attributes-15", "title": "Attributes" }, "definedIn": "dt" @@ -8952,8 +9440,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-14", - "href": "https://www.w3.org/TR/webrtc/#attributes-14", + "id": "attributes-15", + "href": "https://www.w3.org/TR/webrtc/#attributes-15", "title": "Attributes" }, "definedIn": "dt" @@ -9072,8 +9560,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-15", - "href": "https://www.w3.org/TR/webrtc/#attributes-15", + "id": "attributes-16", + "href": "https://www.w3.org/TR/webrtc/#attributes-16", "title": "Attributes" }, "definedIn": "dt" @@ -9094,8 +9582,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-15", - "href": "https://www.w3.org/TR/webrtc/#attributes-15", + "id": "attributes-16", + "href": "https://www.w3.org/TR/webrtc/#attributes-16", "title": "Attributes" }, "definedIn": "dt" @@ -9152,9 +9640,9 @@ "create an RTCSctpTransport" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "create-an-instance", @@ -9234,9 +9722,9 @@ "update the data max message size" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "update-max-message-size", @@ -9282,8 +9770,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-16", - "href": "https://www.w3.org/TR/webrtc/#attributes-16", + "id": "attributes-17", + "href": "https://www.w3.org/TR/webrtc/#attributes-17", "title": "Attributes" }, "definedIn": "dt" @@ -9304,8 +9792,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-16", - "href": "https://www.w3.org/TR/webrtc/#attributes-16", + "id": "attributes-17", + "href": "https://www.w3.org/TR/webrtc/#attributes-17", "title": "Attributes" }, "definedIn": "dt" @@ -9326,8 +9814,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-16", - "href": "https://www.w3.org/TR/webrtc/#attributes-16", + "id": "attributes-17", + "href": "https://www.w3.org/TR/webrtc/#attributes-17", "title": "Attributes" }, "definedIn": "dt" @@ -9348,8 +9836,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-16", - "href": "https://www.w3.org/TR/webrtc/#attributes-16", + "id": "attributes-17", + "href": "https://www.w3.org/TR/webrtc/#attributes-17", "title": "Attributes" }, "definedIn": "dt" @@ -9370,8 +9858,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-16", - "href": "https://www.w3.org/TR/webrtc/#attributes-16", + "id": "attributes-17", + "href": "https://www.w3.org/TR/webrtc/#attributes-17", "title": "Attributes" }, "definedIn": "dt" @@ -9504,9 +9992,9 @@ "create an RTCDataChannel" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "creating-a-data-channel", @@ -9705,6 +10193,27 @@ }, "definedIn": "prose" }, + { + "id": "dfn-istransferable", + "href": "https://www.w3.org/TR/webrtc/#dfn-istransferable", + "linkingText": [ + "[[IsTransferable]]" + ], + "localLinkingText": [], + "type": "attribute", + "for": [ + "RTCDataChannel" + ], + "access": "private", + "informative": false, + "heading": { + "id": "creating-a-data-channel", + "href": "https://www.w3.org/TR/webrtc/#creating-a-data-channel", + "title": "Creating a data channel", + "number": "6.2.1" + }, + "definedIn": "prose" + }, { "id": "announce-datachannel-open", "href": "https://www.w3.org/TR/webrtc/#announce-datachannel-open", @@ -9713,9 +10222,9 @@ "announce an RTCDataChannel as open" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "announcing-a-data-channel-as-open", @@ -9732,18 +10241,37 @@ "closing procedure" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { - "id": "closing-procedure", - "href": "https://www.w3.org/TR/webrtc/#closing-procedure", + "id": "x6-2-4-closing-procedure-dedup-167", + "href": "https://www.w3.org/TR/webrtc/#x6-2-4-closing-procedure-dedup-167", "title": "Closing procedure", "number": "6.2.4" }, "definedIn": "prose" }, + { + "id": "dfn-announcing-a-data-channel-as-closed", + "href": "https://www.w3.org/TR/webrtc/#dfn-announcing-a-data-channel-as-closed", + "linkingText": [ + "Announcing a data channel as closed" + ], + "localLinkingText": [], + "type": "abstract-op", + "for": [], + "access": "public", + "informative": false, + "heading": { + "id": "announcing-a-data-channel-as-closed", + "href": "https://www.w3.org/TR/webrtc/#announcing-a-data-channel-as-closed", + "title": "Announcing a data channel as closed", + "number": "6.2.5" + }, + "definedIn": "heading" + }, { "id": "data-transport-closed", "href": "https://www.w3.org/TR/webrtc/#data-transport-closed", @@ -9780,10 +10308,29 @@ "id": "error-on-creating-data-channels", "href": "https://www.w3.org/TR/webrtc/#error-on-creating-data-channels", "title": "Error on creating data channels", - "number": "6.2.6" + "number": "6.2.7" }, "definedIn": "prose" }, + { + "id": "dfn-receiving-messages-on-a-data-channel", + "href": "https://www.w3.org/TR/webrtc/#dfn-receiving-messages-on-a-data-channel", + "linkingText": [ + "Receiving messages on a data channel" + ], + "localLinkingText": [], + "type": "abstract-op", + "for": [], + "access": "public", + "informative": false, + "heading": { + "id": "receiving-messages-on-a-data-channel", + "href": "https://www.w3.org/TR/webrtc/#receiving-messages-on-a-data-channel", + "title": "Receiving messages on a data channel", + "number": "6.2.8" + }, + "definedIn": "heading" + }, { "id": "dom-datachannel-label", "href": "https://www.w3.org/TR/webrtc/#dom-datachannel-label", @@ -9800,8 +10347,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -9822,8 +10369,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -9844,8 +10391,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -9866,8 +10413,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -9888,8 +10435,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -9910,8 +10457,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -9932,8 +10479,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -9954,8 +10501,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -9976,8 +10523,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -9998,8 +10545,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -10020,8 +10567,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -10042,8 +10589,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -10064,8 +10611,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -10086,8 +10633,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -10108,8 +10655,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -10130,8 +10677,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -10152,8 +10699,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "title": "Attributes" }, "definedIn": "dt" @@ -10289,9 +10836,9 @@ "send() algorithm" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "methods-12", @@ -10601,8 +11148,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-18", - "href": "https://www.w3.org/TR/webrtc/#attributes-18", + "id": "attributes-19", + "href": "https://www.w3.org/TR/webrtc/#attributes-19", "title": "Attributes" }, "definedIn": "dt" @@ -10661,8 +11208,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-19", - "href": "https://www.w3.org/TR/webrtc/#attributes-19", + "id": "attributes-20", + "href": "https://www.w3.org/TR/webrtc/#attributes-20", "title": "Attributes" }, "definedIn": "dt" @@ -10693,9 +11240,9 @@ "create an RTCDTMFSender" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "rtcdtmfsender", @@ -10784,8 +11331,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-20", - "href": "https://www.w3.org/TR/webrtc/#attributes-20", + "id": "attributes-21", + "href": "https://www.w3.org/TR/webrtc/#attributes-21", "title": "Attributes" }, "definedIn": "dt" @@ -10806,8 +11353,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-20", - "href": "https://www.w3.org/TR/webrtc/#attributes-20", + "id": "attributes-21", + "href": "https://www.w3.org/TR/webrtc/#attributes-21", "title": "Attributes" }, "definedIn": "dt" @@ -10828,8 +11375,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-20", - "href": "https://www.w3.org/TR/webrtc/#attributes-20", + "id": "attributes-21", + "href": "https://www.w3.org/TR/webrtc/#attributes-21", "title": "Attributes" }, "definedIn": "dt" @@ -10879,6 +11426,24 @@ }, "definedIn": "prose" }, + { + "id": "dfn-dtmf-playout-task-steps", + "href": "https://www.w3.org/TR/webrtc/#dfn-dtmf-playout-task-steps", + "linkingText": [ + "DTMF playout task steps" + ], + "localLinkingText": [], + "type": "dfn", + "for": [], + "access": "private", + "informative": false, + "heading": { + "id": "methods-13", + "href": "https://www.w3.org/TR/webrtc/#methods-13", + "title": "Methods" + }, + "definedIn": "prose" + }, { "id": "dfn-determine-if-dtmf-can-be-sent", "href": "https://www.w3.org/TR/webrtc/#dfn-determine-if-dtmf-can-be-sent", @@ -10886,9 +11451,9 @@ "determine if DTMF can be sent" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "caninsertdtmf-algorithm", @@ -10959,8 +11524,8 @@ "access": "public", "informative": false, "heading": { - "id": "attributes-21", - "href": "https://www.w3.org/TR/webrtc/#attributes-21", + "id": "attributes-22", + "href": "https://www.w3.org/TR/webrtc/#attributes-22", "title": "Attributes" }, "definedIn": "dt" @@ -11152,9 +11717,9 @@ "stats selection algorithm" ], "localLinkingText": [], - "type": "dfn", + "type": "abstract-op", "for": [], - "access": "private", + "access": "public", "informative": false, "heading": { "id": "the-stats-selection-algorithm", diff --git a/tr/headings/webrtc.json b/tr/headings/webrtc.json index 0f0c73f0adcc..9e01e6ad9591 100644 --- a/tr/headings/webrtc.json +++ b/tr/headings/webrtc.json @@ -65,6 +65,13 @@ "title": "RTCConfiguration Dictionary", "number": "4.2.1" }, + { + "id": "x4-2-1-rtcconfiguration-dictionary-dedup-0", + "href": "https://www.w3.org/TR/webrtc/#x4-2-1-rtcconfiguration-dictionary-dedup-0", + "level": 4, + "title": "RTCConfiguration Dictionary", + "number": "4.2.1" + }, { "id": "dictionary-rtcconfiguration-members", "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcconfiguration-members", @@ -72,14 +79,14 @@ "title": "Dictionary RTCConfiguration Members" }, { - "id": "dictionary-rtcconfiguration-members-new", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcconfiguration-members-new", + "id": "dictionary-rtcconfiguration-members-0-dedup-2", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcconfiguration-members-0-dedup-2", "level": 5, "title": "Dictionary RTCConfiguration Members" }, { - "id": "rtcicecredentialtype-enum", - "href": "https://www.w3.org/TR/webrtc/#rtcicecredentialtype-enum", + "id": "rtcicecredentialtype-enum-dedup-4", + "href": "https://www.w3.org/TR/webrtc/#rtcicecredentialtype-enum-dedup-4", "level": 4, "title": "RTCIceCredentialType Enum", "number": "4.2.2" @@ -91,6 +98,13 @@ "title": "RTCIceServer Dictionary", "number": "4.2.3" }, + { + "id": "x4-2-2-rtciceserver-dictionary", + "href": "https://www.w3.org/TR/webrtc/#x4-2-2-rtciceserver-dictionary", + "level": 4, + "title": "RTCIceServer Dictionary", + "number": "4.2.2" + }, { "id": "dictionary-rtciceserver-members", "href": "https://www.w3.org/TR/webrtc/#dictionary-rtciceserver-members", @@ -98,15 +112,8 @@ "title": "Dictionary RTCIceServer Members" }, { - "id": "rtciceserver-dictionary-new", - "href": "https://www.w3.org/TR/webrtc/#rtciceserver-dictionary-new", - "level": 4, - "title": "RTCIceServer Dictionary", - "number": "4.2.2" - }, - { - "id": "dictionary-rtciceserver-members-dedup-1", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtciceserver-members-dedup-1", + "id": "dictionary-rtciceserver-members-dedup-7", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtciceserver-members-dedup-7", "level": 5, "title": "Dictionary RTCIceServer Members" }, @@ -220,33 +227,19 @@ "title": "Update the connection state", "number": "4.4.1.3" }, - { - "id": "update-the-ice-gathering-state", - "href": "https://www.w3.org/TR/webrtc/#update-the-ice-gathering-state", - "level": 5, - "title": "Update the ICE gathering state", - "number": "4.4.1.4" - }, { "id": "set-the-session-description", "href": "https://www.w3.org/TR/webrtc/#set-the-session-description", "level": 5, "title": "Set the session description", - "number": "4.4.1.5" + "number": "4.4.1.4" }, { "id": "set-the-configuration", "href": "https://www.w3.org/TR/webrtc/#set-the-configuration", "level": 5, "title": "Set the configuration", - "number": "4.4.1.6" - }, - { - "id": "set-the-configuration-new", - "href": "https://www.w3.org/TR/webrtc/#set-the-configuration-new", - "level": 5, - "title": "Set the configuration", - "number": "4.4.1.6" + "number": "4.4.1.5" }, { "id": "interface-definition", @@ -522,12 +515,6 @@ "level": 5, "title": "Attributes" }, - { - "id": "rtcpeerconnectioniceevent-attributes", - "href": "https://www.w3.org/TR/webrtc/#rtcpeerconnectioniceevent-attributes", - "level": 5, - "title": "Attributes" - }, { "id": "dictionary-rtcpeerconnectioniceeventinit-members", "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcpeerconnectioniceeventinit-members", @@ -580,8 +567,8 @@ "number": "4.9.1" }, { - "id": "rtccertificateexpiration-dictionary-new", - "href": "https://www.w3.org/TR/webrtc/#rtccertificateexpiration-dictionary-new", + "id": "x4-9-1-rtccertificateexpiration-dictionary-dedup-72", + "href": "https://www.w3.org/TR/webrtc/#x4-9-1-rtccertificateexpiration-dictionary-dedup-72", "level": 4, "title": "RTCCertificateExpiration Dictionary", "number": "4.9.1" @@ -593,6 +580,13 @@ "title": "RTCCertificate Interface", "number": "4.9.2" }, + { + "id": "x4-9-2-rtccertificate-interface-dedup-74", + "href": "https://www.w3.org/TR/webrtc/#x4-9-2-rtccertificate-interface-dedup-74", + "level": 4, + "title": "RTCCertificate Interface", + "number": "4.9.2" + }, { "id": "attributes-7", "href": "https://www.w3.org/TR/webrtc/#attributes-7", @@ -600,27 +594,20 @@ "title": "Attributes" }, { - "id": "methods-4", - "href": "https://www.w3.org/TR/webrtc/#methods-4", + "id": "attributes-7-dedup-76", + "href": "https://www.w3.org/TR/webrtc/#attributes-7-dedup-76", "level": 5, - "title": "Methods" - }, - { - "id": "rtccertificate-interface-new", - "href": "https://www.w3.org/TR/webrtc/#rtccertificate-interface-new", - "level": 4, - "title": "RTCCertificate Interface", - "number": "4.9.2" + "title": "Attributes" }, { - "id": "attributes-7-dedup-5", - "href": "https://www.w3.org/TR/webrtc/#attributes-7-dedup-5", + "id": "methods-4", + "href": "https://www.w3.org/TR/webrtc/#methods-4", "level": 5, - "title": "Attributes" + "title": "Methods" }, { - "id": "methods-4-dedup-6", - "href": "https://www.w3.org/TR/webrtc/#methods-4-dedup-6", + "id": "methods-4-dedup-77", + "href": "https://www.w3.org/TR/webrtc/#methods-4-dedup-77", "level": 5, "title": "Methods" }, @@ -729,8 +716,8 @@ "title": "Dictionary RTCRtpCodingParameters Members" }, { - "id": "rtcrtpdecodingparameters", - "href": "https://www.w3.org/TR/webrtc/#rtcrtpdecodingparameters", + "id": "rtcrtpdecodingparameters-dedup-95", + "href": "https://www.w3.org/TR/webrtc/#rtcrtpdecodingparameters-dedup-95", "level": 4, "title": "RTCRtpDecodingParameters Dictionary", "number": "5.2.5" @@ -774,12 +761,25 @@ "level": 5, "title": "Dictionary RTCRtpHeaderExtensionParameters Members" }, + { + "id": "rtcrtpcodec", + "href": "https://www.w3.org/TR/webrtc/#rtcrtpcodec", + "level": 4, + "title": "RTCRtpCodec Dictionary", + "number": "5.2.8" + }, + { + "id": "dictionary-rtcrtpcodec-members", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodec-members", + "level": 5, + "title": "Dictionary RTCRtpCodec Members" + }, { "id": "rtcrtpcodecparameters", "href": "https://www.w3.org/TR/webrtc/#rtcrtpcodecparameters", "level": 4, "title": "RTCRtpCodecParameters Dictionary", - "number": "5.2.8" + "number": "5.2.9" }, { "id": "dictionary-rtcrtpcodecparameters-members", @@ -788,30 +788,30 @@ "title": "Dictionary RTCRtpCodecParameters Members" }, { - "id": "rtcrtpcapabilities", - "href": "https://www.w3.org/TR/webrtc/#rtcrtpcapabilities", + "id": "x5-2-9-rtcrtpcodecparameters-dictionary-dedup-97", + "href": "https://www.w3.org/TR/webrtc/#x5-2-9-rtcrtpcodecparameters-dictionary-dedup-97", "level": 4, - "title": "RTCRtpCapabilities Dictionary", + "title": "RTCRtpCodecParameters Dictionary", "number": "5.2.9" }, { - "id": "dictionary-rtcrtpcapabilities-members", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcapabilities-members", + "id": "dictionary-rtcrtpcodecparameters-members-dedup-99", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodecparameters-members-dedup-99", "level": 5, - "title": "Dictionary RTCRtpCapabilities Members" + "title": "Dictionary RTCRtpCodecParameters Members" }, { - "id": "rtcrtpcodeccapability", - "href": "https://www.w3.org/TR/webrtc/#rtcrtpcodeccapability", + "id": "rtcrtpcapabilities", + "href": "https://www.w3.org/TR/webrtc/#rtcrtpcapabilities", "level": 4, - "title": "RTCRtpCodecCapability Dictionary", + "title": "RTCRtpCapabilities Dictionary", "number": "5.2.10" }, { - "id": "dictionary-rtcrtpcodeccapability-members", - "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcodeccapability-members", + "id": "dictionary-rtcrtpcapabilities-members", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcrtpcapabilities-members", "level": 5, - "title": "Dictionary RTCRtpCodecCapability Members" + "title": "Dictionary RTCRtpCapabilities Members" }, { "id": "rtcrtpheaderextensioncapability", @@ -826,6 +826,19 @@ "level": 5, "title": "Dictionary RTCRtpHeaderExtensionCapability Members" }, + { + "id": "rtcsetparameteroptions-dictionary", + "href": "https://www.w3.org/TR/webrtc/#rtcsetparameteroptions-dictionary", + "level": 4, + "title": "RTCSetParameterOptions Dictionary", + "number": "5.2.12" + }, + { + "id": "dictionary-rtcsetparameteroptions-members", + "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcsetparameteroptions-members", + "level": 5, + "title": "Dictionary RTCSetParameterOptions Members" + }, { "id": "rtcrtpreceiver-interface", "href": "https://www.w3.org/TR/webrtc/#rtcrtpreceiver-interface", @@ -877,20 +890,6 @@ "title": "Simulcast functionality", "number": "5.4.1" }, - { - "id": "x5-4-1-1-encoding-parameter-examples", - "href": "https://www.w3.org/TR/webrtc/#x5-4-1-1-encoding-parameter-examples", - "level": 5, - "title": "Encoding Parameter Examples", - "number": "5.4.1.1" - }, - { - "id": "simulcast-functionality-new", - "href": "https://www.w3.org/TR/webrtc/#simulcast-functionality-new", - "level": 4, - "title": "Simulcast functionality", - "number": "5.4.1" - }, { "id": "rtcrtpencodingspatialsim-example*", "href": "https://www.w3.org/TR/webrtc/#rtcrtpencodingspatialsim-example*", @@ -983,12 +982,31 @@ "title": "RTCIceCandidatePair Dictionary", "number": "5.6.2" }, + { + "id": "x5-6-2-rtcicecandidatepair-interface", + "href": "https://www.w3.org/TR/webrtc/#x5-6-2-rtcicecandidatepair-interface", + "level": 4, + "title": "RTCIceCandidatePair Interface", + "number": "5.6.2" + }, { "id": "dictionary-rtcicecandidatepair-members", "href": "https://www.w3.org/TR/webrtc/#dictionary-rtcicecandidatepair-members", "level": 5, "title": "Dictionary RTCIceCandidatePair Members" }, + { + "id": "attributes-14", + "href": "https://www.w3.org/TR/webrtc/#attributes-14", + "level": 5, + "title": "" + }, + { + "id": "attributes-14-dedup-164", + "href": "https://www.w3.org/TR/webrtc/#attributes-14-dedup-164", + "level": 5, + "title": "Attributes" + }, { "id": "rtcicegathererstate", "href": "https://www.w3.org/TR/webrtc/#rtcicegathererstate", @@ -1031,8 +1049,8 @@ "title": "Constructors" }, { - "id": "attributes-14", - "href": "https://www.w3.org/TR/webrtc/#attributes-14", + "id": "attributes-15", + "href": "https://www.w3.org/TR/webrtc/#attributes-15", "level": 4, "title": "Attributes" }, @@ -1057,8 +1075,8 @@ "number": "6.1" }, { - "id": "attributes-15", - "href": "https://www.w3.org/TR/webrtc/#attributes-15", + "id": "attributes-16", + "href": "https://www.w3.org/TR/webrtc/#attributes-16", "level": 4, "title": "Attributes" }, @@ -1097,8 +1115,8 @@ "number": "6.1.1.3" }, { - "id": "attributes-16", - "href": "https://www.w3.org/TR/webrtc/#attributes-16", + "id": "attributes-17", + "href": "https://www.w3.org/TR/webrtc/#attributes-17", "level": 5, "title": "Attributes" }, @@ -1144,6 +1162,13 @@ "title": "Closing procedure", "number": "6.2.4" }, + { + "id": "x6-2-4-closing-procedure-dedup-167", + "href": "https://www.w3.org/TR/webrtc/#x6-2-4-closing-procedure-dedup-167", + "level": 4, + "title": "Closing procedure", + "number": "6.2.4" + }, { "id": "announcing-a-data-channel-as-closed", "href": "https://www.w3.org/TR/webrtc/#announcing-a-data-channel-as-closed", @@ -1151,23 +1176,30 @@ "title": "Announcing a data channel as closed", "number": "6.2.5" }, + { + "id": "transfering-a-data-channel", + "href": "https://www.w3.org/TR/webrtc/#transfering-a-data-channel", + "level": 4, + "title": "Transfering data channel", + "number": "6.2.6" + }, { "id": "error-on-creating-data-channels", "href": "https://www.w3.org/TR/webrtc/#error-on-creating-data-channels", "level": 4, "title": "Error on creating data channels", - "number": "6.2.6" + "number": "6.2.7" }, { "id": "receiving-messages-on-a-data-channel", "href": "https://www.w3.org/TR/webrtc/#receiving-messages-on-a-data-channel", "level": 4, "title": "Receiving messages on a data channel", - "number": "6.2.7" + "number": "6.2.8" }, { - "id": "attributes-17", - "href": "https://www.w3.org/TR/webrtc/#attributes-17", + "id": "attributes-18", + "href": "https://www.w3.org/TR/webrtc/#attributes-18", "level": 4, "title": "Attributes" }, @@ -1197,8 +1229,8 @@ "title": "Constructors" }, { - "id": "attributes-18", - "href": "https://www.w3.org/TR/webrtc/#attributes-18", + "id": "attributes-19", + "href": "https://www.w3.org/TR/webrtc/#attributes-19", "level": 4, "title": "Attributes" }, @@ -1230,8 +1262,8 @@ "number": "7.1" }, { - "id": "attributes-19", - "href": "https://www.w3.org/TR/webrtc/#attributes-19", + "id": "attributes-20", + "href": "https://www.w3.org/TR/webrtc/#attributes-20", "level": 4, "title": "Attributes" }, @@ -1243,8 +1275,8 @@ "number": "7.2" }, { - "id": "attributes-20", - "href": "https://www.w3.org/TR/webrtc/#attributes-20", + "id": "attributes-21", + "href": "https://www.w3.org/TR/webrtc/#attributes-21", "level": 4, "title": "Attributes" }, @@ -1275,8 +1307,8 @@ "title": "Constructors" }, { - "id": "attributes-21", - "href": "https://www.w3.org/TR/webrtc/#attributes-21", + "id": "attributes-22", + "href": "https://www.w3.org/TR/webrtc/#attributes-22", "level": 4, "title": "Attributes" }, @@ -1588,39 +1620,53 @@ "title": "14. Accessibility Considerations" }, { - "id": "changes", - "href": "https://www.w3.org/TR/webrtc/#changes", + "id": "proposed-amendments", + "href": "https://www.w3.org/TR/webrtc/#proposed-amendments", "level": 2, - "title": "Candidate Amendments", + "title": "Proposed Amendments", "number": "A" }, + { + "id": "candidate-amendments", + "href": "https://www.w3.org/TR/webrtc/#candidate-amendments", + "level": 2, + "title": "Candidate Amendments", + "number": "B" + }, { "id": "acknowledgements", "href": "https://www.w3.org/TR/webrtc/#acknowledgements", "level": 2, "title": "Acknowledgements", - "number": "B" + "number": "C" }, { "id": "references", "href": "https://www.w3.org/TR/webrtc/#references", "level": 2, "title": "References", - "number": "C" + "number": "D" }, { "id": "normative-references", "href": "https://www.w3.org/TR/webrtc/#normative-references", "level": 3, "title": "Normative references", - "number": "C.1" + "number": "B.1" + }, + { + "id": "d-1-normative-references", + "href": "https://www.w3.org/TR/webrtc/#d-1-normative-references", + "level": 3, + "title": "Normative references", + "number": "D.1" }, { "id": "informative-references", "href": "https://www.w3.org/TR/webrtc/#informative-references", "level": 3, "title": "Informative references", - "number": "C.2" + "number": "D.2" } ] } \ No newline at end of file diff --git a/tr/idl/webrtc.idl b/tr/idl/webrtc.idl index 82f11a71f7e5..e14299e42259 100644 --- a/tr/idl/webrtc.idl +++ b/tr/idl/webrtc.idl @@ -4,11 +4,11 @@ // Source: WebRTC: Real-Time Communication in Browsers (https://www.w3.org/TR/webrtc/) dictionary RTCConfiguration { - sequence