rfc8829v2.xml | rfc8829.xml | |||
---|---|---|---|---|
skipping to change at line 42 ¶ | skipping to change at line 42 ¶ | |||
<region>AB</region> | <region>AB</region> | |||
<code>T2P 4H2</code> | <code>T2P 4H2</code> | |||
<country>Canada</country> | <country>Canada</country> | |||
</postal> | </postal> | |||
<email>fluffy@iii.ca</email> | <email>fluffy@iii.ca</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Eric Rescorla" initials="E." surname="Rescorla" role="edit or"> | <author fullname="Eric Rescorla" initials="E." surname="Rescorla" role="edit or"> | |||
<organization>Mozilla</organization> | <organization>Mozilla</organization> | |||
<address> | <address> | |||
<postal> | ||||
<street>331 E. Evelyn Ave.</street> | ||||
<city>Mountain View</city> | ||||
<region>CA</region> | ||||
<code>94041</code> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>ekr@rtfm.com</email> | <email>ekr@rtfm.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date month="January" year="2021"/> | <date month="January" year="2021"/> | |||
<keyword>webrtc</keyword> | <keyword>webrtc</keyword> | |||
<keyword>sdp</keyword> | <keyword>sdp</keyword> | |||
<keyword>negotiation</keyword> | <keyword>negotiation</keyword> | |||
<keyword>signaling</keyword> | <keyword>signaling</keyword> | |||
skipping to change at line 133 ¶ | skipping to change at line 126 ¶ | |||
<t>To complete the offer/answer exchange, the remote party uses | <t>To complete the offer/answer exchange, the remote party uses | |||
the createAnswer API to generate an appropriate answer, | the createAnswer API to generate an appropriate answer, | |||
applies it using the setLocalDescription API, and sends the | applies it using the setLocalDescription API, and sends the | |||
answer back to the initiator over the signaling channel. When | answer back to the initiator over the signaling channel. When | |||
the initiator gets that answer, it installs it using the | the initiator gets that answer, it installs it using the | |||
setRemoteDescription API, and initial setup is complete. This | setRemoteDescription API, and initial setup is complete. This | |||
process can be repeated for additional offer/answer | process can be repeated for additional offer/answer | |||
exchanges.</t> | exchanges.</t> | |||
<t>Regarding ICE | <t>Regarding ICE | |||
<xref target="RFC8445" format="default"/>, JSEP decouples the ICE state | <xref target="RFC8445" format="default"/>, JSEP decouples the ICE state | |||
machine from the overall signaling state machine, as the ICE | machine from the overall signaling state machine. The ICE | |||
state machine must remain in the JSEP implementation, because | state machine must remain in the JSEP implementation because | |||
only the implementation has the necessary knowledge of | only the implementation has the necessary knowledge of | |||
candidates and other transport information. Performing this | candidates and other transport information. Performing this | |||
separation provides additional flexibility in protocols that | separation provides additional flexibility in protocols that | |||
decouple session descriptions from transport. For instance, in | decouple session descriptions from transport. For instance, in | |||
traditional SIP, each offer or answer is self-contained, | traditional SIP, each offer or answer is self-contained, | |||
including both the session descriptions and the transport | including both the session descriptions and the transport | |||
information. However, | information. However, | |||
<xref target="RFC8840" format="default"/> allows SIP to | <xref target="RFC8840" format="default"/> allows SIP to | |||
be used with Trickle ICE | be used with Trickle ICE | |||
<xref target="RFC8838" format="default"/>, in which the session | <xref target="RFC8838" format="default"/>, in which the session | |||
skipping to change at line 167 ¶ | skipping to change at line 160 ¶ | |||
descriptions and ICE information into the defined messages of | descriptions and ICE information into the defined messages of | |||
its chosen signaling protocol, and perform the reverse | its chosen signaling protocol, and perform the reverse | |||
conversion on the messages it receives from the other side.</t> | conversion on the messages it receives from the other side.</t> | |||
<t>One way to make life easier for the application is to | <t>One way to make life easier for the application is to | |||
provide a JavaScript library that hides this complexity from | provide a JavaScript library that hides this complexity from | |||
the developer; said library would implement a given signaling | the developer; said library would implement a given signaling | |||
protocol along with its state machine and serialization code, | protocol along with its state machine and serialization code, | |||
presenting a higher-level call-oriented interface to the | presenting a higher-level call-oriented interface to the | |||
application developer. For example, libraries exist to provide | application developer. For example, libraries exist to provide | |||
implementations of the SIP <xref target="RFC3261"/> and Extensible Messa ging | implementations of the SIP <xref target="RFC3261"/> and Extensible Messa ging | |||
and Presence Protocol (XMPP) <xref target="RFC6120"/> signaling | and Presence Protocol (XMPP) <xref target="RFC6120"/> signaling | |||
protocols atop the JSEP API. | protocols atop the JSEP API. | |||
Thus, JSEP | Thus, JSEP | |||
provides greater control for the experienced developer without | provides greater control for the experienced developer without | |||
forcing any additional complexity on the novice developer.</t> | forcing any additional complexity on the novice developer.</t> | |||
</section> | </section> | |||
<section anchor="sec.other-approaches-consider" numbered="true" toc="defau lt"> | <section anchor="sec.other-approaches-consider" numbered="true" toc="defau lt"> | |||
<name>Other Approaches Considered</name> | <name>Other Approaches Considered</name> | |||
<t>One approach that was considered instead of JSEP was to | <t>One approach that was considered instead of JSEP was to | |||
include a lightweight signaling protocol. Instead of providing | include a lightweight signaling protocol. Instead of providing | |||
session descriptions to the API, the API would produce and | session descriptions to the API, the API would produce and | |||
skipping to change at line 215 ¶ | skipping to change at line 208 ¶ | |||
its own session descriptions. This increases the amount of work | its own session descriptions. This increases the amount of work | |||
that the application needs to do; it needs to know how to | that the application needs to do; it needs to know how to | |||
generate session descriptions from capabilities, and especially | generate session descriptions from capabilities, and especially | |||
how to generate the correct answer from an arbitrary offer and | how to generate the correct answer from an arbitrary offer and | |||
the supported capabilities. While this could certainly be | the supported capabilities. While this could certainly be | |||
addressed by using a library like the one mentioned above, it | addressed by using a library like the one mentioned above, it | |||
basically forces the use of said library even for a simple | basically forces the use of said library even for a simple | |||
example. Providing createOffer/createAnswer avoids this | example. Providing createOffer/createAnswer avoids this | |||
problem.</t> | problem.</t> | |||
</section> | </section> | |||
<section> | ||||
<name>Contradiction regarding bundle-only "m=" sections</name> | ||||
<t>Since the approval of the WebRTC specification documents, the IETF has become | ||||
aware of an inconsistency between the document specifying JSEP and the document | ||||
specifying BUNDLE (this RFC and <xref target="RFC8843"/>, respectively). Rather | ||||
than delaying publication further to come to a resolution, the documents are be | ||||
ing published as they were originally approved. The IETF intends to restart wor | ||||
k on these technologies, and revised versions of these documents will be publish | ||||
ed as soon as a resolution becomes available.</t> | ||||
<t>The specific issue involves the handling of "m=" sections that are designated | ||||
as bundle-only, as discussed in <xref target="sec.pc-constructor"/> of this RFC | ||||
. Currently, there is divergence between JSEP and BUNDLE, as well as between the | ||||
se specifications and existing browser implementations:</t> | ||||
<ul> | ||||
<li>JSEP prescribes that said "m=" sections should use port zero and add an "a | ||||
=bundle-only" attribute in initial offers, but not in answers or subsequent offe | ||||
rs.</li> | ||||
<li>BUNDLE prescribes that these "m=" sections should be marked as described i | ||||
n the previous point, but in all offers and answers.</li> | ||||
<li>Most current browsers do not mark any "m=" sections with port zero and ins | ||||
tead use the same port for all bundled "m=" sections; one follows the JSEP behav | ||||
ior.</li> | ||||
</ul> | ||||
</section> | ||||
</section> | </section> | |||
<section anchor="sec.terminology" numbered="true" toc="default"> | <section anchor="sec.terminology" numbered="true" toc="default"> | |||
<name>Terminology</name> | <name>Terminology</name> | |||
<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
"<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | |||
"<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | |||
"<bcp14>SHOULD NOT</bcp14>", | "<bcp14>SHOULD NOT</bcp14>", | |||
"<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | |||
to be interpreted as described in BCP 14 <xref target="RFC2119"/> | to be interpreted as described in BCP 14 <xref target="RFC2119"/> | |||
skipping to change at line 346 ¶ | skipping to change at line 350 ¶ | |||
known. These "resources" can include things like extra ICE | known. These "resources" can include things like extra ICE | |||
components, Traversal Using Relays around NAT (TURN) candidates, or vide o decoders. Provisional | components, Traversal Using Relays around NAT (TURN) candidates, or vide o decoders. Provisional | |||
answers, on the other hand, do no such deallocation; as a | answers, on the other hand, do no such deallocation; as a | |||
result, multiple dissimilar provisional answers, with their own | result, multiple dissimilar provisional answers, with their own | |||
codec choices, transport parameters, etc., can be received and | codec choices, transport parameters, etc., can be received and | |||
applied during call setup. Note that the final answer itself | applied during call setup. Note that the final answer itself | |||
may be different than any received provisional answers.</t> | may be different than any received provisional answers.</t> | |||
<t>In | <t>In | |||
<xref target="RFC3264" format="default"/>, the constraint at the signali ng | <xref target="RFC3264" format="default"/>, the constraint at the signali ng | |||
level is that only one offer can be outstanding for a given | level is that only one offer can be outstanding for a given | |||
session, but at the media stack level, a new offer can be | session, but at the JSEP level, a new offer can be | |||
generated at any point. For example, when using SIP for | generated at any point. For example, when using SIP for | |||
signaling, if one offer is sent and is then canceled using a SIP | signaling, if one offer is sent and is then canceled using a SIP | |||
CANCEL, another offer can be generated even though no answer | CANCEL, another offer can be generated even though no answer | |||
was received for the first offer. To support this, the JSEP | was received for the first offer. To support this, the JSEP | |||
media layer can provide an offer via the createOffer method | media layer can provide an offer via the createOffer method | |||
whenever the JavaScript application needs one for the | whenever the JavaScript application needs one for the | |||
signaling. The answerer can send back zero or more provisional | signaling. The answerer can send back zero or more provisional | |||
answers and then finally end the offer/answer exchange by sending a | answers and then finally end the offer/answer exchange by sending a | |||
final answer. The state machine for this is as follows:</t> | final answer. The state machine for this is as follows:</t> | |||
<figure anchor="fig-state-machine"> | <figure anchor="fig-state-machine"> | |||
skipping to change at line 723 ¶ | skipping to change at line 727 ¶ | |||
<t>The "a=imageattr" field is payload type specific. When all | <t>The "a=imageattr" field is payload type specific. When all | |||
video codecs supported have the same capabilities, use of a | video codecs supported have the same capabilities, use of a | |||
single attribute, with the wildcard payload type (*), is | single attribute, with the wildcard payload type (*), is | |||
<bcp14>RECOMMENDED</bcp14>. However, when the supported video codecs h ave | <bcp14>RECOMMENDED</bcp14>. However, when the supported video codecs h ave | |||
different limitations, specific "a=imageattr" attributes <bcp14>MUST</ bcp14> | different limitations, specific "a=imageattr" attributes <bcp14>MUST</ bcp14> | |||
be inserted for each payload type.</t> | be inserted for each payload type.</t> | |||
<t>As an example, consider a system with a multiformat video | <t>As an example, consider a system with a multiformat video | |||
decoder, which is capable of decoding any resolution from | decoder, which is capable of decoding any resolution from | |||
48x48 to 720p. In this case, the implementation would | 48x48 to 720p. In this case, the implementation would | |||
generate this attribute:</t> | generate this attribute:</t> | |||
<t>a=imageattr:* recv [x=[48:1280],y=[48:720],q=1.0]</t> | <sourcecode type="sdp"><![CDATA[ | |||
a=imageattr:* recv [x=[48:1280],y=[48:720],q=1.0] | ||||
]]></sourcecode> | ||||
<t>This declaration indicates that the receiver is capable of | <t>This declaration indicates that the receiver is capable of | |||
decoding any image resolution from 48x48 up to 1280x720 | decoding any image resolution from 48x48 up to 1280x720 | |||
pixels.</t> | pixels.</t> | |||
</section> | </section> | |||
<section anchor="sec.interpreting-imageattr" numbered="true" toc="defaul t"> | <section anchor="sec.interpreting-imageattr" numbered="true" toc="defaul t"> | |||
<name>Interpreting imageattr Attributes</name> | <name>Interpreting imageattr Attributes</name> | |||
<t> | <t> | |||
<xref target="RFC6236" format="default"/> defines "a=imageattr" to be an | <xref target="RFC6236" format="default"/> defines "a=imageattr" to be an | |||
advisory field. This means that it does not absolutely | advisory field. This means that it does not absolutely | |||
constrain the video formats that the sender can use but | constrain the video formats that the sender can use but | |||
skipping to change at line 1220 ¶ | skipping to change at line 1226 ¶ | |||
or stop flowing. Specifically, the offer is not applied, and | or stop flowing. Specifically, the offer is not applied, and | |||
does not become the pending local description, until | does not become the pending local description, until | |||
setLocalDescription is called.</t> | setLocalDescription is called.</t> | |||
</section> | </section> | |||
<section anchor="sec.createanswer" numbered="true" toc="default"> | <section anchor="sec.createanswer" numbered="true" toc="default"> | |||
<name>createAnswer</name> | <name>createAnswer</name> | |||
<t>The createAnswer method generates a blob of SDP that | <t>The createAnswer method generates a blob of SDP that | |||
contains an SDP answer per <xref target="RFC3264" format="default"/> w ith the supported | contains an SDP answer per <xref target="RFC3264" format="default"/> w ith the supported | |||
configuration for the session that is compatible with the | configuration for the session that is compatible with the | |||
parameters supplied in the most recent call to | parameters supplied in the most recent call to | |||
setRemoteDescription, which <bcp14>MUST</bcp14> have been called prior to | setRemoteDescription; setRemoteDescription <bcp14>MUST</bcp14> have be en called prior to | |||
calling createAnswer. Like createOffer, the returned blob | calling createAnswer. Like createOffer, the returned blob | |||
contains descriptions of the media added to this | contains descriptions of the media added to this | |||
PeerConnection, the codec/RTP/RTCP options negotiated for | PeerConnection, the codec/RTP/RTCP options negotiated for | |||
this session, and any candidates that have been gathered by | this session, and any candidates that have been gathered by | |||
the ICE agent. An options parameter may be supplied to | the ICE agent. An options parameter may be supplied to | |||
provide additional control over the generated answer.</t> | provide additional control over the generated answer.</t> | |||
<t>As an answer, the generated SDP will contain a specific | <t>As an answer, the generated SDP will contain a specific | |||
configuration that specifies how the media plane should be | configuration that specifies how the media plane should be | |||
established; for each SDP line, the generation of the SDP | established; for each SDP line, the generation of the SDP | |||
<bcp14>MUST</bcp14> follow the process defined for generating an answe r from | <bcp14>MUST</bcp14> follow the process defined for generating an answe r from | |||
skipping to change at line 1552 ¶ | skipping to change at line 1558 ¶ | |||
ICE candidate generation. However, if both fields are null | ICE candidate generation. However, if both fields are null | |||
for a new remote candidate, this <bcp14>MUST</bcp14> be treated as an | for a new remote candidate, this <bcp14>MUST</bcp14> be treated as an | |||
invalid condition, as specified below.</t> | invalid condition, as specified below.</t> | |||
<t>If any IceCandidate fields contain invalid values or an | <t>If any IceCandidate fields contain invalid values or an | |||
error occurs during the processing of the IceCandidate | error occurs during the processing of the IceCandidate | |||
object, the supplied IceCandidate <bcp14>MUST</bcp14> be ignored and a n | object, the supplied IceCandidate <bcp14>MUST</bcp14> be ignored and a n | |||
error <bcp14>MUST</bcp14> be returned.</t> | error <bcp14>MUST</bcp14> be returned.</t> | |||
<t>Otherwise, the new remote candidate or end-of-candidates | <t>Otherwise, the new remote candidate or end-of-candidates | |||
indication is supplied to the ICE agent. In the case of a new | indication is supplied to the ICE agent. In the case of a new | |||
remote candidate, connectivity checks will be sent to the new | remote candidate, connectivity checks will be sent to the new | |||
candidate.</t> | candidate, assuming setLocalDescription has already been | |||
called to initialize the ICE gathering process.</t> | ||||
</section> | </section> | |||
<section anchor="sec.onicecandidate" numbered="true" toc="default"> | <section anchor="sec.onicecandidate" numbered="true" toc="default"> | |||
<name>onicecandidate Event</name> | <name>onicecandidate Event</name> | |||
<t>The onicecandidate event is dispatched to the application in two | <t>The onicecandidate event is dispatched to the application in two | |||
situations: (1) when the ICE agent has discovered a new allowed local | situations: (1) when the ICE agent has discovered a new allowed local | |||
ICE candidate during ICE gathering, as outlined in | ICE candidate during ICE gathering, as outlined in | |||
<xref target="sec.ice-gather-overview" format="default"></xref> and | <xref target="sec.ice-gather-overview" format="default"></xref> and | |||
subject to the restrictions discussed in | subject to the restrictions discussed in | |||
<xref target="sec.ice-candidate-policy" format="default"></xref>, or | <xref target="sec.ice-candidate-policy" format="default"></xref>, or | |||
(2) when an ICE gathering phase completes. The event contains a single | (2) when an ICE gathering phase completes. The event contains a single | |||
skipping to change at line 1856 ¶ | skipping to change at line 1863 ¶ | |||
PeerConnection, excluding any stopped RtpTransceivers; this | PeerConnection, excluding any stopped RtpTransceivers; this | |||
is done in the order the RtpTransceivers were added to the | is done in the order the RtpTransceivers were added to the | |||
PeerConnection. If there are no such RtpTransceivers, no "m=" | PeerConnection. If there are no such RtpTransceivers, no "m=" | |||
sections are generated; more can be added later, as discussed | sections are generated; more can be added later, as discussed | |||
in | in | |||
<xref target="RFC3264" sectionFormat="comma" section="5"/>.</t> | <xref target="RFC3264" sectionFormat="comma" section="5"/>.</t> | |||
<t>For each "m=" section generated for an RtpTransceiver, | <t>For each "m=" section generated for an RtpTransceiver, | |||
establish a mapping between the transceiver and the index of | establish a mapping between the transceiver and the index of | |||
the generated "m=" section.</t> | the generated "m=" section.</t> | |||
<t>Each "m=" section, provided it is not marked as bundle-only, | <t>Each "m=" section, provided it is not marked as bundle-only, | |||
<bcp14>MUST</bcp14> generate a unique set of ICE credentials and gathe | <bcp14>MUST</bcp14> contain a unique set of ICE credentials and | |||
r its | a unique set of ICE candidates. Bundle-only "m=" sections | |||
own unique set of ICE candidates. Bundle-only "m=" sections | ||||
<bcp14>MUST NOT</bcp14> contain any ICE credentials and <bcp14>MUST NO T</bcp14> gather any | <bcp14>MUST NOT</bcp14> contain any ICE credentials and <bcp14>MUST NO T</bcp14> gather any | |||
candidates.</t> | candidates.</t> | |||
<t>For DTLS, all "m=" sections <bcp14>MUST</bcp14> use any and all cer tificates | <t>For DTLS, all "m=" sections <bcp14>MUST</bcp14> use any and all cer tificates | |||
that have been specified for the PeerConnection; as a result, | that have been specified for the PeerConnection; as a result, | |||
they <bcp14>MUST</bcp14> all have the same fingerprint value or values | they <bcp14>MUST</bcp14> all have the same fingerprint value or values | |||
<xref target="RFC8122" format="default"/>, or these | <xref target="RFC8122" format="default"/>, or these | |||
values <bcp14>MUST</bcp14> be session-level attributes.</t> | values <bcp14>MUST</bcp14> be session-level attributes.</t> | |||
<t>Each "m=" section <bcp14>MUST</bcp14> be generated as specified in | <t>Each "m=" section <bcp14>MUST</bcp14> be generated as specified in | |||
<xref target="RFC4566" sectionFormat="comma" section="5.14"/>. For the "m=" line | <xref target="RFC4566" sectionFormat="comma" section="5.14"/>. For the "m=" line | |||
itself, the following rules <bcp14>MUST</bcp14> be followed: | itself, the following rules <bcp14>MUST</bcp14> be followed: | |||
skipping to change at line 2466 ¶ | skipping to change at line 2473 ¶ | |||
<sourcecode name="" type="sdp"><![CDATA[ | <sourcecode name="" type="sdp"><![CDATA[ | |||
a=group:LS a1 v1 | a=group:LS a1 v1 | |||
m=audio 20000 UDP/TLS/RTP/SAVPF 0 | m=audio 20000 UDP/TLS/RTP/SAVPF 0 | |||
a=mid:a1 | a=mid:a1 | |||
a=recvonly | a=recvonly | |||
m=video 20001 UDP/TLS/RTP/SAVPF 96 | m=video 20001 UDP/TLS/RTP/SAVPF 96 | |||
a=mid:v1 | a=mid:v1 | |||
a=recvonly ]]></sourcecode> | a=recvonly ]]></sourcecode> | |||
<t>The example in <xref target="sec.detailed-example" format="default" /> shows a more involved case of "LS" group | <t>The example in <xref target="sec.detailed-example" format="default" /> shows a more involved case of "LS" group | |||
generation.</t> | generation.</t> | |||
<t>The next step is to generate "m=" sections for each "m=" | <t>The next step is to generate an "m=" section for each "m=" | |||
section that is present in the remote offer, as specified in | section that is present in the remote offer, as specified in | |||
<xref target="RFC3264" sectionFormat="comma" section="6"/>. For the pu rposes | <xref target="RFC3264" sectionFormat="comma" section="6"/>. For the pu rposes | |||
of this discussion, any session-level attributes in the offer | of this discussion, any session-level attributes in the offer | |||
that are also valid as media-level attributes are considered | that are also valid as media-level attributes are considered | |||
to be present in each "m=" section. Each offered "m=" section | to be present in each "m=" section. Each offered "m=" section | |||
will have an associated RtpTransceiver, as described in | will have an associated RtpTransceiver, as described in | |||
<xref target="sec.applying-a-remote-desc" format="default"/>. If there are | <xref target="sec.applying-a-remote-desc" format="default"/>. If there are | |||
more RtpTransceivers than there are "m=" sections, the | more RtpTransceivers than there are "m=" sections, the | |||
unmatched RtpTransceivers will need to be associated in a | unmatched RtpTransceivers will need to be associated in a | |||
subsequent offer.</t> | subsequent offer.</t> | |||
skipping to change at line 3479 ¶ | skipping to change at line 3486 ¶ | |||
associated media formats.</li> | associated media formats.</li> | |||
<li> | <li> | |||
<t>For any specified "TIAS" ("Transport | <t>For any specified "TIAS" ("Transport | |||
Independent Application Specific Maximum") bandwidth value, set this value | Independent Application Specific Maximum") bandwidth value, set this value | |||
as a constraint on the maximum RTP bitrate to be used when | as a constraint on the maximum RTP bitrate to be used when | |||
sending media, as specified in | sending media, as specified in | |||
<xref target="RFC3890" format="default"/>. If a "TIAS" value is not | <xref target="RFC3890" format="default"/>. If a "TIAS" value is not | |||
present but an "AS" value is specified, generate a "TIAS" | present but an "AS" value is specified, generate a "TIAS" | |||
value using this formula: | value using this formula: | |||
</t> | </t> | |||
<ul empty="true"> | <artwork> | |||
<li>TIAS = AS * 1000 * 0.95 - (50 * 40 * 8)</li> | TIAS = AS * 1000 * 0.95 - (50 * 40 * 8) | |||
</ul> | </artwork> | |||
<t> | <t> | |||
The 1000 changes the unit from kbps to bps (as required | The 1000 changes the unit from kbps to bps (as required | |||
by TIAS), and the 0.95 is to allocate 5% to RTCP. | by TIAS), and the 0.95 is to allocate 5% to RTCP. | |||
An estimate of header overhead is then subtracted out, in which | An estimate of header overhead is then subtracted out, in which | |||
the 50 is based on 50 packets per second, the 40 is based on | the 50 is based on 50 packets per second, the 40 is based on | |||
typical header size (in bytes), and the 8 converts bytes to bits. | typical header size (in bytes), and the 8 converts bytes to bits. | |||
Note that "TIAS" is preferred over | Note that "TIAS" is preferred over | |||
"AS" because it provides more accurate | "AS" because it provides more accurate | |||
control of bandwidth.</t> | control of bandwidth.</t> | |||
</li> | </li> | |||
skipping to change at line 3598 ¶ | skipping to change at line 3605 ¶ | |||
that the JSEP implementation should be sending media | that the JSEP implementation should be sending media | |||
("sendonly" for local answers, "recvonly" for remote | ("sendonly" for local answers, "recvonly" for remote | |||
answers, or "sendrecv" for either type of answer), choose | answers, or "sendrecv" for either type of answer), choose | |||
the media format to send as the most preferred media format | the media format to send as the most preferred media format | |||
from the remote description that is also locally supported, | from the remote description that is also locally supported, | |||
as discussed in Sections <xref target="RFC3264" section="6.1" | as discussed in Sections <xref target="RFC3264" section="6.1" | |||
sectionFormat="bare"/> and <xref target="RFC3264" section="7" sectionFormat=" bare"/> of <xref target="RFC3264"/>, and start | sectionFormat="bare"/> and <xref target="RFC3264" section="7" sectionFormat=" bare"/> of <xref target="RFC3264"/>, and start | |||
transmitting RTP media using that format once the | transmitting RTP media using that format once the | |||
underlying transport layers have been established. If an | underlying transport layers have been established. If an | |||
SSRC has not already been chosen for this outgoing RTP | SSRC has not already been chosen for this outgoing RTP | |||
stream, choose a random one. If media is already being | stream, choose a unique random one. If media is already being | |||
transmitted, the same SSRC <bcp14>SHOULD</bcp14> be used unless th e | transmitted, the same SSRC <bcp14>SHOULD</bcp14> be used unless th e | |||
clock rate of the new codec is different, in which case a | clock rate of the new codec is different, in which case a | |||
new SSRC <bcp14>MUST</bcp14> be chosen, as specified in | new SSRC <bcp14>MUST</bcp14> be chosen, as specified in | |||
<xref target="RFC7160" sectionFormat="comma" section="4.1"/>.</li> | <xref target="RFC7160" sectionFormat="comma" section="4.1"/>.</li> | |||
<li>The payload type mapping from the remote description is | <li>The payload type mapping from the remote description is | |||
used to determine payload types for the outgoing RTP | used to determine payload types for the outgoing RTP | |||
streams, including the payload type for the send media | streams, including the payload type for the send media | |||
format chosen above. Any RTP header extensions that were | format chosen above. Any RTP header extensions that were | |||
negotiated should be included in the outgoing RTP streams, | negotiated should be included in the outgoing RTP streams, | |||
using the extension mapping from the remote description. If the MI D | using the extension mapping from the remote description. If the MI D | |||
skipping to change at line 3632 ¶ | skipping to change at line 3639 ¶ | |||
<xref target="sec.voiceactivitydetection1" format="default"/>. | <xref target="sec.voiceactivitydetection1" format="default"/>. | |||
If these | If these | |||
conditions are not met, silence suppression <bcp14>MUST NOT</bcp14 > be | conditions are not met, silence suppression <bcp14>MUST NOT</bcp14 > be | |||
used for outgoing media.</li> | used for outgoing media.</li> | |||
<li>If simulcast has been negotiated, send the appropriate numbe r of | <li>If simulcast has been negotiated, send the appropriate numbe r of | |||
Source RTP Streams as specified in | Source RTP Streams as specified in | |||
<xref target="RFC8853" sectionFormat="comma" section="5.3.3"/>.</l i> | <xref target="RFC8853" sectionFormat="comma" section="5.3.3"/>.</l i> | |||
<li>If the send media format chosen above has a | <li>If the send media format chosen above has a | |||
corresponding "rtx" media format or a FEC mechanism has | corresponding "rtx" media format or a FEC mechanism has | |||
been negotiated, establish a redundancy RTP stream with a | been negotiated, establish a redundancy RTP stream with a | |||
random SSRC for each Source RTP Stream, and start or | unique random SSRC for each Source RTP Stream, and start or | |||
continue transmitting RTX/FEC packets as needed.</li> | continue transmitting RTX/FEC packets as needed.</li> | |||
<li>If the send media format chosen above has a | <li>If the send media format chosen above has a | |||
corresponding "red" media format of the same clock rate, | corresponding "red" media format of the same clock rate, | |||
allow redundant encoding using the specified format for | allow redundant encoding using the specified format for | |||
resiliency purposes, as discussed in | resiliency purposes, as discussed in | |||
<xref target="RFC8854" sectionFormat="comma" section="3.2"/>. Note | <xref target="RFC8854" sectionFormat="comma" section="3.2"/>. Note | |||
that unlike RTX or FEC media formats, the "red" format is | that unlike RTX or FEC media formats, the "red" format is | |||
transmitted on the Source RTP Stream, not the redundancy | transmitted on the Source RTP Stream, not the redundancy | |||
RTP stream.</li> | RTP stream.</li> | |||
<li>Enable the RTCP feedback mechanisms referenced in the | <li>Enable the RTCP feedback mechanisms referenced in the | |||
End of changes. 13 change blocks. | ||||
23 lines changed or deleted | 42 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |