rfc8853xml2.original.xml | rfc8853.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<?rfc toc="yes"?> | ||||
<?rfc tocompact="yes"?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" | |||
<?rfc tocdepth="3"?> | ipr="trust200902" submissionType="IETF" number="8853" consensus="true" | |||
<?rfc tocindent="yes"?> | obsoletes="" updates="" xml:lang="en" tocInclude="true" symRefs="true" | |||
<?rfc symrefs="yes"?> | sortRefs="true" version="3" docName="draft-ietf-mmusic-sdp-simulcast-14"> | |||
<?rfc sortrefs="yes"?> | ||||
<?rfc comments="yes"?> | <!-- xml2rfc v2v3 conversion 2.31.0 --> | |||
<?rfc inline="yes"?> | ||||
<?rfc compact="yes"?> | ||||
<?rfc subcompact="no"?> | ||||
<rfc category="std" docName="draft-ietf-mmusic-sdp-simulcast-14" | ||||
ipr="trust200902" submissionType="IETF"> | ||||
<front> | <front> | |||
<title abbrev="Simulcast">Using Simulcast in SDP and RTP Sessions</title> | <title abbrev="Simulcast">Using Simulcast in Session Description Protocol (S DP) and RTP Sessions</title> | |||
<seriesInfo name="RFC" value="8853"/> | ||||
<author fullname="Bo Burman" initials="B." surname="Burman"> | <author fullname="Bo Burman" initials="B." surname="Burman"> | |||
<organization>Ericsson</organization> | <organization>Ericsson</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Gronlandsgatan 31</street> | <street>Gronlandsgatan 31</street> | |||
<city>SE-164 60 Stockholm</city> | <city>SE-164 60 Stockholm</city> | |||
<region/> | <region/> | |||
<code/> | <code/> | |||
<country>Sweden</country> | <country>Sweden</country> | |||
</postal> | </postal> | |||
<phone/> | <phone/> | |||
<facsimile/> | ||||
<email>bo.burman@ericsson.com</email> | <email>bo.burman@ericsson.com</email> | |||
<uri/> | <uri/> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Magnus Westerlund" initials="M." surname="Westerlund"> | <author fullname="Magnus Westerlund" initials="M." surname="Westerlund"> | |||
<organization>Ericsson</organization> | <organization>Ericsson</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Torshamnsgatan 23</street> | <street>Torshamnsgatan 23</street> | |||
<city>SE-164 83 Stockholm</city> | <city>SE-164 83 Stockholm</city> | |||
<country>Sweden</country> | <country>Sweden</country> | |||
</postal> | </postal> | |||
<phone>+46 10 714 82 87</phone> | ||||
<email>magnus.westerlund@ericsson.com</email> | <email>magnus.westerlund@ericsson.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar"> | <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar"> | |||
<organization>Cisco</organization> | <organization>Cisco</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>170 West Tasman Drive</street> | <street>170 West Tasman Drive</street> | |||
<city>San Jose</city> | <city>San Jose</city> | |||
<region>CA</region> | <region>CA</region> | |||
<code>95134</code> | <code>95134</code> | |||
<country>United States of America</country> | ||||
<country>USA</country> | ||||
</postal> | </postal> | |||
<phone/> | <phone/> | |||
<facsimile/> | ||||
<email>snandaku@cisco.com</email> | <email>snandaku@cisco.com</email> | |||
<uri/> | <uri/> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Mo Zanaty" initials="M." surname="Zanaty"> | <author fullname="Mo Zanaty" initials="M." surname="Zanaty"> | |||
<organization>Cisco</organization> | <organization>Cisco</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>170 West Tasman Drive</street> | <street>170 West Tasman Drive</street> | |||
<city>San Jose</city> | <city>San Jose</city> | |||
<region>CA</region> | <region>CA</region> | |||
<code>95134</code> | <code>95134</code> | |||
<country>United States of America</country> | ||||
<country>USA</country> | ||||
</postal> | </postal> | |||
<phone/> | <phone/> | |||
<facsimile/> | ||||
<email>mzanaty@cisco.com</email> | <email>mzanaty@cisco.com</email> | |||
<uri/> | <uri/> | |||
</address> | </address> | |||
</author> | </author> | |||
<date month="May" year="2020"/> | ||||
<date day="5" month="March" year="2019"/> | <keyword>Conference</keyword> | |||
<keyword>multi-party</keyword> | ||||
<keyword>middlebox</keyword> | ||||
<keyword>MCU</keyword> | ||||
<keyword>SFU</keyword> | ||||
<keyword>media</keyword> | ||||
<keyword>video</keyword> | ||||
<keyword>restrictions</keyword> | ||||
<keyword>RTCP</keyword> | ||||
<keyword>RID</keyword> | ||||
<keyword>RtpStreamId</keyword> | ||||
<abstract> | <abstract> | |||
<t>In some application scenarios it may be desirable to send multiple | ||||
<t>In some application scenarios, it may be desirable to send multiple | ||||
differently encoded versions of the same media source in different RTP | differently encoded versions of the same media source in different RTP | |||
streams. This is called simulcast. This document describes how to | streams. This is called simulcast. This document describes how to | |||
accomplish simulcast in RTP and how to signal it in SDP. The described | accomplish simulcast in RTP and how to signal it in the Session | |||
solution uses an RTP/RTCP identification method to identify RTP streams | Description Protocol (SDP). The described solution uses an RTP/RTCP | |||
belonging to the same media source, and makes an extension to SDP to | identification method to identify RTP streams | |||
relate those RTP streams as being different simulcast formats of that | belonging to the same media source and makes an extension to SDP to | |||
media source. The SDP extension consists of a new media level SDP | indicate that those RTP streams are different simulcast formats of that | |||
media source. The SDP extension consists of a new media-level SDP | ||||
attribute that expresses capability to send and/or receive simulcast RTP | attribute that expresses capability to send and/or receive simulcast RTP | |||
streams.</t> | streams.</t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="sec-intro" title="Introduction"> | <section anchor="sec-intro" numbered="true" toc="default"> | |||
<t>Most of today's multiparty video conference solutions make use of | <name>Introduction</name> | |||
<t>Most of today's multiparty video-conference solutions make use of | ||||
centralized servers to reduce the bandwidth and CPU consumption in the | centralized servers to reduce the bandwidth and CPU consumption in the | |||
endpoints. Those servers receive RTP streams from each participant and | endpoints. Those servers receive RTP streams from each participant and | |||
send some suitable set of possibly modified RTP streams to the rest of | send some suitable set of possibly modified RTP streams to the rest of | |||
the participants, which usually have heterogeneous capabilities (screen | the participants, which usually have heterogeneous capabilities (screen | |||
size, CPU, bandwidth, codec, etc). One of the biggest issues is how to | size, CPU, bandwidth, codec, etc.). One of the biggest issues is how to | |||
perform RTP stream adaptation to different participants' constraints | perform RTP stream adaptation to different participants' constraints | |||
with the minimum possible impact on both video quality and server | with the minimum possible impact on both video quality and server | |||
performance.</t> | performance.</t> | |||
<t>Simulcast is defined in this memo as the act of simultaneously | <t>Simulcast is defined in this memo as the act of simultaneously | |||
sending multiple different encoded streams of the same media source, | sending multiple different encoded streams of the same media source -- | |||
e.g. the same video source encoded with different video encoder types or | e.g., the same video source encoded with different video-encoder types or | |||
image resolutions. This can be done in several ways and for different | image resolutions. This can be done in several ways and for different | |||
purposes. This document focuses on the case where it is desirable to | purposes. This document focuses on the case where it is desirable to | |||
provide a media source as multiple encoded streams over <xref | provide a media source as multiple encoded streams over <xref target="RFC3 | |||
target="RFC3550">RTP</xref> towards an intermediary so that the | 550" format="default">RTP</xref> towards an intermediary so that the | |||
intermediary can provide the wanted functionality by selecting which RTP | intermediary can provide the wanted functionality by selecting which RTP | |||
stream(s) to forward to other participants in the session, and more | stream(s) to forward to other participants in the session, and more | |||
specifically how the identification and grouping of the involved RTP | specifically how the identification and grouping of the involved RTP | |||
streams are done.</t> | streams are done.</t> | |||
<t>The intended scope of the defined mechanism is to support negotiation | <t>The intended scope of the defined mechanism is to support negotiation | |||
and usage of simulcast when using SDP offer/answer and media transport | and usage of simulcast when using SDP offer/answer and media transport | |||
over RTP. The media transport topologies considered are point to point | over RTP. The media transport topologies considered are point-to-point | |||
RTP sessions as well as centralized multi-party RTP sessions, where a | RTP sessions, as well as centralized multiparty RTP sessions, where a | |||
media sender will provide the simulcasted streams to an RTP middlebox or | media sender will provide the simulcasted streams to an RTP middlebox or | |||
endpoint, and middleboxes may further distribute the simulcast streams | endpoint, and middleboxes may further distribute the simulcast streams | |||
to other middleboxes or endpoints. Simulcast could, as part of a | to other middleboxes or endpoints. Simulcast could be used point to point | |||
distributed multi-party scenario, be used point-to-point between | between | |||
middleboxes. Usage of multicast or broadcast transport is out of scope | middleboxes as part of a distributed multiparty scenario. Usage of | |||
multicast or broadcast transport is out of scope | ||||
and left for future extensions.</t> | and left for future extensions.</t> | |||
<t>This document describes a few scenarios that motivate the use of | <t>This document describes a few scenarios that motivate the use of | |||
simulcast, and also defines the needed RTP/RTCP and SDP signaling for | simulcast and also defines the needed RTP/RTCP and SDP signaling for | |||
it.</t> | it.</t> | |||
</section> | </section> | |||
<section anchor="sec-definitions" numbered="true" toc="default"> | ||||
<section anchor="sec-definitions" title="Definitions"> | <name>Definitions</name> | |||
<t/> | <section numbered="true" toc="default"> | |||
<name>Terminology</name> | ||||
<section title="Terminology"> | ||||
<t>This document makes use of the terminology defined in <xref | <t>This document makes use of the terminology defined in <xref | |||
target="RFC7656">RTP Taxonomy</xref>, and <xref target="RFC7667">RTP | target="RFC7656" format="default">"A Taxonomy of Semantics and | |||
Topologies</xref>. The following terms are especially noted or here | Mechanisms for Real-Time | |||
defined:<list style="hanging"> | Transport Protocol (RTP) Sources"</xref> and <xref target="RFC7667" | |||
<t hangText="RTP Mixer:">An RTP middle node, defined in <xref | format="default">"RTP Topologies"</xref>. The following terms are | |||
target="RFC7667"/> (Section 3.6 to 3.9).</t> | especially noted or here defined:</t> | |||
<dl newline="false" spacing="normal"> | ||||
<t hangText="RTP Session:">An association among a group of | <dt>RTP mixer:</dt> | |||
participants communicating with RTP, as defined in <xref | <dd>An RTP middlebox, in the wide sense of the term, encompassing | |||
target="RFC3550"/> and amended by <xref target="RFC7656"/>.</t> | Sections <xref target="RFC7667" section="3.6" sectionFormat="bare"/> | |||
to <xref target="RFC7667" section="3.9" sectionFormat="bare"/> of | ||||
<t hangText="RTP Stream:">A stream of RTP packets containing media | <xref target="RFC7667" format="default"/>.</dd> | |||
data, as defined in <xref target="RFC7656"/>.</t> | <dt>RTP session:</dt> | |||
<dd>An association among a group of | ||||
<t hangText="RTP Switch:">A common short term for the terms | participants communicating with RTP, as defined in <xref target="RFC | |||
3550" format="default"/> and amended by <xref target="RFC7656" format="default"/ | ||||
>.</dd> | ||||
<dt>RTP stream:</dt> | ||||
<dd>A stream of RTP packets containing media | ||||
data, as defined in <xref target="RFC7656" format="default"/>.</dd> | ||||
<dt>RTP switch:</dt> | ||||
<dd>A common short term for the terms | ||||
"switching RTP mixer", "source projecting middlebox", and "video | "switching RTP mixer", "source projecting middlebox", and "video | |||
switching MCU" as discussed in <xref target="RFC7667"/>.</t> | switching Multipoint Control Unit (MCU)", as discussed in <xref targ | |||
et="RFC7667" format="default"/>.</dd> | ||||
<t hangText="Simulcast Stream:">One encoded stream or dependent | <dt>Simulcast stream:</dt> | |||
<dd>One encoded stream or dependent | ||||
stream from a set of concurrently transmitted encoded streams and | stream from a set of concurrently transmitted encoded streams and | |||
optional dependent streams, all sharing a common media source, as | optional dependent streams, all sharing a common media source, as | |||
defined in <xref target="RFC7656"/>. For example, HD and thumbnail | defined in <xref target="RFC7656" format="default"/>. For example, H D and thumbnail | |||
video simulcast versions of a single media source sent | video simulcast versions of a single media source sent | |||
concurrently as separate RTP Streams.</t> | concurrently as separate RTP streams.</dd> | |||
<dt>Simulcast format:</dt> | ||||
<t hangText="Simulcast Format:">Different formats of a simulcast | <dd>Different formats of a simulcast | |||
stream serve the same purpose as alternative RTP payload types in | stream serve the same purpose as alternative RTP payload types in | |||
non-simulcast SDP: to allow multiple alternative media formats for | nonsimulcast SDP: to allow multiple alternative media formats for | |||
a given RTP stream. As for multiple RTP payload types on the | a given RTP stream. As for multiple RTP payload types on the | |||
m-line in <xref target="RFC3264">offer/answer</xref>, any one of | "m=" line in <xref target="RFC3264" format="default">offer/answer</x ref>, any one of | |||
the negotiated alternative formats can be used in a single RTP | the negotiated alternative formats can be used in a single RTP | |||
stream at a given point in time, but not more than one (based on | stream at a given point in time, but not more than one (based on | |||
RTP timestamp). What format is used can change dynamically from | RTP timestamp). What format is used can change dynamically from | |||
one RTP packet to another.</t> | one RTP packet to another.</dd> | |||
</list></t> | </dl> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Requirements Language"> | <name>Requirements Language</name> | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | <t> | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
when, they appear in all capitals, as shown here.</t> | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | ||||
to be interpreted as | ||||
described in BCP 14 <xref target="RFC2119" format="default"/> <xref | ||||
target="RFC8174" format="default"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec-use-cases" numbered="true" toc="default"> | ||||
<section anchor="sec-use-cases" title="Use Cases"> | <name>Use Cases</name> | |||
<t>The use cases of simulcast described in this document relate to a | <t>The use cases of simulcast described in this document relate to a | |||
multi-party communication session where one or more central nodes are | multiparty communication session where one or more central nodes are | |||
used to adapt the view of the communication session towards individual | used to adapt the view of the communication session towards individual | |||
participants, and facilitate the media transport between participants. | participants and facilitate the media transport between participants. | |||
Thus, these cases target the RTP Mixer type of topology.</t> | Thus, these cases target the RTP mixer type of topology.</t> | |||
<t>There are two principal approaches for an RTP mixer to provide this | ||||
<t>There are two principal approaches for an RTP Mixer to provide this | ||||
adapted view of the communication session to each receiving | adapted view of the communication session to each receiving | |||
participant:<list style="symbols"> | participant:</t> | |||
<t>Transcoding (decoding and re-encoding) received RTP streams with | <ul spacing="normal"> | |||
<li>Transcoding (decoding and re-encoding) received RTP streams with | ||||
characteristics adapted to each receiving participant. This often | characteristics adapted to each receiving participant. This often | |||
include mixing or composition of media sources from multiple | includes mixing or composition of media sources from multiple | |||
participants into a mixed media source originated by the RTP Mixer. | participants into a mixed media source originated by the RTP mixer. | |||
The main advantage of this approach is that it achieves close to | The main advantage of this approach is that it achieves | |||
optimal adaptation to individual receiving participants. The main | close-to-optimal adaptation to individual receiving | |||
participants. The main | ||||
disadvantages are that it can be very computationally expensive to | disadvantages are that it can be very computationally expensive to | |||
the RTP Mixer, typically degrades media Quality of Experience (QoE) | the RTP mixer, typically degrades media Quality of Experience (QoE) | |||
such as end-to-end delay for the receiving participants, and | such as creating end-to-end delay for the receiving participants, and | |||
requires RTP Mixer access to media content.</t> | requires the RTP mixer to have access to media content.</li> | |||
<li>Switching a subset of all received RTP streams or substreams to | ||||
<t>Switching a subset of all received RTP streams or sub-streams to | ||||
each receiving participant, where the used subset is typically | each receiving participant, where the used subset is typically | |||
specific to each receiving participant. The main advantages of this | specific to each receiving participant. The main advantages of this | |||
approach are that it is computationally cheap to the RTP Mixer, has | approach are that it is computationally cheap to the RTP mixer, has | |||
very limited impact on media QoE, and does not require RTP Mixer | very limited impact on media QoE, and does not require the RTP mixer | |||
(full) access to media content. The main disadvantage is that it can | to have (full) access to media content. The main disadvantage is | |||
be difficult to combine a subset of received RTP streams into a | that it can be difficult to combine a subset of received RTP streams in | |||
perfect fit to the resource situation of a receiving participant. It | to a | |||
perfect fit for the resource situation of a receiving participant. It | ||||
is also a disadvantage that sending multiple RTP streams consumes | is also a disadvantage that sending multiple RTP streams consumes | |||
more network resources from the sending participant to the RTP | more network resources from the sending participant to the RTP | |||
Mixer.</t> | mixer.</li> | |||
</list></t> | </ul> | |||
<t>The use of simulcast relates to the latter approach, where it is more | <t>The use of simulcast relates to the latter approach, where it is more | |||
important to reduce the load on the RTP Mixer and/or minimize QoE impact | important to reduce the load on the RTP mixer and/or minimize QoE impact | |||
than to achieve an optimal adaptation of resource usage.</t> | than to achieve an optimal adaptation of resource usage.</t> | |||
<section anchor="sec-diverse-receivers" numbered="true" toc="default"> | ||||
<section anchor="sec-diverse-receivers" | <name>Reaching a Diverse Set of Receivers</name> | |||
title="Reaching a Diverse Set of Receivers"> | ||||
<t>The media sources provided by a sending participant potentially | <t>The media sources provided by a sending participant potentially | |||
need to reach several receiving participants that differ in terms of | need to reach several receiving participants that differ in terms of | |||
available resources. The receiver resources that typically differ | available resources. The receiver resources that typically differ | |||
include, but are not limited to:<list style="hanging"> | include, but are not limited to:</t> | |||
<t hangText="Codec:">This includes codec type (such as RTP payload | <dl newline="false" spacing="normal"> | |||
<dt>Codec:</dt> | ||||
<dd>This includes codec type (such as RTP payload | ||||
format MIME type) and can include codec configuration. A couple of | format MIME type) and can include codec configuration. A couple of | |||
codec resources that differ only in codec configuration will be | codec resources that differ only in codec configuration will be | |||
"different" if they are somehow not "compatible", like if they | "different" if they are somehow not "compatible", such as if they | |||
differ in video codec profile, or the transport packetization | differ in video codec profile or the transport packetization | |||
configuration.</t> | configuration.</dd> | |||
<dt>Sampling:</dt> | ||||
<t hangText="Sampling:">This relates to how the media source is | <dd>This relates to how the media source is | |||
sampled, in spatial as well as in temporal domain. For video | sampled, in spatial as well as temporal domain. For video | |||
streams, spatial sampling affects image resolution and temporal | streams, spatial sampling affects image resolution, and temporal | |||
sampling affects video frame rate. For audio, spatial sampling | sampling affects video frame rate. For audio, spatial sampling | |||
relates to the number of audio channels and temporal sampling | relates to the number of audio channels, and temporal sampling | |||
affects audio bandwidth. This may be used to suit different | affects audio bandwidth. This may be used to suit different | |||
rendering capabilities or needs at the receiving endpoints.</t> | rendering capabilities or needs at the receiving endpoints.</dd> | |||
<dt>Bitrate:</dt> | ||||
<t hangText="Bitrate:">This relates to the number of bits sent per | <dd>This relates to the number of bits sent per | |||
second to transmit the media source as an RTP stream, which | second to transmit the media source as an RTP stream, which | |||
typically also affects the QoE for the receiving user.</t> | typically also affects the QoE for the receiving user.</dd> | |||
</list>Letting the sending participant create a simulcast of a few | </dl> | |||
<t>Letting the sending participant create a simulcast of a few | ||||
differently configured RTP streams per media source can be a good | differently configured RTP streams per media source can be a good | |||
tradeoff when using an RTP switch as middlebox, instead of sending a | trade-off when using an RTP switch as middlebox, instead of sending a | |||
single RTP stream and using an RTP mixer to create individual | single RTP stream and using an RTP mixer to create individual | |||
transcodings to each receiving participant.</t> | transcodings to each receiving participant.</t> | |||
<t>This requires that the receiving participants can be categorized in | <t>This requires that the receiving participants can be categorized in | |||
terms of available resources and that the sending participant can | terms of available resources and that the sending participant can | |||
choose a matching configuration for a single RTP stream per category | choose a matching configuration for a single RTP stream per category | |||
and media source. For example, a set of receiving participants differ | and media source. For example, a set of receiving participants differ | |||
only in screen resolution; some are able to display video with at most | only in screen resolution; some are able to display video with at most | |||
360p resolution and some support 720p resolution. A sending | 360p resolution, and some support 720p resolution. A sending | |||
participant can then reach all receivers with best possible resolution | participant can then reach all receivers with best possible resolution | |||
by creating a simulcast of RTP streams with 360p and 720p resolution | by creating a simulcast of RTP streams with 360p and 720p resolution | |||
for each sent video media source.</t> | for each sent video media source.</t> | |||
<t>The maximum number of simulcasted RTP streams that can be sent is | <t>The maximum number of simulcasted RTP streams that can be sent is | |||
mainly limited by the amount of processing and uplink network | mainly limited by the amount of processing and uplink network | |||
resources available to the sending participant.</t> | resources available to the sending participant.</t> | |||
</section> | </section> | |||
<section anchor="sec-application-specific" numbered="true" toc="default"> | ||||
<section anchor="sec-application-specific" | <name>Application-Specific Media Source Handling</name> | |||
title="Application Specific Media Source Handling"> | ||||
<t>The application logic that controls the communication session may | <t>The application logic that controls the communication session may | |||
include special handling of some media sources. It is, for example, | include special handling of some media sources. It is, for example, | |||
commonly the case that the media from a sending participant is not | commonly the case that the media from a sending participant is not | |||
sent back to itself.</t> | sent back to itself.</t> | |||
<t>It is also common that a currently active speaker participant is | <t>It is also common that a currently active speaker participant is | |||
shown in larger size or higher quality than other participants (the | shown in larger size or higher quality than other participants (the | |||
sampling or bitrate aspects of <xref target="sec-diverse-receivers"/>) | sampling or bitrate aspects of <xref target="sec-diverse-receivers" | |||
format="default"/>) | ||||
in a receiving client. Many conferencing systems do not send the | in a receiving client. Many conferencing systems do not send the | |||
active speaker's media back to the sender itself, which means there is | active speaker's media back to the sender itself, which means there is | |||
some other participant's media that instead is forwarded to the active | some other participant's media that instead is forwarded to the active | |||
speaker; typically the previous active speaker. This way, the | speaker -- typically the previous active speaker. This way, the | |||
previously active speaker is needed both in larger size (to current | previously active speaker is needed both in larger size (to current | |||
active speaker) and in small size (to the rest of the participants), | active speaker) and in small size (to the rest of the participants), | |||
which can be solved with a simulcast from the previously active | which can be solved with a simulcast from the previously active | |||
speaker to the RTP switch.</t> | speaker to the RTP switch.</t> | |||
</section> | </section> | |||
<section anchor="sec-receiver-preferences" numbered="true" toc="default"> | ||||
<section anchor="sec-receiver-preferences" | <name>Receiver Media-Source Preferences</name> | |||
title="Receiver Media Source Preferences"> | ||||
<t>The application logic that controls the communication session may | <t>The application logic that controls the communication session may | |||
allow receiving participants to state preferences on the | allow receiving participants to state preferences on the | |||
characteristics of the RTP stream they like to receive, for example in | characteristics of the RTP stream they like to receive, for example in | |||
terms of the aspects listed in <xref target="sec-diverse-receivers"/>. | terms of the aspects listed in <xref target="sec-diverse-receivers" form at="default"/>. | |||
Sending a simulcast of RTP streams is one way of accommodating | Sending a simulcast of RTP streams is one way of accommodating | |||
receivers with conflicting or otherwise incompatible preferences.</t> | receivers with conflicting or otherwise incompatible preferences.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec-overview" numbered="true" toc="default"> | ||||
<section anchor="sec-overview" title="Overview"> | <name>Overview</name> | |||
<t>This memo defines <xref target="RFC4566">SDP</xref> signaling that | <t>This memo defines <xref target="RFC4566" format="default">SDP</xref> si | |||
gnaling that | ||||
covers the above described simulcast use cases and functionalities. A | covers the above described simulcast use cases and functionalities. A | |||
number of requirements for such signaling are elaborated in <xref | number of requirements for such signaling are elaborated in <xref target=" | |||
target="sec-requirements"/>.</t> | sec-requirements" format="default"/>.</t> | |||
<t>The RID mechanism, as defined in <xref | <t>The Restriction Identifier (RID) mechanism, as defined in <xref target= | |||
target="I-D.ietf-mmusic-rid"/>, enables an SDP offerer or answerer to | "RFC8851" format="default"/>, enables an SDP offerer or answerer to | |||
specify a number of different RTP stream restrictions for a rid-id by | specify a number of different RTP stream restrictions for a rid-id by | |||
using the "a=rid" line. Examples of such restrictions are maximum | using the "a=rid" line. Examples of such restrictions are maximum | |||
bitrate, maximum spatial video resolution (width and height), maximum | bitrate, maximum spatial video resolution (width and height), maximum | |||
video framerate, etc. Each rid-id may also be restricted to use only a | video frame rate, etc. Each rid-id may also be restricted to use only a | |||
subset of the RTP payload types in the associated SDP media description. | subset of the RTP payload types in the associated SDP media description. | |||
Those RTP payload types can have their own configurations and parameters | Those RTP payload types can have their own configurations and parameters | |||
affecting what can be sent or received, using the "a=fmtp" line as well | affecting what can be sent or received, using the "a=fmtp" line as well | |||
as other SDP attributes.</t> | as other SDP attributes.</t> | |||
<t>A new SDP media-level attribute, "a=simulcast", is defined. The | ||||
<t>A new SDP media level attribute "a=simulcast" is defined. The | attribute describes, independently for "send" and "receive" directions, th | |||
attribute describes, independently for send and receive directions, the | e | |||
number of simulcast RTP streams as well as potential alternative formats | number of simulcast RTP streams as well as potential alternative formats | |||
for each simulcast RTP stream. Each simulcast RTP stream, including | for each simulcast RTP stream. Each simulcast RTP stream, including | |||
alternatives, is identified using the RID identifier (rid-id), defined | alternatives, is identified using the RID identifier (rid-id), defined | |||
in <xref target="I-D.ietf-mmusic-rid"/>.</t> | in <xref target="RFC8851" format="default"/>.</t> | |||
<!-- DO NOT EDIT --> | ||||
<figure align="left"> | <sourcecode type="sdp"> | |||
<artwork align="left"><![CDATA[a=simulcast:send 1;2,3 recv 4 | a=simulcast:send 1;2,3 recv 4 | |||
]]></artwork> | </sourcecode> | |||
</figure> | <!-- End DNE --> | |||
<t>If this line is included in an SDP offer, the "send" part | ||||
<t>If the above line is included in an SDP offer, the "send" part | ||||
indicates the offerer's capability and proposal to send two simulcast | indicates the offerer's capability and proposal to send two simulcast | |||
RTP streams. Each simulcast stream is described by one or more RTP | RTP streams. Each simulcast stream is described by one or more RTP | |||
stream identifiers (rid-id), each group of rid-ids for a simulcast | stream identifiers (rid-ids), and each group of rid-ids for a simulcast | |||
stream is separated by a semicolon (";"). When a simulcast stream has | stream is separated by a semicolon (";"). When a simulcast stream has | |||
multiple rid-ids that are separated by a comma (","), they describe | multiple rid-ids that are separated by a comma (","), they describe | |||
alternative representations for that particular simulcast RTP stream. | alternative representations for that particular simulcast RTP stream. | |||
Thus, the above "send" part is interpreted as an intention to send two | Thus, the "send" part shown above is interpreted as an intention to send t wo | |||
simulcast RTP streams. The first simulcast RTP stream is identified and | simulcast RTP streams. The first simulcast RTP stream is identified and | |||
restricted according to rid-id 1. The second simulcast RTP stream can be | restricted according to rid-id 1. The second simulcast RTP stream can be | |||
sent as two alternatives, identified and restricted according to rid-ids | sent as two alternatives, identified and restricted according to rid-ids | |||
2 and 3. The "recv" part of the above line indicates that the offerer | 2 and 3. The "recv" part of the line shown here indicates that the offerer | |||
desires to receive a single RTP stream (no simulcast) according to | desires to receive a single RTP stream (no simulcast) according to | |||
rid-id 4.</t> | rid-id 4.</t> | |||
<t>A more complete example SDP-offer media description is provided | ||||
in <xref target="fig-md-offer" format="default"/>.</t> | ||||
<!-- DO NOT EDIT --> | ||||
<t>A more complete example SDP offer media description is provided | <figure anchor="fig-md-offer"> | |||
below:</t> | <name>Example Simulcast Media Description in Offer</name> | |||
<sourcecode type="sdp"> | ||||
<figure align="center" anchor="fig-md-offer" | ||||
title="Example Simulcast Media Description in Offer"> | ||||
<artwork align="left"><![CDATA[ | ||||
m=video 49300 RTP/AVP 97 98 99 | m=video 49300 RTP/AVP 97 98 99 | |||
a=rtpmap:97 H264/90000 | a=rtpmap:97 H264/90000 | |||
a=rtpmap:98 H264/90000 | a=rtpmap:98 H264/90000 | |||
a=rtpmap:99 VP8/90000 | a=rtpmap:99 VP8/90000 | |||
a=fmtp:97 profile-level-id=42c01f;max-fs=3600;max-mbps=108000 | a=fmtp:97 profile-level-id=42c01f;max-fs=3600;max-mbps=108000 | |||
a=fmtp:98 profile-level-id=42c00b;max-fs=240;max-mbps=3600 | a=fmtp:98 profile-level-id=42c00b;max-fs=240;max-mbps=3600 | |||
a=fmtp:99 max-fs=240; max-fr=30 | a=fmtp:99 max-fs=240; max-fr=30 | |||
a=rid:1 send pt=97;max-width=1280;max-height=720 | a=rid:1 send pt=97;max-width=1280;max-height=720 | |||
a=rid:2 send pt=98;max-width=320;max-height=180 | a=rid:2 send pt=98;max-width=320;max-height=180 | |||
a=rid:3 send pt=99;max-width=320;max-height=180 | a=rid:3 send pt=99;max-width=320;max-height=180 | |||
a=rid:4 recv pt=97 | a=rid:4 recv pt=97 | |||
a=simulcast:send 1;2,3 recv 4 | a=simulcast:send 1;2,3 recv 4 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | |||
]]></artwork> | </sourcecode> | |||
</figure> | </figure> | |||
<!-- End DNE --> | ||||
<t>The above SDP media description can be interpreted at a high level to | <t>The SDP media description in <xref target="fig-md-offer" format="defaul | |||
say that the offerer is capable of sending two simulcast RTP streams, | t"/> can be | |||
interpreted at a high level to | ||||
say that the offerer is capable of sending two simulcast RTP streams: | ||||
one H.264 encoded stream in up to 720p resolution, and one additional | one H.264 encoded stream in up to 720p resolution, and one additional | |||
stream encoded as either H.264 or VP8 with a maximum resolution of | stream encoded as either H.264 or VP8 with a maximum resolution of | |||
320x180 pixels. The offerer can receive one H.264 stream with maximum | 320x180 pixels. The offerer can receive one H.264 stream with maximum | |||
720p resolution.</t> | 720p resolution.</t> | |||
<t>The receiver of this SDP offer can generate an SDP answer that | <t>The receiver of this SDP offer can generate an SDP answer that | |||
indicates what it accepts. It uses the "a=simulcast" attribute to | indicates what it accepts. It uses the "a=simulcast" attribute to | |||
indicate simulcast capability and specify what simulcast RTP streams and | indicate simulcast capability and specify what simulcast RTP streams and | |||
alternatives to receive and/or send. An example of such answering | alternatives to receive and/or send. An example of such an answering | |||
"a=simulcast" attribute, corresponding to the above offer, is:</t> | "a=simulcast" attribute, corresponding to the above offer, is:</t> | |||
<!-- DO NOT EDIT --> | ||||
<figure align="left"> | <sourcecode type="sdp"> | |||
<artwork align="left"><![CDATA[a=simulcast:recv 1;2 send 4 | a=simulcast:recv 1;2 send 4 | |||
]]></artwork> | </sourcecode> | |||
</figure> | <!-- End DNE --> | |||
<t>With this SDP answer, the answerer indicates in the "recv" part that | <t>With this SDP answer, the answerer indicates in the "recv" part that | |||
it wants to receive the two simulcast RTP streams. It has removed an | it wants to receive the two simulcast RTP streams. It has removed an | |||
alternative that it doesn't support (rid-id 3). The send part confirms | alternative that it doesn't support (rid-id 3). The "send" part confirms | |||
to the offerer that it will receive one stream for this media source | to the offerer that it will receive one stream for this media source | |||
according to rid-id 4. The corresponding, more complete example SDP | according to rid-id 4. The corresponding, more complete example SDP | |||
answer media description could look like:</t> | answer media description could look like <xref target="fig-md-answer" form | |||
at="default"/>.</t> | ||||
<figure align="center" anchor="fig-md-answer" | <!-- DO NOT EDIT --> | |||
title="Example Simulcast Media Description in Answer"> | <figure anchor="fig-md-answer"> | |||
<artwork align="left"><![CDATA[ | <name>Example Simulcast Media Description in Answer</name> | |||
<sourcecode type="sdp"> | ||||
m=video 49674 RTP/AVP 97 98 | m=video 49674 RTP/AVP 97 98 | |||
a=rtpmap:97 H264/90000 | a=rtpmap:97 H264/90000 | |||
a=rtpmap:98 H264/90000 | a=rtpmap:98 H264/90000 | |||
a=fmtp:97 profile-level-id=42c01f;max-fs=3600;max-mbps=108000 | a=fmtp:97 profile-level-id=42c01f;max-fs=3600;max-mbps=108000 | |||
a=fmtp:98 profile-level-id=42c00b;max-fs=240;max-mbps=3600 | a=fmtp:98 profile-level-id=42c00b;max-fs=240;max-mbps=3600 | |||
a=rid:1 recv pt=97;max-width=1280;max-height=720 | a=rid:1 recv pt=97;max-width=1280;max-height=720 | |||
a=rid:2 recv pt=98;max-width=320;max-height=180 | a=rid:2 recv pt=98;max-width=320;max-height=180 | |||
a=rid:4 send pt=97 | a=rid:4 send pt=97 | |||
a=simulcast:recv 1;2 send 4 | a=simulcast:recv 1;2 send 4 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | |||
]]></artwork> | </sourcecode> | |||
</figure> | </figure> | |||
<!-- End DNE --> | ||||
<t>It is assumed that a single SDP media description is used to describe | <t>It is assumed that a single SDP media description is used to describe | |||
a single media source. This is aligned with the concepts defined in | a single media source. This is aligned with the concepts defined in | |||
<xref target="RFC7656"/> and will work in a WebRTC context, both with | <xref target="RFC7656" format="default"/> and will work in a WebRTC contex | |||
and without <xref | t, both with | |||
target="I-D.ietf-mmusic-sdp-bundle-negotiation">BUNDLE</xref> grouping | and without BUNDLE grouping of media descriptions <xref target="RFC8843" f | |||
of media descriptions.</t> | ormat="default"/>.</t> | |||
<t>To summarize, the "a=simulcast" line describes "send"- and | ||||
<t>To summarize, the "a=simulcast" line describes send and receive | "receive"-direction simulcast streams separately. Each direction can in | |||
direction simulcast streams separately. Each direction can in turn | turn describe one or more simulcast streams, separated by semicolons. The | |||
describe one or more simulcast streams, separated by semicolon. The | ||||
identifiers describing simulcast streams on the "a=simulcast" line are | identifiers describing simulcast streams on the "a=simulcast" line are | |||
rid-id, as defined by "a=rid" lines in <xref | rid-ids, as defined by "a=rid" lines in <xref target="RFC8851" format="def | |||
target="I-D.ietf-mmusic-rid"/>. Each simulcast stream can be offered as | ault"/>. Each simulcast stream can be offered as | |||
a list of alternative rid-id, with each alternative separated by comma | a list of alternative rid-ids, with each alternative separated by a comma | |||
(not in the examples above). A detailed specification can be found in | as shown in the example offer in <xref target="fig-md-offer"/>. A detailed | |||
<xref target="sec-details"/> and more detailed examples are outlined in | specification can be found in | |||
<xref target="sec-ex"/>.</t> | <xref target="sec-details" format="default"/>, and more detailed examples | |||
are outlined in | ||||
<xref target="sec-ex" format="default"/>.</t> | ||||
</section> | </section> | |||
<section anchor="sec-details" numbered="true" toc="default"> | ||||
<section anchor="sec-details" title="Detailed Description"> | <name>Detailed Description</name> | |||
<t>This section further details the overview <xref | <t>This section provides further details to the overview in <xref target=" | |||
target="sec-overview">above</xref>. First, formal syntax is <xref | sec-overview" format="default"/>. First, formal syntax is <xref target="sec-attr | |||
target="sec-attr">provided</xref>, followed by the rest of the SDP | " format="default">provided</xref>, followed by the rest of the SDP | |||
attribute definition in <xref target="sec-cap"/>. <xref | attribute definition in <xref target="sec-cap" format="default"/>. <xref t | |||
target="sec-relating">Relating Simulcast Streams </xref> provides the | arget="sec-relating" format="default">"Relating Simulcast Streams"</xref> provid | |||
definition of the RTP/RTCP mechanisms used. The section is concluded | es the | |||
definition of the RTP/RTCP mechanisms used. The section concludes | ||||
with a number of examples.</t> | with a number of examples.</t> | |||
<section anchor="sec-attr" numbered="true" toc="default"> | ||||
<section anchor="sec-attr" title="Simulcast Attribute"> | <name>Simulcast Attribute</name> | |||
<t>This document defines a new SDP media-level "a=simulcast" | <t>This document defines a new SDP media-level "a=simulcast" | |||
attribute, with value according to the following <xref | attribute, with value according to the syntax in <xref target="fig-abnf" | |||
target="RFC5234">ABNF</xref> syntax and its update for <xref | format="default"/>, which uses <xref target="RFC5234" format="default">ABNF</xr | |||
target="RFC7405">Case-Sensitive String Support in ABNF</xref>:</t> | ef> and its update, <xref target="RFC7405" format="default">"Case-Sensitive Stri | |||
ng Support in ABNF"</xref>:</t> | ||||
<figure align="center" anchor="fig-abnf" | <!-- DO NOT EDIT --> | |||
title="ABNF for Simulcast Value"> | <figure anchor="fig-abnf"> | |||
<artwork align="center"><![CDATA[ | <name>ABNF for Simulcast Value</name> | |||
<sourcecode type="abnf"> | ||||
sc-value = ( sc-send [SP sc-recv] ) / ( sc-recv [SP sc-send] ) | sc-value = ( sc-send [SP sc-recv] ) / ( sc-recv [SP sc-send] ) | |||
sc-send = %s"send" SP sc-str-list | sc-send = %s"send" SP sc-str-list | |||
sc-recv = %s"recv" SP sc-str-list | sc-recv = %s"recv" SP sc-str-list | |||
sc-str-list = sc-alt-list *( ";" sc-alt-list ) | sc-str-list = sc-alt-list *( ";" sc-alt-list ) | |||
sc-alt-list = sc-id *( "," sc-id ) | sc-alt-list = sc-id *( "," sc-id ) | |||
sc-id-paused = "~" | sc-id-paused = "~" | |||
sc-id = [sc-id-paused] rid-id | sc-id = [sc-id-paused] rid-id | |||
; SP defined in [RFC5234] | ; SP defined in [RFC5234] | |||
; rid-id defined in [I-D.ietf-mmusic-rid] | ; rid-id defined in [RFC8851] | |||
]]></artwork> | </sourcecode> | |||
</figure> | </figure> | |||
<!-- End DNE --> | ||||
<t><list style="empty"> | ||||
<t>Note to RFC Editor: Replace "I-D.ietf-mmusic-rid" in the above | ||||
figure with RFC number of draft-ietf-mmusic-rid before publication | ||||
of this document.</t> | ||||
</list></t> | ||||
<t>The "a=simulcast" attribute has a parameter in the form of one or | <t>The "a=simulcast" attribute has a parameter in the form of one or | |||
two simulcast stream descriptions, each consisting of a direction | two simulcast stream descriptions, each consisting of a direction | |||
("send" or "recv"), followed by a list of one or more simulcast | ("send" or "recv"), followed by a list of one or more simulcast | |||
streams. Each simulcast stream consists of one or more alternative | streams. Each simulcast stream consists of one or more alternative | |||
simulcast formats. Each simulcast format is identified by a simulcast | simulcast formats. Each simulcast format is identified by a simulcast | |||
stream identifier (rid-id). The rid-id MUST have the form of an RTP | stream identifier (rid-id). The rid-id <bcp14>MUST</bcp14> have the form | |||
stream identifier, as described by <xref | of an RTP | |||
target="I-D.ietf-mmusic-rid">RTP Payload Format | stream identifier, as described by <xref target="RFC8851" format="defaul | |||
Restrictions</xref>.</t> | t">"RTP Payload Format Restrictions"</xref>.</t> | |||
<t>In the list of simulcast streams, each simulcast stream is | <t>In the list of simulcast streams, each simulcast stream is | |||
separated by a semicolon (";"). Each simulcast stream can in turn be | separated by a semicolon (";"). Each simulcast stream can, in turn, be | |||
offered in one or more alternative formats, represented by rid-ids, | offered in one or more alternative formats, represented by rid-ids, | |||
separated by a comma (","). Each rid-id can also be specified as | separated by commas (","). Each rid-id can also be specified as | |||
initially <xref target="RFC7728">paused</xref>, indicated by | initially <xref target="RFC7728" format="default">paused</xref>, indicat | |||
ed by | ||||
prepending a "~" to the rid-id. The reason to allow separate initial | prepending a "~" to the rid-id. The reason to allow separate initial | |||
pause states for each rid-id is that pause capability can be specified | pause states for each rid-id is that pause capability can be specified | |||
individually for each RTP payload type referenced by an rid-id. Since | individually for each RTP payload type referenced by a rid-id. Since | |||
pause capability specified via the "a=rtcp-fb" attribute applies only | pause capability specified via the "a=rtcp-fb" attribute applies only | |||
to specified payload types and rid-id specified by "a=rid" can refer | to specified payload types, and a rid-id specified by "a=rid" can refer | |||
to multiple different payload types, it is unfeasible to pause streams | to multiple different payload types, it is unfeasible to pause streams | |||
with rid-id where any of the related RTP payload type(s) do not have | with rid-id where any of the related RTP payload type(s) do not have | |||
pause capability.</t> | pause capability.</t> | |||
</section> | </section> | |||
<section anchor="sec-cap" numbered="true" toc="default"> | ||||
<section anchor="sec-cap" title="Simulcast Capability"> | <name>Simulcast Capability</name> | |||
<t>Simulcast capability is expressed through a new media level <xref | <t>Simulcast capability is expressed through a new media-level <xref tar | |||
target="sec-attr">SDP attribute, "a=simulcast"</xref>. The use of this | get="sec-attr" format="default">SDP attribute, "a=simulcast"</xref>. The use of | |||
this | ||||
attribute at the session level is undefined. Implementations of this | attribute at the session level is undefined. Implementations of this | |||
specification MUST NOT use it at the session level and MUST ignore it | specification <bcp14>MUST NOT</bcp14> use it at the session level and <b cp14>MUST</bcp14> ignore it | |||
if received at the session level. Extensions to this specification may | if received at the session level. Extensions to this specification may | |||
define such session level usage. Each SDP media description MUST | define such session-level usage. Each SDP media description <bcp14>MUST< /bcp14> | |||
contain at most one "a=simulcast" line.</t> | contain at most one "a=simulcast" line.</t> | |||
<t>There are separate and independent sets of simulcast streams in the | ||||
<t>There are separate and independent sets of simulcast streams in | "send" and "receive" directions. When listing multiple directions, each | |||
send and receive directions. When listing multiple directions, each | direction <bcp14>MUST NOT</bcp14> occur more than once on the same line. | |||
direction MUST NOT occur more than once on the same line.</t> | </t> | |||
<t>Simulcast streams using undefined rid-ids <bcp14>MUST NOT</bcp14> be | ||||
<t>Simulcast streams using undefined rid-id MUST NOT be used as valid | used as valid | |||
simulcast streams by an RTP stream receiver. The direction for an | simulcast streams by an RTP stream receiver. The direction for a | |||
rid-id MUST be aligned with the direction specified for the | rid-id <bcp14>MUST</bcp14> be aligned with the direction specified for t | |||
he | ||||
corresponding RTP stream identifier on the "a=rid" line.</t> | corresponding RTP stream identifier on the "a=rid" line.</t> | |||
<t>The listed number of simulcast streams for a direction sets a limit | <t>The listed number of simulcast streams for a direction sets a limit | |||
to the number of supported simulcast streams in that direction. The | to the number of supported simulcast streams in that direction. The | |||
order of the listed simulcast streams in the "send" direction suggests | order of the listed simulcast streams in the "send" direction suggests | |||
a proposed order of preference, in decreasing order: the rid-id listed | a proposed order of preference, in decreasing order: the rid-id listed | |||
first is the most preferred and subsequent streams have progressively | first is the most preferred, and subsequent streams have progressively | |||
lower preference. The order of the listed rid-id in the "recv" | lower preference. The order of the listed rid-ids in the "recv" | |||
direction expresses which simulcast streams that are preferred, with | direction expresses which simulcast streams are preferred, with | |||
the leftmost being most preferred. This can be of importance if the | the leftmost being most preferred. This can be of importance if the | |||
number of actually sent simulcast streams have to be reduced for some | number of actually sent simulcast streams has to be reduced for some | |||
reason.</t> | reason.</t> | |||
<t>rid-id that have explicit <xref | <t>rid-ids that have explicit <xref target="RFC5583" | |||
target="RFC5583">dependencies</xref> <xref | format="default">dependencies</xref> <xref target="RFC8851" | |||
target="I-D.ietf-mmusic-rid"/> to other rid-id (even in the same media | format="default"/> to other rid-ids (even in the same media | |||
description) MAY be used.</t> | description) <bcp14>MAY</bcp14> be used.</t> | |||
<t>Use of more than a single, alternative simulcast format for a | <t>Use of more than a single, alternative simulcast format for a | |||
simulcast stream MAY be specified as part of the attribute parameters | simulcast stream <bcp14>MAY</bcp14> be specified as part of the | |||
by expressing the simulcast stream as a comma-separated list of | attribute parameters by expressing the simulcast stream as a | |||
alternative rid-id. The order of the rid-id alternatives within a | comma-separated list of alternative rid-ids. The order of the rid-id | |||
simulcast stream is significant; the rid-id alternatives are listed | alternatives within a simulcast stream is significant; the rid-id | |||
from (left) most preferred to (right) least preferred. For the use of | alternatives are listed from (left) most preferred to (right) least | |||
simulcast, this overrides the normal codec preference as expressed by | preferred. For the use of simulcast, this overrides the normal codec | |||
format type ordering on the "m=" line, using regular SDP rules. This | preference as expressed by format-type ordering on the "m=" line, | |||
is to enable a separation of general codec preferences and simulcast | using regular SDP rules. This is to enable a separation of general | |||
stream configuration preferences. However, the choice of which | codec preferences and simulcast-stream configuration | |||
alternative to use per simulcast stream is independent, and there is | preferences. However, the choice of which alternative to use per | |||
currently no mechanism to align the choice between alternative rid-ids | simulcast stream is independent, and there is currently no mechanism | |||
between different simulcast streams.</t> | for the offerer to force the answerer to choose the same alternative | |||
for multiple simulcast streams. | ||||
</t> | ||||
<t>A simulcast stream can use a codec defined such that the same RTP | <t>A simulcast stream can use a codec defined such that the same RTP | |||
SSRC can change RTP payload type multiple times during a session, | synchronization source (SSRC) can change RTP payload type multiple | |||
possibly even on a per-packet basis. A typical example can be a speech | times during a session, possibly even on a per-packet basis. A typical | |||
codec that makes use of <xref target="RFC3389">Comfort Noise</xref> | example is a speech codec that makes use of formats for <xref | |||
and/or <xref target="RFC4733">DTMF</xref> formats.</t> | target="RFC3389" format="default">Comfort Noise</xref> and/or <xref | |||
target="RFC4733" format="default">dual-tone multifrequency | ||||
(DTMF)</xref>.</t> | ||||
<t>If <xref target="RFC7728">RTP stream pause/resume</xref> is | <t>If <xref target="RFC7728" format="default">RTP stream | |||
supported, any rid-id MAY be prefixed by a "~" character to indicate | pause/resume</xref> is supported, any rid-id <bcp14>MAY</bcp14> be | |||
that the corresponding simulcast stream is initially paused already | prefixed by a "~" character to indicate that the corresponding | |||
from start of the RTP session. In this case, support for RTP stream | simulcast stream is paused already from the start of the RTP | |||
pause/resume MUST also be included under the same "m=" line where | session. In this case, support for RTP stream pause/resume | |||
<bcp14>MUST</bcp14> also be included under the same "m=" line where | ||||
"a=simulcast" is included. All RTP payload types related to such an | "a=simulcast" is included. All RTP payload types related to such an | |||
initially paused simulcast stream MUST be listed in the SDP as | initially paused simulcast stream <bcp14>MUST</bcp14> be listed in the | |||
pause/resume capable as specified by <xref target="RFC7728"/>, e.g. by | SDP as pause/resume capable as specified by <xref target="RFC7728" | |||
using the "*" wildcard format for "a=rtcp-fb".</t> | format="default"/> -- e.g., by using the "*" wildcard format for | |||
"a=rtcp-fb".</t> | ||||
<t>An initially paused simulcast stream in "send" direction for the | <t>An initially paused simulcast stream in the "send" direction for the | |||
endpoint sending the SDP MUST be considered equivalent to an | endpoint sending the SDP <bcp14>MUST</bcp14> be considered equivalent to | |||
unsolicited locally paused stream, and be handled accordingly. | an | |||
unsolicited locally paused stream and handled accordingly. | ||||
Initially paused simulcast streams are resumed as described by the RTP | Initially paused simulcast streams are resumed as described by the RTP | |||
pause/resume specification. An RTP stream receiver that wishes to | pause/resume specification. An RTP stream receiver that wishes to | |||
resume an unsolicited locally paused stream needs to know the SSRC of | resume an unsolicited locally paused stream needs to know the SSRC of | |||
that stream. The SSRC of an initially paused simulcast stream can be | that stream. | |||
obtained from an RTP stream sender RTCP Sender Report (SR) including | ||||
both the desired SSRC as "SSRC of sender", and the rid-id value in an | ||||
<xref target="I-D.ietf-avtext-rid">RtpStreamId RTCP SDES | ||||
item</xref>.</t> | ||||
<t>If the endpoint sending the SDP includes an "recv" direction | The SSRC of an initially paused simulcast stream can be obtained from | |||
an RTP stream sender RTCP Sender Report (SR) or Receiver Report (RR) | ||||
that includes both the desired SSRC as initial SSRC in the source | ||||
description (SDES) chunk, optionally a <xref target="RFC8843" | ||||
format="default">MID SDES item</xref> (if used and if rid-ids are not | ||||
unique across "m=" lines), and the rid-id value in an <xref | ||||
target="RFC8852" format="default">RtpStreamId RTCP SDES | ||||
item</xref>.</t> | ||||
<t>If the endpoint sending the SDP includes a "recv"-direction | ||||
simulcast stream that is initially paused, then the remote RTP sender | simulcast stream that is initially paused, then the remote RTP sender | |||
receiving the SDP SHOULD put its RTP stream in a unsolicited locally | receiving the SDP <bcp14>SHOULD</bcp14> put its RTP stream in an unsolic ited locally | |||
paused state. The simulcast stream sender does not put the stream in | paused state. The simulcast stream sender does not put the stream in | |||
the locally paused state if there are other RTP stream receivers in | the locally paused state if there are other RTP stream receivers in | |||
the session that do not mark the simulcast stream as initially paused. | the session that do not mark the simulcast stream as initially paused. | |||
However, in centralized conferencing the RTP sender usually does not | However, in centralized conferencing, the RTP sender usually does not | |||
see the SDP signalling from RTP receivers and cannot make this | see the SDP signaling from RTP receivers and cannot make this | |||
determination. The reason to require an initially paused "recv" stream | determination. The reason for requiring that an initially paused "recv" | |||
to be considered locally paused by the remote RTP sender, instead of | stream | |||
making it equivalent to implicitly sending a pause request, is because | be considered locally paused by the remote RTP sender instead of | |||
making it equivalent to implicitly sending a pause request is that | ||||
the pausing RTP sender cannot know which receiving SSRC owns the | the pausing RTP sender cannot know which receiving SSRC owns the | |||
restriction when Temporary Maximum Media Stream Bit Rate Request | restriction when Temporary Maximum Media Stream Bit Rate Request | |||
(TMMBR) and Temporary Maximum Media Stream Bit Rate Notification | (TMMBR) and Temporary Maximum Media Stream Bit Rate Notification | |||
(TMMBN) are used for pause/resume signaling (<xref | (TMMBN) are used for pause/resume signaling (<xref target="RFC7728" | |||
target="RFC7728">Section 5.6 of </xref>) since the RTP receiver's SSRC | sectionFormat="of" section="5.6" />); this is because the RTP | |||
in send direction is sometimes not yet known.</t> | receiver's SSRC | |||
in the "send" direction is sometimes not yet known.</t> | ||||
<t>Use of the <xref target="RFC2198">redundant audio data</xref> | <t>Use of the redundant audio data format <xref target="RFC2198" format= | |||
format could be seen as a form of simulcast for loss protection | "default"/> | |||
purposes, but is not considered conflicting with the mechanisms | could be seen as a form of simulcast for loss-protection | |||
described in this memo and MAY therefore be used as any other format. | purposes, but it is not considered conflicting with the mechanisms | |||
In this case the "red" format, rather than the carried formats, SHOULD | described in this memo and <bcp14>MAY</bcp14> therefore be used as any o | |||
ther format. | ||||
In this case, the "red" format, rather than the carried formats, <bcp14> | ||||
SHOULD</bcp14> | ||||
be the one to list as a simulcast stream on the "a=simulcast" | be the one to list as a simulcast stream on the "a=simulcast" | |||
line.</t> | line.</t> | |||
<t>The media formats and corresponding characteristics of simulcast | <t>The media formats and corresponding characteristics of simulcast | |||
streams SHOULD be chosen such that they are different, e.g. as | streams <bcp14>SHOULD</bcp14> be chosen such that they are different -- e.g., as | |||
different SDP formats with differing "a=rtpmap" and/or "a=fmtp" lines, | different SDP formats with differing "a=rtpmap" and/or "a=fmtp" lines, | |||
or as differently defined RTP payload format restrictions. If this | or as differently defined RTP payload format restrictions. If this | |||
difference is not required, it is RECOMMENDED to use <xref | difference is not required, it is <bcp14>RECOMMENDED</bcp14> to use RTP | |||
target="RFC7104">RTP duplication</xref> procedures instead of | duplication | |||
simulcast. To avoid complications in implementations, a single rid-id | procedures <xref target="RFC7104" format="default"/> instead of simulcast | |||
MUST NOT occur more than once per "a=simulcast" line. Note that this | . To avoid | |||
complications in implementations, a single rid-id | ||||
<bcp14>MUST NOT</bcp14> occur more than once per "a=simulcast" line. Not | ||||
e that this | ||||
does not eliminate use of simulcast as an RTP duplication mechanism, | does not eliminate use of simulcast as an RTP duplication mechanism, | |||
since it is possible to define multiple different rid-id that are | since it is possible to define multiple different rid-ids that are | |||
effectively equivalent.</t> | effectively equivalent.</t> | |||
</section> | </section> | |||
<section anchor="sec-offer-answer" numbered="true" toc="default"> | ||||
<section anchor="sec-offer-answer" title="Offer/Answer Use"> | <name>Offer/Answer Use</name> | |||
<t><list style="empty"> | <dl> | |||
<t>Note: The inclusion of "a=simulcast" or the use of simulcast | <dt>Note:</dt> <dd>The inclusion of "a=simulcast" or the use of simulcast | |||
does not change any of the interpretation or Offer/Answer | does not change any of the interpretation or Offer/Answer | |||
procedures for other SDP attributes, like "a=fmtp" or "a=rid".</t> | procedures for other SDP attributes, such as "a=fmtp" or "a=rid".</d | |||
</list></t> | d> | |||
</dl> | ||||
<section title="Generating the Initial SDP Offer"> | <section numbered="true" toc="default"> | |||
<t>An offerer wanting to use simulcast for a media description SHALL | <name>Generating the Initial SDP Offer</name> | |||
<t>An offerer wanting to use simulcast for a media description <bcp14> | ||||
SHALL</bcp14> | ||||
include one "a=simulcast" attribute in that media description in the | include one "a=simulcast" attribute in that media description in the | |||
offer. An offerer listing a set of receive simulcast streams and/or | offer. An offerer listing a set of receive simulcast streams and/or | |||
alternative formats as rid-id in the offer MUST be prepared to | alternative formats as rid-ids in the offer <bcp14>MUST</bcp14> be pre pared to | |||
receive RTP streams for any of those simulcast streams and/or | receive RTP streams for any of those simulcast streams and/or | |||
alternative formats from the answerer.</t> | alternative formats from the answerer.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Creating the SDP Answer"> | <name>Creating the SDP Answer</name> | |||
<t>An answerer that does not understand the concept of simulcast | <t>An answerer that does not understand the concept of simulcast | |||
will also not know the attribute and will remove it in the SDP | will also not know the attribute and will remove it in the SDP | |||
answer, as defined in existing <xref target="RFC3264">SDP | answer, as defined in existing SDP offer/answer procedures <xref targe | |||
Offer/Answer</xref> procedures. Since SDP session level simulcast is | t="RFC3264" format="default"/>. Since SDP session-level simulcast is | |||
undefined in this memo, an answerer that receives an offer with the | undefined in this memo, an answerer that receives an offer with the | |||
"a=simulcast" attribute on SDP session level SHALL remove it in the | "a=simulcast" attribute on the SDP session level <bcp14>SHALL</bcp14> remove it in the | |||
answer. An answerer that understands the attribute but receives | answer. An answerer that understands the attribute but receives | |||
multiple "a=simulcast" attributes in the same media description | multiple "a=simulcast" attributes in the same media description | |||
SHALL disable use of simulcast by removing all "a=simulcast" lines | <bcp14>SHALL</bcp14> disable use of simulcast by removing all "a=simul cast" lines | |||
for that media description in the answer.</t> | for that media description in the answer.</t> | |||
<t>An answerer that does understand the attribute and wants to | ||||
<t>An answerer that does understand the attribute and that wants to | support simulcast in an indicated direction <bcp14>SHALL</bcp14> rever | |||
support simulcast in an indicated direction SHALL reverse | se | |||
directionality of the unidirectional direction parameters; "send" | directionality of the unidirectional direction parameters -- "send" | |||
becomes "recv" and vice versa, and include it in the answer.</t> | becomes "recv" and vice versa -- and include it in the answer.</t> | |||
<t>An answerer that receives an offer with simulcast containing an | <t>An answerer that receives an offer with simulcast containing an | |||
"a=simulcast" attribute listing alternative rid-id MAY keep all the | "a=simulcast" attribute listing alternative rid-ids <bcp14>MAY</bcp14> | |||
alternative rid-id in the answer, but it MAY also choose to remove | keep all the | |||
any non-desirable alternative rid-id in the answer. The answerer | alternative rid-ids in the answer, but it <bcp14>MAY</bcp14> also choo | |||
MUST NOT add any alternative rid-id in send direction in the answer | se to remove | |||
any nondesirable alternative rid-ids in the answer. The answerer | ||||
<bcp14>MUST NOT</bcp14> add any alternative rid-ids in the "send" dire | ||||
ction in the answer | ||||
that were not present in the offer receive direction. The answerer | that were not present in the offer receive direction. The answerer | |||
MUST be prepared to receive any of the receive direction rid-id | <bcp14>MUST</bcp14> be prepared to receive any of the receive-directio | |||
alternatives and MAY send any of the send direction alternatives | n rid-id | |||
alternatives and <bcp14>MAY</bcp14> send any of the "send"-direction a | ||||
lternatives | ||||
that are part of the answer.</t> | that are part of the answer.</t> | |||
<t>An answerer that receives an offer with simulcast that lists a | <t>An answerer that receives an offer with simulcast that lists a | |||
number of simulcast streams, MAY reduce the number of simulcast | number of simulcast streams <bcp14>MAY</bcp14> reduce the number of si | |||
streams in the answer, but MUST NOT add simulcast streams.</t> | mulcast | |||
streams in the answer, but it <bcp14>MUST NOT</bcp14> add simulcast st | ||||
reams.</t> | ||||
<t>An answerer that receives an offer without RTP stream | <t>An answerer that receives an offer without RTP stream | |||
pause/resume capability MUST NOT mark any simulcast streams as | pause/resume capability <bcp14>MUST NOT</bcp14> mark any simulcast str eams as | |||
initially paused in the answer.</t> | initially paused in the answer.</t> | |||
<t>An RTP stream answerer capable of pause/resume that receives an | ||||
<t>An RTP stream pause/resume capable answerer that receives an | offer with RTP stream pause/resume capability <bcp14>MAY</bcp14> mark | |||
offer with RTP stream pause/resume capability MAY mark any rid-id | any rid-ids | |||
that refer to pause/resume capable formats as initially paused in | that refer to pause/resume capable formats as initially paused in | |||
the answer.</t> | the answer.</t> | |||
<t>An answerer that receives indication in an offer of a rid-id | ||||
<t>An answerer that receives indication in an offer of an rid-id | being initially paused <bcp14>SHOULD</bcp14> mark that rid-id as initi | |||
being initially paused SHOULD mark that rid-id as initially paused | ally paused | |||
also in the answer, regardless of direction, unless it has good | also in the answer, regardless of direction, unless it has good | |||
reason for the rid-id not being initially paused. One reason to | reason for the rid-id not being initially paused. One reason to | |||
remove an initial pause in the answer compared to the offer could, | remove an initial pause in the answer compared to the offer could be, | |||
for example, be that all receive direction simulcast streams for a | for example, that all "receive"-direction simulcast streams for a | |||
media source the answerer accepts in the answer would otherwise be | media source the answerer accepts in the answer would otherwise be | |||
paused.</t> | paused.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Offerer Processing the SDP Answer"> | <name>Offerer Processing the SDP Answer</name> | |||
<t>An offerer that receives an answer without "a=simulcast" MUST NOT | <t>An offerer that receives an answer without "a=simulcast" <bcp14>MUS | |||
T NOT</bcp14> | ||||
use simulcast towards the answerer. An offerer that receives an | use simulcast towards the answerer. An offerer that receives an | |||
answer with "a=simulcast" without any rid-id in a specified | answer with "a=simulcast" without any rid-id in a specified | |||
direction MUST NOT use simulcast in that direction.</t> | direction <bcp14>MUST NOT</bcp14> use simulcast in that direction.</t> | |||
<t>An offerer that receives an answer where some rid-id alternatives | <t>An offerer that receives an answer where some rid-id alternatives | |||
are kept MUST be prepared to receive any of the kept send direction | are kept <bcp14>MUST</bcp14> be prepared to receive any of the kept "s | |||
rid-id alternatives, and MAY send any of the kept receive direction | end"-direction | |||
rid-id alternatives and <bcp14>MAY</bcp14> send any of the kept "recei | ||||
ve"-direction | ||||
rid-id alternatives.</t> | rid-id alternatives.</t> | |||
<t>An offerer that receives an answer where some of the rid-ids are | ||||
<t>An offerer that receives an answer where some of the rid-id are | removed compared to the offer <bcp14>MAY</bcp14> release the correspon | |||
removed compared to the offer MAY release the corresponding | ding | |||
resources (codec, transport, etc) in its receive direction and MUST | resources (codec, transport, etc) in its "receive" direction and <bcp1 | |||
NOT send any RTP packets corresponding to the removed rid-id.</t> | 4>MUST | |||
NOT</bcp14> send any RTP packets corresponding to the removed rid-ids. | ||||
<t>An offerer that offered some of its rid-id as initially paused | </t> | |||
and that receives an answer that does not indicate RTP stream | <t>An offerer that offered some of its rid-ids as initially paused | |||
pause/resume capability, MUST NOT initially pause any simulcast | and receives an answer that does not indicate RTP stream | |||
pause/resume capability <bcp14>MUST NOT</bcp14> initially pause any si | ||||
mulcast | ||||
streams.</t> | streams.</t> | |||
<t>An offerer with RTP stream pause/resume capability that receives | <t>An offerer with RTP stream pause/resume capability that receives | |||
an answer where some rid-id are marked as initially paused, SHOULD | an answer where some rid-ids are marked as initially paused <bcp14>SHO | |||
initially pause those RTP streams regardless if they were marked as | ULD</bcp14> | |||
initially pause those RTP streams, even if they were marked as | ||||
initially paused also in the offer, unless it has good reason for | initially paused also in the offer, unless it has good reason for | |||
those RTP streams not being initially paused. One such reason could, | those RTP streams not being initially paused. One such reason could be | |||
for example, be that the answerer would otherwise initially not | , | |||
for example, that the answerer would otherwise initially not | ||||
receive any media of that type at all.</t> | receive any media of that type at all.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Modifying the Session"> | <name>Modifying the Session</name> | |||
<t>Offers inside an existing session follow the same rules as for | <t>Offers inside an existing session follow the same rules as for | |||
initial SDP offer, with these additions:<list style="numbers"> | initial SDP offer, with these additions:</t> | |||
<t>rid-id marked as initially paused in the offerer's send | <ol spacing="normal" type="1"> | |||
direction SHALL reflect the offerer's opinion of the current | <li>rid-ids marked as initially paused in the offerer's "send" | |||
direction <bcp14>SHALL</bcp14> reflect the offerer's opinion of th | ||||
e current | ||||
pause state at the time of creating the offer. This is purely | pause state at the time of creating the offer. This is purely | |||
informational, and <xref target="RFC7728">RTP stream | informational, and RTP stream | |||
pause/resume</xref> signaling in the ongoing session SHALL take | pause/resume signaling <xref target="RFC7728" format="default"/> i | |||
precedence in case of any conflict or ambiguity.</t> | n the ongoing | |||
session <bcp14>SHALL</bcp14> take precedence in case of any conflic | ||||
<t>rid-id marked as initially paused in the offerer's receive | t or | |||
direction SHALL (as in an initial offer) reflect the offerer's | ambiguity.</li> | |||
<li>rid-ids marked as initially paused in the offerer's "receive" | ||||
direction <bcp14>SHALL</bcp14> (as in an initial offer) reflect th | ||||
e offerer's | ||||
desired rid-id pause state. Except for the case where the | desired rid-id pause state. Except for the case where the | |||
offerer already paused the corresponding RTP stream through | offerer already paused the corresponding RTP stream through | |||
<xref target="RFC7728">RTP stream pause/resume</xref> signaling | <xref target="RFC7728" format="default">RTP stream pause/resume</x | |||
, this is identical to the conditions at an initial offer.</t> | ref> signaling, | |||
</list></t> | this is identical to the conditions at an initial offer.</li> | |||
</ol> | ||||
<t>Creation of SDP answers and processing of SDP answers inside an | <t>Creation of SDP answers and processing of SDP answers inside an | |||
existing session follow the same rules as described above for | existing session follow the same rules as described above for | |||
initial SDP offer/answer.</t> | initial SDP offer/answer.</t> | |||
<t>Session modification restrictions in <xref | ||||
<t>Session modification restrictions in section 6.5 of <xref | target="RFC8851" sectionFormat="of" section="6.5">"RTP Payload Format | |||
target="I-D.ietf-mmusic-rid">RTP payload format restrictions</xref> | Restrictions"</xref> | |||
also apply.</t> | also apply.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Use with Declarative SDP"> | <name>Use with Declarative SDP</name> | |||
<t>This document does not define the use of "a=simulcast" in | <t>This document does not define the use of "a=simulcast" in | |||
declarative SDP, partly motivated by use of the <xref | declarative SDP, partly because use of the <xref target="RFC8851" format | |||
target="I-D.ietf-mmusic-rid">simulcast format identification</xref> | ="default">simulcast format identification</xref> | |||
not being defined for use in declarative SDP. If concrete use cases | is not defined for use in declarative SDP. If concrete use cases | |||
for simulcast in declarative SDP are identified in the future, the | for simulcast in declarative SDP are identified in the future, the | |||
authors of this memo expect that additional specifications will | authors of this memo expect that additional specifications will | |||
address such use.</t> | address such use.</t> | |||
</section> | </section> | |||
<section anchor="sec-relating" numbered="true" toc="default"> | ||||
<section anchor="sec-relating" title="Relating Simulcast Streams"> | <name>Relating Simulcast Streams</name> | |||
<t>Simulcast RTP streams MUST be related on RTP level through <xref | <t>Simulcast RTP streams <bcp14>MUST</bcp14> be related on the RTP | |||
target="I-D.ietf-avtext-rid">RtpStreamId</xref>, as specified in the | level through <xref target="RFC8852" | |||
SDP <xref target="sec-cap">"a=simulcast" attribute </xref> parameters. | format="default">RtpStreamId</xref>, as specified in the | |||
SDP <xref target="sec-cap" format="default">"a=simulcast" attribute | ||||
</xref> parameters. | ||||
This is sufficient as long as there is only a single media source per | This is sufficient as long as there is only a single media source per | |||
SDP media description. When using <xref | SDP media description. When using <xref target="RFC8843" format="default | |||
target="I-D.ietf-mmusic-sdp-bundle-negotiation">BUNDLE</xref>, where | ">BUNDLE</xref>, where | |||
multiple SDP media descriptions jointly specify a single RTP session, | multiple SDP media descriptions jointly specify a single RTP session, | |||
the SDES MID identification mechanism in BUNDLE allows relating RTP | the SDES MID (Media Identification) mechanism in BUNDLE allows relating | |||
streams back to individual media descriptions, after which the above | RTP | |||
described RtpStreamId relations can be used. Use of the <xref | streams back to individual media descriptions, after which the | |||
target="RFC8285">RTP header extension</xref> for both MID and | RtpStreamId relations described above can be used. | |||
RtpStreamId identifications can be important to ensure rapid initial | ||||
reception, required to correctly interpret and process the RTP | ||||
streams. Implementers of this specification MUST support the RTCP | ||||
source description (SDES) item method and SHOULD support RTP header | ||||
extension method to signal RtpStreamId on RTP level.<list | ||||
style="hanging"> | ||||
<t hangText="NOTE:">For the case where it is clear from SDP that | ||||
RTP PT uniquely maps to corresponding RtpStreamId, an RTP receiver | ||||
can use RTP PT to relate simulcast streams. This can sometimes | ||||
enable decoding even in advance to receiving RtpStreamId | ||||
information in RTCP SDES and/or RTP header extensions.</t> | ||||
</list></t> | ||||
<t>RTP streams MUST only use a single alternative rid-id at a time | Use of the RTP header extension for the <xref target="RFC7941">RTCP | |||
(based on RTP timestamps), but MAY change format (and rid-id) on a | source description items</xref> for both MID | |||
per-RTP packet basis. This corresponds to the existing (non-simulcast) | and RtpStreamId identifications can be important to ensure rapid | |||
initial reception, required to correctly interpret and process the RTP | ||||
streams. Implementers of this specification <bcp14>MUST</bcp14> | ||||
support the RTCP source description (SDES) item method and | ||||
<bcp14>SHOULD</bcp14> support RTP header extension method to signal | ||||
RtpStreamId on the RTP level.</t> | ||||
<dl newline="false" spacing="normal"> | ||||
<dt>NOTE:</dt> | ||||
<dd>For the case where it is clear from SDP that the | ||||
RTP PT uniquely maps to a corresponding RtpStreamId, an RTP receiver | ||||
can use RTP PT to relate simulcast streams. This can sometimes | ||||
enable decoding even in advance of receiving RtpStreamId | ||||
information in RTCP SDES and/or RTP header extensions.</dd> | ||||
</dl> | ||||
<t>RTP streams <bcp14>MUST</bcp14> only use a single alternative rid-id | ||||
at a time | ||||
(based on RTP timestamps) but <bcp14>MAY</bcp14> change format (and rid- | ||||
id) on a | ||||
per-RTP packet basis. This corresponds to the existing (nonsimulcast) | ||||
SDP offer/answer case when multiple formats are included on the "m=" | SDP offer/answer case when multiple formats are included on the "m=" | |||
line in the SDP answer, enabling per-RTP packet change of RTP payload | line in the SDP answer, enabling per-RTP packet change of RTP payload | |||
type.</t> | type.</t> | |||
</section> | </section> | |||
<section anchor="sec-ex" numbered="true" toc="default"> | ||||
<section anchor="sec-ex" title="Signaling Examples"> | <name>Signaling Examples</name> | |||
<t>These examples describe a client to video conference service, using | <t>These examples describe a client-to-video-conference service, using | |||
a centralized media topology with an RTP mixer.</t> | a centralized media topology with an RTP mixer.</t> | |||
<!-- DO NOT EDIT --> | ||||
<figure align="center" anchor="fig-mixer-four-party" | <figure anchor="fig-mixer-four-party"> | |||
title="Four-party Mixer-based Conference"> | <name>Four-Party Mixer-Based Conference</name> | |||
<artwork align="center"><![CDATA[ | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
+---+ +-----------+ +---+ | +---+ +-----------+ +---+ | |||
| A |<---->| |<---->| B | | | A |<---->| |<---->| B | | |||
+---+ | | +---+ | +---+ | | +---+ | |||
| Mixer | | | Mixer | | |||
+---+ | | +---+ | +---+ | | +---+ | |||
| F |<---->| |<---->| J | | | F |<---->| |<---->| J | | |||
+---+ +-----------+ +---+]]></artwork> | +---+ +-----------+ +---+]]></artwork> | |||
</figure> | </figure> | |||
<!-- End DNE --> | ||||
<section anchor="sec-ex-single-source" title="Single-Source Client"> | <section anchor="sec-ex-single-source" numbered="true" toc="default"> | |||
<name>Single-Source Client</name> | ||||
<t>Alice is calling in to the mixer with a simulcast-enabled client | <t>Alice is calling in to the mixer with a simulcast-enabled client | |||
capable of a single media source per media type. The client can send | capable of a single media source per media type. The client can send | |||
a simulcast of 2 video resolutions and frame rates: HD 1280x720p | a simulcast of 2 video resolutions and frame rates: HD 1280x720p | |||
30fps and thumbnail 320x180p 15fps. This is defined below using the | 30fps and thumbnail 320x180p 15fps. This is defined below using the | |||
<xref target="RFC6236">"imageattr"</xref>. In this example, only the | <xref target="RFC6236" format="default">"imageattr"</xref>. In this ex | |||
"pt" "a=rid" parameter is used, effectively achieving a 1:1 mapping | ample, only the | |||
between RtpStreamId and media formats (RTP payload types), to | "pt" "a=rid" parameter is used to | |||
describe simulcast stream formats. Alice's Offer:</t> | describe simulcast stream formats, effectively achieving a 1:1 mapping | |||
between RtpStreamId and media formats (RTP payload types). Alice's Off | ||||
er:</t> | ||||
<figure align="center" anchor="fig-up-offer" | <figure anchor="fig-up-offer"> | |||
title="Single-Source Simulcast Offer"> | <name>Single-Source Simulcast Offer</name> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="sdp"> | |||
v=0 | v=0 | |||
o=alice 2362969037 2362969040 IN IP4 192.0.2.156 | o=alice 2362969037 2362969040 IN IP4 192.0.2.156 | |||
s=Simulcast Enabled Client | s=Simulcast-Enabled Client | |||
c=IN IP4 192.0.2.156 | c=IN IP4 192.0.2.156 | |||
t=0 0 | t=0 0 | |||
m=audio 49200 RTP/AVP 0 | m=audio 49200 RTP/AVP 0 | |||
a=rtpmap:0 PCMU/8000 | a=rtpmap:0 PCMU/8000 | |||
m=video 49300 RTP/AVP 97 98 | m=video 49300 RTP/AVP 97 98 | |||
a=rtpmap:97 H264/90000 | a=rtpmap:97 H264/90000 | |||
a=rtpmap:98 H264/90000 | a=rtpmap:98 H264/90000 | |||
a=fmtp:97 profile-level-id=42c01f;max-fs=3600;max-mbps=108000 | a=fmtp:97 profile-level-id=42c01f;max-fs=3600;max-mbps=108000 | |||
a=fmtp:98 profile-level-id=42c00b;max-fs=240;max-mbps=3600 | a=fmtp:98 profile-level-id=42c00b;max-fs=240;max-mbps=3600 | |||
a=imageattr:97 send [x=1280,y=720] recv [x=1280,y=720] | a=imageattr:97 send [x=1280,y=720] recv [x=1280,y=720] | |||
a=imageattr:98 send [x=320,y=180] recv [x=320,y=180] | a=imageattr:98 send [x=320,y=180] recv [x=320,y=180] | |||
a=rid:1 send pt=97 | a=rid:1 send pt=97 | |||
a=rid:2 send pt=98 | a=rid:2 send pt=98 | |||
a=rid:3 recv pt=97 | a=rid:3 recv pt=97 | |||
a=simulcast:send 1;2 recv 3 | a=simulcast:send 1;2 recv 3 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | |||
]]></artwork> | </sourcecode> | |||
</figure> | </figure> | |||
<!-- End DNE --> | ||||
<t>The only thing in the SDP that indicates simulcast capability is | <t>The only thing in the SDP that indicates simulcast capability is | |||
the line in the video media description containing the "simulcast" | the line in the video media description containing the "simulcast" | |||
attribute. The included "a=fmtp" and "a=imageattr" parameters | attribute. The included "a=fmtp" and "a=imageattr" parameters | |||
indicates that sent simulcast streams can differ in video | indicate that sent simulcast streams can differ in video | |||
resolution. The RTP header extension for RtpStreamId is offered to | resolution. The RTP header extension for RtpStreamId is offered to | |||
avoid issues with the initial binding between RTP streams (SSRCs) | avoid issues with the initial binding between RTP streams (SSRCs) | |||
and the RtpStreamId identifying the simulcast stream and its | and the RtpStreamId identifying the simulcast stream and its | |||
format.</t> | format.</t> | |||
<t>The answer from the server indicates that it, too, is simulcast | ||||
<t>The Answer from the server indicates that it too is simulcast | ||||
capable. Should it not have been simulcast capable, the | capable. Should it not have been simulcast capable, the | |||
"a=simulcast" line would not have been present and communication | "a=simulcast" line would not have been present, and communication | |||
would have started with the media negotiated in the SDP. Also the | would have started with the media negotiated in the SDP. Also, the | |||
usage of the RtpStreamId RTP header extension is accepted.</t> | usage of the RtpStreamId RTP header extension is accepted.</t> | |||
<!-- DO NOT EDIT --> | ||||
<figure align="center" anchor="fig-up-answer" | <figure anchor="fig-up-answer"> | |||
title="Single-Source Simulcast Answer"> | <name>Single-Source Simulcast Answer</name> | |||
<artwork align="left"><![CDATA[ | <sourcecode type="sdp"> | |||
v=0 | v=0 | |||
o=server 823479283 1209384938 IN IP4 192.0.2.2 | o=server 823479283 1209384938 IN IP4 192.0.2.2 | |||
s=Answer to Simulcast Enabled Client | s=Answer to Simulcast-Enabled Client | |||
c=IN IP4 192.0.2.43 | c=IN IP4 192.0.2.43 | |||
t=0 0 | t=0 0 | |||
m=audio 49672 RTP/AVP 0 | m=audio 49672 RTP/AVP 0 | |||
a=rtpmap:0 PCMU/8000 | a=rtpmap:0 PCMU/8000 | |||
m=video 49674 RTP/AVP 97 98 | m=video 49674 RTP/AVP 97 98 | |||
a=rtpmap:97 H264/90000 | a=rtpmap:97 H264/90000 | |||
a=rtpmap:98 H264/90000 | a=rtpmap:98 H264/90000 | |||
a=fmtp:97 profile-level-id=42c01f;max-fs=3600;max-mbps=108000 | a=fmtp:97 profile-level-id=42c01f;max-fs=3600;max-mbps=108000 | |||
a=fmtp:98 profile-level-id=42c00b;max-fs=240;max-mbps=3600 | a=fmtp:98 profile-level-id=42c00b;max-fs=240;max-mbps=3600 | |||
a=imageattr:97 send [x=1280,y=720] recv [x=1280,y=720] | a=imageattr:97 send [x=1280,y=720] recv [x=1280,y=720] | |||
a=imageattr:98 send [x=320,y=180] recv [x=320,y=180] | a=imageattr:98 send [x=320,y=180] recv [x=320,y=180] | |||
a=rid:1 recv pt=97 | a=rid:1 recv pt=97 | |||
a=rid:2 recv pt=98 | a=rid:2 recv pt=98 | |||
a=rid:3 send pt=97 | a=rid:3 send pt=97 | |||
a=simulcast:recv 1;2 send 3 | a=simulcast:recv 1;2 send 3 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | |||
]]></artwork> | </sourcecode></figure> | |||
</figure> | <!-- End DNE --> | |||
<t>Since the server is the simulcast media receiver, it reverses the | <t>Since the server is the simulcast media receiver, it reverses the | |||
direction of the "simulcast" and "rid" attribute parameters.</t> | direction of the "simulcast" and "rid" attribute parameters.</t> | |||
</section> | </section> | |||
<section anchor="sec-ex-multi-source" numbered="true" toc="default"> | ||||
<section anchor="sec-ex-multi-source" title="Multi-Source Client"> | <name>Multisource Client</name> | |||
<t>Fred is calling in to the same conference as in the example above | <t>Fred is calling in to the same conference as in the example above | |||
with a two-camera, two-display system, thus capable of handling two | with a two-camera, two-display system, thus capable of handling two | |||
separate media sources in each direction, where each media source is | separate media sources in each direction, where each media source is | |||
simulcast-enabled in the send direction. Fred's client is restricted | simulcast enabled in the "send" direction. Fred's client is restricted | |||
to a single media source per media description.</t> | to a single media source per media description.</t> | |||
<t>The first two simulcast streams for the first media source use | <t>The first two simulcast streams for the first media source use | |||
different codecs, <xref target="RFC6190">H264-SVC</xref> and <xref | different codecs, <xref target="RFC6190" format="default">H264-SVC</xr | |||
target="RFC6184">H264</xref>. These two simulcast streams also have | ef> and <xref target="RFC6184" format="default">H264</xref>. These two simulcast | |||
a temporal dependency. Two different video codecs, <xref | streams also have | |||
target="RFC7741">VP8</xref> and H264, are offered as alternatives | a temporal dependency. Two different video codecs, <xref target="RFC77 | |||
41" format="default">VP8</xref> and H264, are offered as alternatives | ||||
for the third simulcast stream for the first media source. Only the | for the third simulcast stream for the first media source. Only the | |||
highest fidelity simulcast stream is sent from start, the lower | highest-fidelity simulcast stream is sent from start, the | |||
fidelity streams being initially paused.</t> | lower-fidelity streams being initially paused.</t> | |||
<t>The second media source is offered with three different simulcast | <t>The second media source is offered with three different simulcast | |||
streams. All video streams of this second media source are loss | streams. All video streams of this second media source are loss | |||
protected by <xref target="RFC4588">RTP retransmission</xref>. Also | protected by <xref target="RFC4588" format="default">RTP retransmissio | |||
here, all but the highest fidelity simulcast stream are initially | n</xref>. In | |||
paused. Note that the lower resolution is more prioritized than the | addition, all but the highest-fidelity simulcast stream are | |||
medium resolution simulcast stream.</t> | initially paused. Note that the lower resolution is more prioritized | |||
than the medium-resolution simulcast stream.</t> | ||||
<t>Fred's client is also using BUNDLE to send all RTP streams from | <t>Fred's client is also using BUNDLE to send all RTP streams from | |||
all media descriptions in the same RTP session on a single media | all media descriptions in the same RTP session on a single media | |||
transport. Although using many different simulcast streams in this | transport. Although using many different simulcast streams in this | |||
example, the use of RtpStreamId as simulcast stream identification | example, the use of RtpStreamId as simulcast stream identification | |||
enables use of a low number of RTP payload types. Note that the use | enables use of a low number of RTP payload types. | |||
of both <xref | ||||
target="I-D.ietf-mmusic-sdp-bundle-negotiation">BUNDLE</xref> and | ||||
<xref target="I-D.ietf-mmusic-rid">"a=rid"</xref> recommends using | ||||
the <xref target="RFC8285">RTP header extension</xref> for carrying | ||||
these RTP stream identification fields, which is consequently also | ||||
included in the SDP. Note also that for "a=rid", the corresponding | ||||
RtpStreamId SDES attribute RTP header extension is named <xref | ||||
target="I-D.ietf-avtext-rid">rtp-stream-id</xref>.</t> | ||||
<figure anchor="fig-ms-offer" | Note that when using both <xref target="RFC8843" | |||
title="Fred's Multi-Source Simulcast Offer"> | format="default">BUNDLE</xref> and <xref target="RFC8851" | |||
<artwork><![CDATA[ | format="default">"a=rid"</xref>, it is recommended to use the RTP | |||
header extension for the <xref target="RFC7941" format="default">RTCP | ||||
source descriptions items</xref> for carrying | ||||
these RTP stream-identification fields, which is consequently also | ||||
included in the SDP. | ||||
Note also that for "a=rid", | ||||
the corresponding RtpStreamId SDES attribute RTP header extension is | ||||
named <xref target="RFC8852" | ||||
format="default">rtp-stream-id</xref>.</t> | ||||
<!-- DO NOT EDIT --> | ||||
<figure anchor="fig-ms-offer"> | ||||
<name>Fred's Multisource Simulcast Offer</name> | ||||
<sourcecode type="sdp"> | ||||
v=0 | v=0 | |||
o=fred 238947129 823479223 IN IP6 2001:db8::c000:27d | o=fred 238947129 823479223 IN IP6 2001:db8::c000:27d | |||
s=Offer from Simulcast Enabled Multi-Source Client | s=Offer from Simulcast-Enabled Multi-Source Client | |||
c=IN IP6 2001:db8::c000:27d | c=IN IP6 2001:db8::c000:27d | |||
t=0 0 | t=0 0 | |||
a=group:BUNDLE foo bar zen | a=group:BUNDLE foo bar zen | |||
m=audio 49200 RTP/AVP 99 | m=audio 49200 RTP/AVP 99 | |||
a=mid:foo | a=mid:foo | |||
a=rtpmap:99 G722/8000 | a=rtpmap:99 G722/8000 | |||
m=video 49600 RTP/AVPF 100 101 103 | m=video 49600 RTP/AVPF 100 101 103 | |||
a=mid:bar | a=mid:bar | |||
a=rtpmap:100 H264-SVC/90000 | a=rtpmap:100 H264-SVC/90000 | |||
a=rtpmap:101 H264/90000 | a=rtpmap:101 H264/90000 | |||
skipping to change at line 979 ¶ | skipping to change at line 926 ¶ | |||
a=rtpmap:104 rtx/90000 | a=rtpmap:104 rtx/90000 | |||
a=fmtp:104 apt=96;rtx-time=200 | a=fmtp:104 apt=96;rtx-time=200 | |||
a=rid:1 send max-fs=921600;max-fps=30 | a=rid:1 send max-fs=921600;max-fps=30 | |||
a=rid:2 send max-fs=614400;max-fps=15 | a=rid:2 send max-fs=614400;max-fps=15 | |||
a=rid:3 send max-fs=230400;max-fps=30 | a=rid:3 send max-fs=230400;max-fps=30 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | |||
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | |||
a=extmap:3 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id | a=extmap:3 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id | |||
a=rtcp-fb:* ccm pause nowait | a=rtcp-fb:* ccm pause nowait | |||
a=simulcast:send 1;~3;~2 | a=simulcast:send 1;~3;~2 | |||
]]></artwork> | </sourcecode> | |||
</figure> | </figure> | |||
<!-- End DNE --> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Simulcast and Redundancy"> | <name>Simulcast and Redundancy</name> | |||
<t>The example in this section looks at applying simulcast with | <t>The example in this section looks at applying simulcast with | |||
audio and video redundancy formats. The audio media description uses | audio and video redundancy formats. | |||
codec and bitrate restrictions, combining it with <xref | ||||
target="RFC2198">RTP Payload for Redundant Audio Data</xref> for | ||||
enhanced packet loss resilience. The video media description applies | ||||
both resolution and bitrate restrictions, combining it with FEC in | ||||
the form of <xref | ||||
target="I-D.ietf-payload-flexible-fec-scheme">Flexible FEC</xref> | ||||
and <xref target="RFC4588">RTP Retransmission</xref>.</t> | ||||
<t>The audio source is offered to be sent as two simulcast streams. | The audio media description uses codec and bitrate restrictions, | |||
The first simulcast stream is encoded with Opus, restricted to 50 | combined with the <xref target="RFC2198" format="default">RTP | |||
kbps (rid-id=5), and the second simulcast stream is encoded either | payload for redundant audio data</xref> for enhanced packet-loss | |||
with G.711 (rid-id=7) or with G.711 combined with LPC for redundancy | resilience. The video media description applies both resolution and | |||
(rid-id=6). In this example, stand-alone LPC is not offered as an | bitrate restrictions, combined with Forward Error Correction (FEC) | |||
possible payload type for the second simulcast stream's RID, which | in the form of <xref target="RFC8627" format="default">flexible | |||
could e.g. be motivated by not providing sufficient quality.</t> | FEC</xref> and <xref target="RFC4588" format="default">RTP | |||
retransmission</xref>.</t> | ||||
<t> | ||||
The audio source is offered to be sent as two simulcast | ||||
streams. The first simulcast stream is encoded with Opus, | ||||
restricted to 64 kbps (rid-id=1), and the second simulcast stream | ||||
(rid-id=2) is encoded with either G.711, or G.711 combined with | ||||
linear predictive coding (LPC) for redundancy and explicit comfort | ||||
noise (CN). Both simulcast streams include telephone-event | ||||
capability. In this example, stand-alone LPC is not offered as a | ||||
possible payload type for the second simulcast stream's RID, which | ||||
could be motivated by, for example, not providing sufficient | ||||
quality. | ||||
</t> | ||||
<t>The video source is offered to be sent as two simulcast streams, | <t>The video source is offered to be sent as two simulcast streams, | |||
both with two alternative simulcast formats. Redundancy and repair | both with two alternative simulcast formats. Redundancy and repair | |||
are offered in the form of both Flexible FEC and RTP Retransmission. | are offered in the form of both flexible FEC and RTP retransmission. | |||
The Flexible FEC is not bound to any particular RTP streams and is | The flexible FEC is not bound to any particular RTP streams and is | |||
therefore possible to use across all RTP streams that are being sent | therefore able to be used across all RTP streams that are being sent | |||
as part of this media description.</t> | as part of this media description.</t> | |||
<!-- DO NOT EDIT --> | ||||
<figure anchor="fig-sim-red" | <figure anchor="fig-sim-red"> | |||
title="Simulcast and Redundancy Example"> | <name>Simulcast and Redundancy Example</name> | |||
<artwork><![CDATA[v=0 | <sourcecode type="sdp"> | |||
o=fred 238947129 823479223 IN IP6 2001:db8::c000:27d | o=fred 238947129 823479223 IN IP6 2001:db8::c000:27d | |||
s=Offer from Simulcast Enabled Client using Redundancy | s=Offer from Simulcast-Enabled Client using Redundancy | |||
c=IN IP6 2001:db8::c000:27d | c=IN IP6 2001:db8::c000:27d | |||
t=0 0 | t=0 0 | |||
a=group:BUNDLE foo bar | a=group:BUNDLE foo bar | |||
m=audio 49200 RTP/AVP 97 98 99 100 101 102 | m=audio 49200 RTP/AVP 97 98 99 100 101 102 | |||
a=mid:foo | a=mid:foo | |||
a=rtpmap:97 G711/8000 | a=rtpmap:97 G711/8000 | |||
a=rtpmap:98 LPC/8000 | a=rtpmap:98 LPC/8000 | |||
a=rtpmap:99 OPUS/48000/1 | a=rtpmap:99 OPUS/48000/1 | |||
a=rtpmap:100 RED/8000/1 | a=rtpmap:100 RED/8000/1 | |||
a=rtpmap:101 CN/8000 | a=rtpmap:101 CN/8000 | |||
skipping to change at line 1046 ¶ | skipping to change at line 1001 ¶ | |||
a=mid:bar | a=mid:bar | |||
a=rtpmap:103 H264/90000 | a=rtpmap:103 H264/90000 | |||
a=rtpmap:104 VP8/90000 | a=rtpmap:104 VP8/90000 | |||
a=rtpmap:105 rtx/90000 | a=rtpmap:105 rtx/90000 | |||
a=rtpmap:106 rtx/90000 | a=rtpmap:106 rtx/90000 | |||
a=rtpmap:107 flexfec/90000 | a=rtpmap:107 flexfec/90000 | |||
a=fmtp:103 profile-level-id=42c00d;max-fs=3600;max-mbps=108000 | a=fmtp:103 profile-level-id=42c00d;max-fs=3600;max-mbps=108000 | |||
a=fmtp:104 max-fs=3600; max-fr=30 | a=fmtp:104 max-fs=3600; max-fr=30 | |||
a=fmtp:105 apt=103;rtx-time=200 | a=fmtp:105 apt=103;rtx-time=200 | |||
a=fmtp:106 apt=104;rtx-time=200 | a=fmtp:106 apt=104;rtx-time=200 | |||
a=fmtp:107 repair-window=2000 | a=fmtp:107 repair-window=100000 | |||
a=rid:1 send pt=103;max-width=1280;max-height=720;max-fps=30 | a=rid:1 send pt=103;max-width=1280;max-height=720;max-fps=30 | |||
a=rid:2 send pt=104;max-width=1280;max-height=720;max-fps=30 | a=rid:2 send pt=104;max-width=1280;max-height=720;max-fps=30 | |||
a=rid:3 send pt=103;max-width=640;max-height=360;max-br=300000 | a=rid:3 send pt=103;max-width=640;max-height=360;max-br=300000 | |||
a=rid:4 send pt=104;max-width=640;max-height=360;max-br=300000 | a=rid:4 send pt=104;max-width=640;max-height=360;max-br=300000 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | |||
a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id | |||
a=extmap:3 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id | a=extmap:3 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id | |||
a=rtcp-fb:* ccm pause nowait | a=rtcp-fb:* ccm pause nowait | |||
a=simulcast:send 1,2;3,4 | a=simulcast:send 1,2;3,4 | |||
]]></artwork> | </sourcecode> | |||
</figure> | </figure> | |||
<!-- End DNE --> | ||||
<t/> | ||||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec-rtp-aspects" numbered="true" toc="default"> | ||||
<section anchor="sec-rtp-aspects" title="RTP Aspects"> | <name>RTP Aspects</name> | |||
<t>This section discusses what the different entities in a simulcast | <t>This section discusses what the different entities in a simulcast | |||
media path can expect to happen on RTP level. This is explored from | media path can expect to happen on the RTP level. This is explored from | |||
source to sink by starting in an endpoint with a media source that is | source to sink by starting in an endpoint with a media source that is | |||
simulcasted to an RTP middlebox. That RTP middlebox sends media sources | simulcasted to an RTP middlebox. That RTP middlebox sends media sources | |||
both to other RTP middleboxes (cascaded middleboxes), as well as | to other RTP middleboxes (cascaded middleboxes), as well as | |||
selecting some simulcast format of the media source and sending it to | selecting some simulcast format of the media source and sending it to | |||
receiving endpoints. Different types of RTP middleboxes and their usage | receiving endpoints. Different types of RTP middleboxes and their usage | |||
of the different simulcast formats results in several different | of the different simulcast formats results in several different | |||
behaviors.</t> | behaviors.</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="Outgoing from Endpoint with Media Source"> | <name>Outgoing from Endpoint with Media Source</name> | |||
<t>The most straightforward simulcast case is the RTP streams being | <t>The most straightforward simulcast case is the RTP streams being | |||
emitted from the endpoint that originates a media source. When | emitted from the endpoint that originates a media source. When | |||
simulcast has been negotiated in the sending direction, the endpoint | simulcast has been negotiated in the sending direction, the endpoint | |||
can transmit up to the number of RTP streams needed for the negotiated | can transmit up to the number of RTP streams needed for the negotiated | |||
simulcast streams for that media source. Each RTP stream (SSRC) is | simulcast streams for that media source. Each RTP stream (SSRC) is | |||
identified by <xref target="sec-relating">associating</xref> it with | identified by associating it (<xref target="sec-relating" format="defaul t"/>) with | |||
an RtpStreamId SDES item, transmitted in RTCP and possibly also as an | an RtpStreamId SDES item, transmitted in RTCP and possibly also as an | |||
RTP header extension. In cases where multiple media sources have been | RTP header extension. In cases where multiple media sources have been | |||
negotiated for the same RTP session and thus <xref | negotiated for the same RTP session and thus <xref target="RFC8843" form | |||
target="I-D.ietf-mmusic-sdp-bundle-negotiation">BUNDLE</xref> is used, | at="default">BUNDLE</xref> is used, the MID SDES item will also be | |||
also the MID SDES item will be sent similarly to the RtpStreamId.</t> | sent, similarly to the RtpStreamId.</t> | |||
<t>Each RTP stream might not be continuously transmitted due to any of | <t>Each RTP stream might not be continuously transmitted due to any of | |||
the following reasons; temporarily paused using <xref | the following reasons: temporarily paused using <xref target="RFC7728" f | |||
target="RFC7728">Pause/Resume</xref>, sender side application logic | ormat="default">Pause/Resume</xref>, sender-side application logic | |||
temporarily pausing it, or lack of network resources to transmit this | temporarily pausing it, or lack of network resources to transmit this | |||
simulcast stream. However, all simulcast streams that have been | simulcast stream. However, all simulcast streams that have been | |||
negotiated have active and maintained SSRC (at least in regular RTCP | negotiated have active and maintained SSRCs (at least in regular RTCP | |||
reports), even if no RTP packets are currently transmitted. The | reports), even if no RTP packets are currently transmitted. The | |||
relation between an RTP Stream (SSRC) and a particular simulcast | relation between an RTP stream (SSRC) and a particular simulcast | |||
stream is not expected to change, except in exceptional situations | stream is not expected to change, except in exceptional situations | |||
such as SSRC collisions. At SSRC changes, the usage of MID and | such as SSRC collisions. At SSRC changes, the usage of MID and | |||
RtpStreamId should enable the receiver to correctly identify the RTP | RtpStreamId should enable the receiver to correctly identify the RTP | |||
streams even after an SSRC change.</t> | streams even after an SSRC change.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="RTP Middlebox to Receiver"> | <name>RTP Middlebox to Receiver</name> | |||
<t>RTP streams in a multi-party RTP session can be used in multiple | <t>RTP streams in a multiparty RTP session can be used in multiple | |||
different ways, when the session utilizes simulcast at least on the | different ways when the session utilizes simulcast at least on the | |||
media source to middlebox legs. This is to a large degree due to the | media-source-to-middlebox legs. This is to a large degree due to the | |||
different RTP middlebox behaviors, but also the needs of the | different RTP middlebox behaviors, but also the needs of the | |||
application. This text assumes that the RTP middlebox will select a | application. This text assumes that the RTP middlebox will select a | |||
media source and choose which simulcast stream for that media source | media source and choose which simulcast stream for that media source | |||
to deliver to a specific receiver. In many cases, at most one | to deliver to a specific receiver. In many cases, at most one | |||
simulcast stream per media source will be forwarded to a particular | simulcast stream per media source will be forwarded to a particular | |||
receiver at any instant in time, even if the selected simulcast stream | receiver at any instant in time, even if the selected simulcast stream | |||
may vary. For cases where this does not hold due to application needs, | may vary. For cases where this does not hold due to application needs, | |||
then the RTP stream aspects will fall under the middlebox to middlebox | the RTP stream aspects will fall under the middlebox-to-middlebox | |||
case <xref target="sec-rtp-box-box"/>.</t> | case (<xref target="sec-rtp-box-box" format="default"/>).</t> | |||
<t>The selection of which simulcast streams to forward towards the | <t>The selection of which simulcast streams to forward towards the | |||
receiver, is application specific. However, in conferencing | receiver is application specific. However, in conferencing | |||
applications, active speaker selection is common. In case the number | applications, active speaker selection is common. In case the number | |||
of media sources possible to forward, N, is less than the total amount | of media sources possible to forward, N, is less than the total number | |||
of media sources available in an multi-media session, the current and | of media sources available in a multimedia session, the current and | |||
previous speakers (up to N in total) are often the ones forwarded. To | previous speakers (up to N in total) are often the ones forwarded. To | |||
avoid the need for media specific processing to determine the current | avoid the need for media-specific processing to determine the current | |||
speaker(s) in the RTP middlebox, the endpoint providing a media source | speaker(s) in the RTP middlebox, the endpoint providing a media source | |||
may include meta data, such as the <xref target="RFC6464">RTP Header | may include metadata, such as the <xref target="RFC6464" format="default | |||
Extension for Client-to-Mixer Audio Level Indication</xref>.</t> | ">RTP header | |||
extension for client-to-mixer audio level indication</xref>.</t> | ||||
<t>The possibilities for stream switching are media type specific, but | <t>The possibilities for stream switching are media type specific, but | |||
for media types with significant interframe dependencies in the | for media types with significant interframe dependencies in the | |||
encoding, like most video coding, the switching needs to be made at | encoding, like most video coding, the switching needs to be made at | |||
suitable switching points in the media stream that breaks or otherwise | suitable switching points in the media stream that breaks or otherwise | |||
deals with the dependency structure. Even if switching points can be | deals with the dependency structure. Even if switching points can be | |||
included periodically, it is common to use mechanisms like <xref | included periodically, it is common to use mechanisms like <xref target= | |||
target="RFC5104">Full Intra Requests</xref> to request switching | "RFC5104" format="default">Full Intra Requests</xref> to request switching | |||
points from the endpoint performing the encoding of the media | points from the endpoint performing the encoding of the media | |||
source.</t> | source.</t> | |||
<t>Inclusion of the RtpStreamId SDES item for an SSRC in the | ||||
<t>Inclusion of the RtpStreamId SDES item for an SSRC in the middlebox | middlebox-to-receiver direction should only occur when use of | |||
to receiver direction should only occur when use of RtpStreamId has | RtpStreamId has | |||
been negotiated in that direction. It is worth noting that one can | been negotiated in that direction. It is worth noting that one can | |||
signal multiple RtpStreamIds when simulcast signalling indicates only | signal multiple RtpStreamIds when simulcast signaling indicates only | |||
a single simulcast stream, allowing one to use all of the RtpStreamIds | a single simulcast stream, allowing one to use all of the RtpStreamIds | |||
as alternatives for that simulcast stream. One reason for including | as alternatives for that simulcast stream. One reason for including | |||
the RtpStreamId in the middlebox to receiver direction for an RTP | the RtpStreamId in the middlebox-to-receiver direction for an RTP | |||
stream is to let the receiver know which restrictions apply to the | stream is to let the receiver know which restrictions apply to the | |||
currently delivered RTP stream. In case the RtpStreamId is negotiated | currently delivered RTP stream. In case the RtpStreamId is negotiated | |||
to be used, it is important to remember that the used identifiers will | to be used, it is important to remember that the used identifiers will | |||
be specific to each signalling session. Even if the central entity can | be specific to each signaling session. Even if the central entity can | |||
attempt to coordinate, it is likely that the RtpStreamIds need to be | attempt to coordinate, it is likely that the RtpStreamIds need to be | |||
translated to the leg specific values. The below cases will have as | translated to the leg-specific values. The below cases will assume | |||
base line that RtpStreamId is not used in the mixer to receiver | that RtpStreamId is not used in the mixer to receiver | |||
direction.</t> | direction.</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="Media-Switching Mixer"> | <name>Media-Switching Mixer</name> | |||
<t>This section discusses the behavior in cases where the RTP | <t>This section discusses the behavior in cases where the RTP | |||
middlebox behaves like the Media-Switching Mixer (Section 3.6.2) in | middlebox behaves like the media-switching mixer in | |||
<xref target="RFC7667">RTP Topologies</xref>. The fundamental aspect | RTP topologies (<xref target="RFC7667" | |||
sectionFormat="of" section="3.6.2"/>). The | ||||
fundamental aspect | ||||
here is that the media sources delivered from the middlebox will be | here is that the media sources delivered from the middlebox will be | |||
the mixer's conceptual or functional ones. For example, one media | the mixer's conceptual or functional ones. For example, one media | |||
source may be the main speaker in high resolution video, while a | source may be the main speaker in high-resolution video, while a | |||
number of other media sources are thumbnails of each | number of other media sources are thumbnails of each | |||
participant.</t> | participant.</t> | |||
<t>The above results in the RTP stream produced by the mixer being | ||||
<t>The above results in that the RTP stream produced by the mixer is | ||||
one that switches between a number of received incoming RTP streams | one that switches between a number of received incoming RTP streams | |||
for different media sources and in different simulcast versions. The | for different media sources and in different simulcast versions. The | |||
mixer selects the media source to be sent as one of the RTP streams, | mixer selects the media source to be sent as one of the RTP streams | |||
and then selects among the available simulcast streams for the most | and then selects among the available simulcast streams for the most | |||
appropriate one. The selection criteria include available bandwidth | appropriate one. The selection criteria include available bandwidth | |||
on the mixer to receiver path and restrictions based on the | on the mixer-to-receiver path and restrictions based on the | |||
functional usage of the RTP stream delivered to the receiver. As an | functional usage of the RTP stream delivered to the receiver. As an | |||
example of the latter, it is unnecessary to forward a full HD video | example of the latter, it is unnecessary to forward a full HD video | |||
to a receiver if the display area is just a thumbnail. Thus, | to a receiver if the display area is just a thumbnail. Thus, | |||
restrictions may exist to not allow some simulcast streams to be | restrictions may exist to not allow some simulcast streams to be | |||
forwarded for some of the mixer's media sources.</t> | forwarded for some of the mixer's media sources.</t> | |||
<t>This will result in a single RTP stream being used for each of | <t>This will result in a single RTP stream being used for each of | |||
the RTP mixer's media sources. This RTP stream is at any point in | the RTP mixer's media sources. At any point in time, this RTP stream | |||
time a selection of one particular RTP stream arriving to the mixer, | is a selection of one particular RTP stream arriving to the mixer, | |||
where the RTP header field values are rewritten to provide a | where the RTP header-field values are rewritten to provide a | |||
consistent, single RTP stream. If the RTP mixer doesn't receive any | consistent, single RTP stream. If the RTP mixer doesn't receive any | |||
incoming stream matched to this media source, the SSRC will not | incoming stream matched to this media source, the SSRC will not | |||
transmit, but be kept alive using RTCP. The SSRC and thus RTP stream | transmit but be kept alive using RTCP. The SSRC and thus RTP stream | |||
for the mixer's media source is expected to be long term stable. It | for the mixer's media source is expected to be long-term stable. It | |||
will only be changed by signalling or other disruptive events. Note | will only be changed by signaling or other disruptive events. Note | |||
that although the above talks about a single RTP stream, there can | that although the above talks about a single RTP stream, there can | |||
in some cases be multiple RTP streams carrying the selected | in some cases be multiple RTP streams carrying the selected | |||
simulcast stream for the originating media source, including | simulcast stream for the originating media source, including | |||
redundancy or other auxiliary RTP streams.</t> | redundancy or other auxiliary RTP streams.</t> | |||
<t>The mixer may communicate the identity of the originating media | <t>The mixer may communicate the identity of the originating media | |||
source to the receiver by including the CSRC field with the | source to the receiver by including the Contributing Source (CSRC) fie ld with the | |||
originating media source's SSRC value. Note that due to the | originating media source's SSRC value. Note that due to the | |||
possibility that the RTP mixer switches between simulcast versions | possibility that the RTP mixer switches between simulcast versions | |||
of the media source, the CSRC value may change, even if the media | of the media source, the CSRC value may change, even if the media | |||
source is kept the same.</t> | source is kept the same.</t> | |||
<t>It is important to note that any MID SDES item from the | <t>It is important to note that any MID SDES item from the | |||
originating media source needs to be removed and not be associated | originating media source needs to be removed and not be associated | |||
with the RTP stream's SSRC. That is, there is nothing in the | with the RTP stream's SSRC. That is, there is nothing in the | |||
signalling between the mixer and the receiver that is structured | signaling between the mixer and the receiver that is structured | |||
around the originating media sources, only the mixer's media | around the originating media sources, only the mixer's media | |||
sources. If they would be associated with the SSRC, the receiver | sources. If they were associated with the SSRC, the receiver | |||
would likely believe that there has been an SSRC collision, and that | would likely believe that there has been an SSRC collision and | |||
the RTP stream is spurious as it doesn't carry the identifiers used | the RTP stream is spurious, because it doesn't carry the identifiers u | |||
sed | ||||
to relate it to the correct context. However, this is not true for | to relate it to the correct context. However, this is not true for | |||
CSRC values, as long as they are never used as SSRC. In these cases | CSRC values, as long as they are never used as an SSRC. In these cases , | |||
one could provide CNAME and MID as SDES items. A receiver could use | one could provide CNAME and MID as SDES items. A receiver could use | |||
this to determine which CSRC values that are associated with the | this to determine which CSRC values that are associated with the | |||
same originating media source.</t> | same originating media source.</t> | |||
<t>If RtpStreamIds are used in the scenario described by this | <t>If RtpStreamIds are used in the scenario described by this | |||
section, it should be noted that the RtpStreamId on a particular | section, it should be noted that the RtpStreamId on a particular | |||
SSRC will change based on the actual simulcast stream selected for | SSRC will change based on the actual simulcast stream selected for | |||
switching. These RtpStreamId identifiers will be local to this leg's | switching. These RtpStreamId identifiers will be local to this leg's | |||
signalling context. In addition, the defined RtpStreamIds and their | signaling context. In addition, the defined RtpStreamIds and their | |||
parameters need to cover all the media sources and simulcast streams | parameters need to cover all the media sources and simulcast streams | |||
received by the RTP mixer that can be switched into this media | received by the RTP mixer that can be switched into this media | |||
source, sent by the RTP mixer.</t> | source, sent by the RTP mixer.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Selective Forwarding Middlebox"> | <name>Selective Forwarding Middlebox</name> | |||
<t>This section discusses the behavior in cases where the RTP | <t>This section discusses the behavior in cases where the RTP | |||
middlebox behaves like the Selective Forwarding Middlebox (Section | middlebox behaves like the Selective Forwarding Middlebox in RTP | |||
3.7) in <xref target="RFC7667">RTP Topologies</xref>. Applications | topologies (<xref target="RFC7667" | |||
for this type of RTP middlebox results in that each originating | sectionFormat="of" section="3.7"/>). Applications | |||
media source will have a corresponding media source on the leg | for this type of RTP middlebox result in each originating | |||
media source having a corresponding media source on the leg | ||||
between the middlebox and the receiver. A Selective Forwarding | between the middlebox and the receiver. A Selective Forwarding | |||
Middlebox (SFM) could go as far as exposing all the simulcast | Middlebox (SFM) could go as far as exposing all the simulcast | |||
streams for an media source, however this section will focus on | streams for a media source; however, this section will focus on | |||
having a single simulcast stream that can contain any of the | having a single simulcast stream that can contain any of the | |||
simulcast formats. This section will assume that the SFM projection | simulcast formats. This section will assume that the SFM projection | |||
mechanism works on media source level, and maps one of the media | mechanism works on the media-source level and maps one of the media | |||
source's simulcast streams onto one RTP stream from the SFM to the | source's simulcast streams onto one RTP stream from the SFM to the | |||
receiver.</t> | receiver.</t> | |||
<t>This usage will result in the individual RTP stream(s) for | ||||
<t>This usage will result in that the individual RTP stream(s) for | one media source being able to switch between being active and | |||
one media source can switch between being active to paused, based on | paused, based on | |||
the subset of media sources the SFM wants to provide the receiver | the subset of media sources the SFM wants to provide the receiver | |||
for the moment. With SFMs there exist no reasons to use CSRC to | for the moment. With SFMs, there exist no reasons to use CSRC to | |||
indicate the originating stream, as there is a one to one media | indicate the originating stream, as there is a one-to-one | |||
source mapping. If the application requires knowing the simulcast | media-source mapping. If the application requires knowing the | |||
simulcast | ||||
version received to function well, then RtpStreamId should be | version received to function well, then RtpStreamId should be | |||
negotiated on the SFM to receiver leg. Which simulcast stream that | negotiated on the SFM to receiver leg. Which simulcast stream that | |||
is being forwarded is not made explicit unless RtpStreamId is used | is being forwarded is not made explicit unless RtpStreamId is used | |||
on the leg.</t> | on the leg.</t> | |||
<t>Any MID SDES items being sent by the SFM to the receiver are only | <t>Any MID SDES items being sent by the SFM to the receiver are only | |||
those agreed between the SFM and the receiver, and no MID values | those agreed between the SFM and the receiver, and no MID values | |||
from the originating side of the SFM are to be forwarded.</t> | from the originating side of the SFM are to be forwarded.</t> | |||
<t>An SFM could expose corresponding RTP streams for all the media | ||||
<t>A SFM could expose corresponding RTP streams for all the media | sources and their simulcast streams and then, for any media source | |||
sources and their simulcast streams, and then for any media source | that is to be provided, forward one selected simulcast stream. | |||
that is to be provided forward one selected simulcast stream. | However, this is not recommended, as it would unnecessarily increase | |||
However, this is not recommended as it would unnecessarily increase | ||||
the number of RTP streams and require the receiver to timely detect | the number of RTP streams and require the receiver to timely detect | |||
switching between simulcast streams. The above usage requires the | switching between simulcast streams. The above usage requires the | |||
same SFM functionality for switching, while avoiding the | same SFM functionality for switching, while avoiding the | |||
uncertainties of timely detecting that a RTP stream ends. The | uncertainties of timely detecting that a RTP stream ends. The | |||
benefit would be that the received simulcast stream would be | benefit would be that the received simulcast stream would be | |||
implicitly provided by which RTP stream would be active for a media | implicitly provided by which RTP stream would be active for a media | |||
source. However, using RtpStreamId to make this explicit also | source. However, using RtpStreamId to make this explicit also | |||
exposes which alternative format is used. The conclusion is that | exposes which alternative format is used. The conclusion is that | |||
using one RTP stream per simulcast stream is unnecessary. The issue | using one RTP stream per simulcast stream is unnecessary. The issue | |||
with timely detecting end of streams, independent if they are | with timely detecting end of streams, independent of whether they are | |||
stopped temporarily or long term, is that there is no explicit | stopped temporarily or long term, is that there is no explicit | |||
indication that the transmission has intentionally been stopped. The | indication that the transmission has intentionally been stopped. The | |||
RTCP based <xref target="RFC7728">Pause and Resume mechanism</xref> | RTCP-based <xref target="RFC7728" format="default">pause and resume | |||
mechanism</xref> | ||||
includes a PAUSED indication that provides the last RTP sequence | includes a PAUSED indication that provides the last RTP sequence | |||
number transmitted prior to the pause. Due to usage, the timeliness | number transmitted prior to the pause. Due to usage, the timeliness | |||
of this solution depends on when delivery using RTCP can occur in | of this solution depends on when delivery using RTCP can occur in | |||
relation to the transmission of the last RTP packet. If no explicit | relation to the transmission of the last RTP packet. If no explicit | |||
information is provided at all, then detection based on non | information is provided at all, then detection based on | |||
increasing RTCP SR field values and timers need to be used to | nonincreasing RTCP SR field values and timers need to be used to | |||
determine pause in RTP packet delivery. This results in that one can | determine pause in RTP packet delivery. As a result, when the last | |||
usually not determine when the last RTP packet arrives (if it | RTP packet arrives (if it arrives), one usually | |||
arrives) that this will be the last. That it was the last is | cannot determine that this will be the last. That it was the last is | |||
something that one learns later.</t> | something that one learns later.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec-rtp-box-box" numbered="true" toc="default"> | ||||
<section anchor="sec-rtp-box-box" title="RTP Middlebox to RTP Middlebox"> | <name>RTP Middlebox to RTP Middlebox</name> | |||
<t>This relates to the transmission of simulcast streams between RTP | <t>This relates to the transmission of simulcast streams between RTP | |||
middleboxes or other usages where one wants to enable the delivery of | middleboxes or other usages where one wants to enable the delivery of | |||
multiple simultaneous simulcast streams per media source, but the | multiple simultaneous simulcast streams per media source, but the | |||
transmitting entity is not the originating endpoint. For a particular | transmitting entity is not the originating endpoint. For a particular | |||
direction between middlebox A and B, this looks very similar to the | direction between middleboxes A and B, this looks very similar to the | |||
originating to middlebox case on a media source basis. However, in | originating-to-middlebox case on a media-source basis. However, in | |||
this case there is usually multiple media sources, originating from | this case, there are usually multiple media sources, originating from | |||
multiple endpoints. This can create situations where limitations in | multiple endpoints. This can create situations where limitations in | |||
the number of simultaneously received media streams can arise, for | the number of simultaneously received media streams can arise -- for | |||
example due to limitation in network bandwidth. In this case, a subset | example, due to limitation in network bandwidth. In this case, a subset | |||
of not only the simulcast streams, but also media sources can be | of not only the simulcast streams but also media sources can be | |||
selected. This results in that individual RTP streams can be become | selected. As a result, individual RTP streams can become | |||
paused at any point and later being resumed based on various | paused at any point and later be resumed based on various criteria.</t> | |||
criteria.</t> | ||||
<t>The MIDs used between A and B are the ones agreed between these two | <t>The MIDs used between A and B are the ones agreed between these two | |||
identities in signalling. The RtpStreamId values will also be provided | identities in signaling. The RtpStreamId values will also be provided | |||
to ensure explicit information about which simulcast stream they are. | to ensure explicit information about which simulcast stream they are. | |||
The RTP stream to MID and RtpStreamId associations should here be long | The RTP-stream-to-MID and -RtpStreamId associations should here be | |||
term stable.</t> | long-term stable.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec-network-aspects" numbered="true" toc="default"> | ||||
<section anchor="sec-network-aspects" title="Network Aspects"> | <name>Network Aspects</name> | |||
<t>Simulcast is in this memo defined as the act of sending multiple | <t>Simulcast is in this memo defined as the act of sending multiple | |||
alternative encoded streams of the same underlying media source. When | alternative encoded streams of the same underlying media | |||
transmitting multiple independent streams that originate from the same | source. Transmitting multiple independent streams that originate from | |||
source, it could potentially be done in several different ways using | the same | |||
source could potentially be done in several different ways using | ||||
RTP. A general discussion on considerations for use of the different RTP | RTP. A general discussion on considerations for use of the different RTP | |||
multiplexing alternatives can be found in <xref | multiplexing alternatives can be found in <xref target="I-D.ietf-avtcore-m | |||
target="I-D.ietf-avtcore-multiplex-guidelines">Guidelines for | ultiplex-guidelines" format="default">"Guidelines for using the Multiplexing Fea | |||
Multiplexing in RTP</xref>. Discussion and clarification on how to | tures of | |||
handle multiple streams in an RTP session can be found in <xref | RTP to Support Multiple Media Streams"</xref>. Discussion and | |||
target="RFC8108"/>.</t> | clarification on how to handle multiple streams in an RTP session can be | |||
found in <xref target="RFC8108" format="default"/>.</t> | ||||
<t>The network aspects that are relevant for simulcast are:<list | <t>The network aspects that are relevant for simulcast are:</t> | |||
style="hanging"> | <dl newline="false" spacing="normal"> | |||
<t hangText="Quality of Service:">When using simulcast it might be | <dt>Quality of Service (QoS):</dt> | |||
<dd>When using simulcast, it might be | ||||
of interest to prioritize a particular simulcast stream, rather than | of interest to prioritize a particular simulcast stream, rather than | |||
applying equal treatment to all streams. For example, lower bitrate | applying equal treatment to all streams. For example, lower-bitrate | |||
streams may be prioritized over higher bitrate streams to minimize | streams may be prioritized over higher-bitrate streams to minimize | |||
congestion or packet losses in the low bitrate streams. Thus, there | congestion or packet losses in the low-bitrate streams. Thus, there | |||
is a benefit to use a simulcast solution with good QoS support.</t> | is a benefit to using a simulcast solution with good QoS support.</dd> | |||
<t hangText="NAT/FW Traversal:">Using multiple RTP sessions incurs | ||||
more cost for NAT/FW traversal unless they can re-use the same | ||||
transport flow, which can be achieved by <xref | ||||
target="I-D.ietf-mmusic-sdp-bundle-negotiation">Multiplexing | ||||
Negotiation Using SDP Port Numbers</xref>.</t> | ||||
</list></t> | ||||
<dt>NAT/FW Traversal (Network Address Translator / Firewall Traversal):< | ||||
/dt> | ||||
<dd>Using multiple RTP sessions incurs | ||||
more cost for NAT/FW traversal unless they can reuse the same | ||||
transport flow, which can be achieved by <xref target="RFC8843" format | ||||
="default">multiplexing negotiation using SDP port | ||||
numbers</xref>.</dd> | ||||
</dl> | ||||
<t/> | <t/> | |||
<section numbered="true" toc="default"> | ||||
<section title="Bitrate Adaptation"> | <name>Bitrate Adaptation</name> | |||
<t>Use of multiple simulcast streams can require a significant amount | <t>Use of multiple simulcast streams can require a significant amount | |||
of network resources. The aggregate bandwidth for all simulcast | of network resources. The aggregate bandwidth for all simulcast | |||
streams for a media source (and thus SDP media description) is bounded | streams for a media source (and thus SDP media description) is bounded | |||
by any SDP "b=" line applicable to that media source. It is assumed | by any SDP "b=" line applicable to that media source. It is assumed | |||
that a suitable congestion control mechanism is used by the | that a suitable congestion-control mechanism is used by the | |||
application to ensure that it doesn't cause persistent congestion. If | application to ensure that it doesn't cause persistent congestion. If | |||
the amount of available network resources varies during an RTP session | the amount of available network resources varies during an RTP session | |||
such that it does not match what is negotiated in SDP, the bitrate | such that it does not match what is negotiated in SDP, the bitrate | |||
used by the different simulcast streams may have to be reduced | used by the different simulcast streams may have to be reduced | |||
dynamically. When a simulcasting media source uses a single media | dynamically. When a simulcasting media source uses a single media | |||
transport for all of the simulcast streams, it is likely that a joint | transport for all of the simulcast streams, it is likely that a joint | |||
congestion control across all simulcast streams is used for that media | congestion control across all simulcast streams is used for that media | |||
source. What simulcast streams to prioritize when allocating available | source. What simulcast streams to prioritize when allocating available | |||
bitrate among the simulcast streams in such adaptation SHOULD be taken | bitrate among the simulcast streams in such adaptation <bcp14>SHOULD</bc p14> be taken | |||
from the simulcast stream order on the "a=simulcast" line and ordering | from the simulcast stream order on the "a=simulcast" line and ordering | |||
of alternative simulcast formats <xref target="sec-cap"/>. Simulcast | of alternative simulcast formats (<xref target="sec-cap" format="default "/>). Simulcast | |||
streams that have pause/resume capability and that would be given such | streams that have pause/resume capability and that would be given such | |||
low bitrate by the adaptation process that they are considered not | low bitrate by the adaptation process that they are considered not | |||
really useful can be temporarily paused until the limiting condition | really useful can be temporarily paused until the limiting condition | |||
clears.</t> | clears.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec-limitation" numbered="true" toc="default"> | ||||
<section anchor="sec-limitation" title="Limitation"> | <name>Limitation</name> | |||
<t>The chosen approach has a limitation that relates to the use of a | <t>The chosen approach has a limitation that relates to the use of a | |||
single RTP session for all simulcast formats of a media source, which | single RTP session for all simulcast formats of a media source, which | |||
comes from sending all simulcast streams related to a media source under | comes from sending all simulcast streams related to a media source under | |||
the same SDP media description.</t> | the same SDP media description.</t> | |||
<t>It is not possible to use different simulcast streams on different | <t>It is not possible to use different simulcast streams on different | |||
media transports, limiting the possibilities to apply different QoS to | media transports, which limits the possibilities for applying different Qo S to | |||
different simulcast streams. When using unicast, QoS mechanisms based on | different simulcast streams. When using unicast, QoS mechanisms based on | |||
individual packet marking are feasible, since they do not require | individual packet marking are feasible, since they do not require | |||
separation of simulcast streams into different RTP sessions to apply | separation of simulcast streams into different RTP sessions to apply | |||
different QoS.</t> | different QoS.</t> | |||
<t>It is also not possible to separate different simulcast streams into | <t>It is also not possible to separate different simulcast streams into | |||
different multicast groups to allow a multicast receiver to pick the | different multicast groups to allow a multicast receiver to pick the | |||
stream it wants, rather than receive all of them. In this case, the only | stream it wants, rather than receive all of them. In this case, the only | |||
reasonable implementation is to use different RTP sessions for each | reasonable implementation is to use different RTP sessions for each | |||
multicast group so that reporting and other RTCP functions operate as | multicast group so that reporting and other RTCP functions operate as | |||
intended. Such simulcast usage in multicast context is out of scope for | intended. Such simulcast usage in a multicast context is out of scope for | |||
the current document and would require additional specification.</t> | the current document and would require additional specification.</t> | |||
</section> | </section> | |||
<section anchor="sec-iana" numbered="true" toc="default"> | ||||
<section anchor="sec-iana" title="IANA Considerations"> | <name>IANA Considerations</name> | |||
<t>This document requests to register a new media-level SDP attribute, | <t>This document registers a new media-level SDP attribute, | |||
"simulcast", in the "att-field (media level only)" registry within the | "simulcast", in the "att-field (media level only)" registry within the | |||
SDP parameters registry, according to the procedures of <xref | "Session Description Protocol (SDP) Parameters" registry, according to the | |||
target="RFC4566"/> and <xref | procedures of <xref target="RFC4566" format="default"/> and <xref target=" | |||
target="I-D.ietf-mmusic-sdp-mux-attributes"/>.<list style="hanging"> | RFC8859" format="default"/>.</t> | |||
<t hangText="Contact name, email:">The IESG (iesg@ietf.org)</t> | <dl newline="false" spacing="normal"> | |||
<dt>Contact name, email:</dt> | ||||
<t hangText="Attribute name:">simulcast</t> | <dd>The IESG (iesg@ietf.org)</dd> | |||
<dt>Attribute name:</dt> | ||||
<t hangText="Long-form attribute name:">Simulcast stream | <dd>simulcast</dd> | |||
description</t> | <dt>Long-form attribute name:</dt> | |||
<dd>Simulcast stream description</dd> | ||||
<t hangText="Charset dependent:">No</t> | <dt>Charset dependent:</dt> | |||
<dd>No</dd> | ||||
<t hangText="Attribute value:">sc-value; see <xref | <dt>Attribute value:</dt> | |||
target="sec-attr"/> of RFC XXXX.</t> | <dd>sc-value; see <xref target="sec-attr" format="default"/> of RFC | |||
8853.</dd> | ||||
<t hangText="Purpose:">Signals simulcast capability for a set of RTP | <dt>Purpose:</dt> | |||
streams</t> | <dd>Signals simulcast capability for a set of RTP | |||
streams</dd> | ||||
<t hangText="MUX category:">NORMAL</t> | <dt>Mux category:</dt> | |||
</list>Note to RFC Editor: Please replace "RFC XXXX" with the assigned | <dd>NORMAL</dd> | |||
number of this RFC.</t> | </dl> | |||
</section> | </section> | |||
<section anchor="sec-security" numbered="true" toc="default"> | ||||
<section anchor="sec-security" title="Security Considerations"> | <name>Security Considerations</name> | |||
<t>The simulcast capability, configuration attributes, and parameters | <t>The simulcast capability, configuration attributes, and parameters | |||
are vulnerable to attacks in signaling.</t> | are vulnerable to attacks in signaling.</t> | |||
<t>A false inclusion of the "a=simulcast" attribute may result in | <t>A false inclusion of the "a=simulcast" attribute may result in | |||
simultaneous transmission of multiple RTP streams that would otherwise | simultaneous transmission of multiple RTP streams that would otherwise | |||
not be generated. The impact is limited by the media description joint | not be generated. The impact is limited by the media description joint | |||
bandwidth, shared by all simulcast streams irrespective of their number. | bandwidth, shared by all simulcast streams irrespective of their number. | |||
There may however be a large number of unwanted RTP streams that will | However, there may be a large number of unwanted RTP streams that will | |||
impact the share of bandwidth allocated for the originally wanted RTP | impact the share of bandwidth allocated for the originally wanted RTP | |||
stream.</t> | stream.</t> | |||
<t>A hostile removal of the "a=simulcast" attribute will result in | <t>A hostile removal of the "a=simulcast" attribute will result in | |||
simulcast not being used.</t> | simulcast not being used.</t> | |||
<t>Neither of the above will likely have any major consequences and can | <t> | |||
be mitigated by signaling that is at least integrity and source | Integrity protection and source authentication of all SDP signaling, | |||
authenticated to prevent an attacker to change it.</t> | including simulcast attributes, can mitigate the risks of such attacks | |||
that attempt to alter signaling. | ||||
</t> | ||||
<t>Security considerations related to the use of "a=rid" and the | <t>Security considerations related to the use of "a=rid" and the | |||
RtpStreamId SDES item is covered in <xref target="I-D.ietf-mmusic-rid"/> | RtpStreamId SDES item are covered in <xref target="RFC8851" format="defaul | |||
and <xref target="I-D.ietf-avtext-rid"/>. There are no additional | t"/> | |||
and <xref target="RFC8852" format="default"/>. There are no additional | ||||
security concerns related to their use in this specification.</t> | security concerns related to their use in this specification.</t> | |||
</section> | </section> | |||
<section anchor="sec-contributors" title="Contributors"> | ||||
<t>Morgan Lindqvist and Fredrik Jansson, both from Ericsson, have | ||||
contributed with important material to the first versions of this | ||||
document. Robert Hansen and Cullen Jennings, from Cisco, Peter Thatcher, | ||||
from Google, and Adam Roach, from Mozilla, contributed significantly to | ||||
subsequent versions.</t> | ||||
</section> | ||||
<section anchor="sec-ack" title="Acknowledgements"> | ||||
<t>The authors would like to thank Bernard Aboba, Thomas Belling, Roni | ||||
Even, Adam Roach, Inaki Baz Castillo, Paul Kyzivat, and Arun Arunachalam | ||||
for the feedback they provided during the development of this | ||||
document.</t> | ||||
</section> | ||||
</middle> | </middle> | |||
<back> | <back> | |||
<references title="Normative References"> | ||||
<?rfc include="reference.RFC.2119"?> | ||||
<?rfc include='reference.RFC.3550'?> | ||||
<?rfc include='reference.RFC.4566'?> | ||||
<?rfc include='reference.RFC.5234'?> | ||||
<?rfc include='reference.RFC.7405'?> | ||||
<?rfc include='reference.RFC.7728'?> | ||||
<?rfc include='reference.RFC.8174'?> | ||||
<?rfc include='reference.I-D.ietf-mmusic-rid'?> | ||||
<?rfc include='reference.I-D.ietf-avtext-rid'?> | ||||
<?rfc include='reference.I-D.ietf-mmusic-sdp-mux-attributes'?> | ||||
<?rfc include='reference.I-D.ietf-mmusic-sdp-bundle-negotiation'?> | ||||
</references> | ||||
<references title="Informative References"> | ||||
<?rfc include='reference.RFC.2198'?> | ||||
<?rfc include='reference.RFC.3264'?> | ||||
<?rfc include='reference.RFC.3389'?> | ||||
<?rfc include='reference.RFC.4588'?> | ||||
<?rfc include='reference.RFC.4733'?> | ||||
<?rfc include='reference.RFC.5104'?> | <displayreference target="I-D.ietf-avtcore-multiplex-guidelines" to="MULTIPLEX"/ | |||
> | ||||
<?rfc include='reference.RFC.5109'?> | ||||
<?rfc include='reference.RFC.5583'?> | ||||
<?rfc include='reference.RFC.6184'?> | ||||
<?rfc include='reference.RFC.6190'?> | ||||
<?rfc include='reference.RFC.6236'?> | ||||
<?rfc include='reference.RFC.6464'?> | ||||
<?rfc include='reference.RFC.7104'?> | <references> | |||
<name>References</name> | ||||
<references> | ||||
<name>Normative References</name> | ||||
<xi:include | ||||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
2119.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.3264.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.3550.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4566.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5234.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7405.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7728.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8174.xml"/> | ||||
<?rfc include='reference.RFC.7656'?> | <!-- draft-ietf-mmusic-rid in C238 --> | |||
<reference anchor="RFC8851" target="https://www.rfc-editor.org/info/rfc8 | ||||
851"> | ||||
<front> | ||||
<title>RTP Payload Format Restrictions</title> | ||||
<author initials="A.B." surname="Roach" fullname="Adam Roach" role=" | ||||
editor"> | ||||
<organization/> | ||||
</author> | ||||
<date month="April" year="2020"/> | ||||
</front> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8851"/> | ||||
<seriesInfo name="RFC" value="8851"/> | ||||
</reference> | ||||
<?rfc include='reference.RFC.7667'?> | <!-- draft-ietf-avtext-rid-09 in C238 --> | |||
<reference anchor="RFC8852" target="https://www.rfc-editor.org/info/rfc8 | ||||
852"> | ||||
<front> | ||||
<title>RTP Stream Identifier Source Description (SDES)</title> | ||||
<author initials="A.B." surname="Roach" fullname="Adam Roach"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S" surname="Nandakumar" fullname="Suhas Nandakumar | ||||
"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="P" surname="Thatcher" fullname="Peter Thatcher"> | ||||
<organization/> | ||||
</author> | ||||
<date month="April" year="2020"/> | ||||
</front> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8852"/> | ||||
<seriesInfo name="RFC" value="8852"/> | ||||
</reference> | ||||
<?rfc include='reference.RFC.7741'?> | <!-- draft-ietf-mmusic-sdp-mux-attributes-17 in C238 --> | |||
<reference anchor="RFC8859" target="https://www.rfc-editor.org/info/rfc8 | ||||
859"> | ||||
<front> | ||||
<title>A Framework for SDP Attributes when Multiplexing</title> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8859"/> | ||||
<seriesInfo name="RFC" value="8859"/> | ||||
<author initials="S" surname="Nandakumar" fullname="Suhas Nandakumar | ||||
"> | ||||
<organization/> | ||||
</author> | ||||
<date month="April" year="2020"/> | ||||
</front> | ||||
</reference> | ||||
<?rfc include='reference.RFC.8108'?> | <!-- draft-ietf-mmusic-sdp-bundle-negotiation in C238 --> | |||
<reference anchor="RFC8843" target="https://www.rfc-editor.org/info/rfc8 | ||||
843"> | ||||
<front> | ||||
<title>Negotiating Media Multiplexing Using the Session Description | ||||
Protocol (SDP)</title> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8843"/> | ||||
<seriesInfo name="RFC" value="8843"/> | ||||
<author initials="C" surname="Holmberg" fullname=""> | ||||
<organization/> | ||||
</author> | ||||
<author initials="H" surname="Alvestrand" fullname=""> | ||||
<organization/> | ||||
</author> | ||||
<author initials="C" surname="Jennings" fullname=""> | ||||
<organization/> | ||||
</author> | ||||
<date month="April" year="2020"/> | ||||
</front> | ||||
</reference> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.2198.xml"/> | ||||
<?rfc include='reference.RFC.8285'?> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
ence.RFC.3389.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4588.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4733.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5104.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5109.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5583.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.6184.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.6190.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.6236.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.6464.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7104.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7656.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7667.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7741.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8108.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
7941.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8627.xml"/> | ||||
<?rfc include='reference.I-D.ietf-avtcore-multiplex-guidelines'?> | <!-- draft-ietf-avtcore-multiplex-guidelines-11 in IESG Evaluation --> | |||
<xi:include | ||||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-a | ||||
vtcore-multiplex-guidelines.xml"/> | ||||
<?rfc include='reference.I-D.ietf-payload-flexible-fec-scheme'?> | </references> | |||
</references> | </references> | |||
<section anchor="sec-requirements" numbered="true" toc="default"> | ||||
<section anchor="sec-requirements" title="Requirements"> | <name>Requirements</name> | |||
<t>The following requirements are met by the defined solution to support | <t>The following requirements are met by the defined solution to support | |||
the <xref target="sec-use-cases">use cases</xref>:<list style="hanging"> | the <xref target="sec-use-cases" format="default">use cases</xref>:</t> | |||
<t anchor="req-1" hangText="REQ-1:">Identification:<list | ||||
style="hanging"> | ||||
<t anchor="req-1.1" hangText="REQ-1.1:">It must be possible to | ||||
identify a set of simulcasted RTP streams as originating from | ||||
the same media source in SDP signaling.</t> | ||||
<t anchor="req-1.2" hangText="REQ-1.2:">An RTP endpoint must be | <dl newline="false" spacing="normal"> | |||
capable of identifying the simulcast stream a received RTP | <dt>REQ-1:</dt> | |||
<dd anchor="req-1"> | ||||
<t>Identification:</t> | ||||
<dl newline="false" spacing="normal"> | ||||
<dt>REQ-1.1:</dt> | ||||
<dd anchor="req-1.1">It must be possible to | ||||
identify a set of simulcasted RTP streams as originating from | ||||
the same media source in SDP signaling.</dd> | ||||
<dt>REQ-1.2:</dt> | ||||
<dd anchor="req-1.2">An RTP endpoint must be | ||||
capable of identifying the simulcast stream that a received RTP | ||||
stream is associated with, knowing the content of the SDP | stream is associated with, knowing the content of the SDP | |||
signalling.</t> | signaling.</dd> | |||
</list></t> | </dl> | |||
</dd> | ||||
<t anchor="req-2" hangText="REQ-2:">Transport usage. The solution | <dt>REQ-2:</dt> | |||
must work when using:<list style="hanging"> | <dd anchor="req-2"> | |||
<t anchor="req-2.1" hangText="REQ-2.1:">Legacy SDP with separate | <t>Transport usage. The solution | |||
media transports per SDP media description.</t> | must work when using:</t> | |||
<dl newline="false" spacing="normal"> | ||||
<t anchor="req-2.2" hangText="REQ-2.2:"><xref | <dt>REQ-2.1:</dt> | |||
target="I-D.ietf-mmusic-sdp-bundle-negotiation">Bundled</xref> | <dd anchor="req-2.1">Legacy SDP with separate | |||
SDP media descriptions.</t> | media transports per SDP media description.</dd> | |||
</list></t> | <dt>REQ-2.2:</dt> | |||
<dd anchor="req-2.2"> | ||||
<t anchor="req-3" hangText="REQ-3:">Capability negotiation. It must | <xref target="RFC8843" format="default">Bundled</xref> | |||
be possible that:<list style="hanging"> | SDP media descriptions.</dd> | |||
<t anchor="req-3.1" hangText="REQ-3.1:">Sender can express | </dl> | |||
capability of sending simulcast.</t> | </dd> | |||
<t anchor="req-3.2" hangText="REQ-3.2:">Receiver can express | ||||
capability of receiving simulcast.</t> | ||||
<t anchor="req-3.3" hangText="REQ-3.3:">Sender can express | ||||
maximum number of simulcast streams that can be provided.</t> | ||||
<t anchor="req-3.4" hangText="REQ-3.4:">Receiver can express | ||||
maximum number of simulcast streams that can be received.</t> | ||||
<t anchor="req-3.5" hangText="REQ-3.5:">Sender can detail the | <dt>REQ-3:</dt> | |||
<dd anchor="req-3"> | ||||
<t>Capability negotiation. The | ||||
following must be possible:</t> | ||||
<dl newline="false" spacing="normal"> | ||||
<dt>REQ-3.1:</dt> | ||||
<dd anchor="req-3.1">The sender can express | ||||
capability of sending simulcast.</dd> | ||||
<dt>REQ-3.2:</dt> | ||||
<dd anchor="req-3.2">The receiver can express | ||||
capability of receiving simulcast.</dd> | ||||
<dt>REQ-3.3:</dt> | ||||
<dd anchor="req-3.3">The sender can express | ||||
the maximum number of simulcast streams that can be | ||||
provided.</dd> | ||||
<dt>REQ-3.4:</dt> | ||||
<dd anchor="req-3.4">The receiver can express the | ||||
maximum number of simulcast streams that can be received.</dd> | ||||
<dt>REQ-3.5:</dt> | ||||
<dd anchor="req-3.5">The sender can detail the | ||||
characteristics of the simulcast streams that can be | characteristics of the simulcast streams that can be | |||
provided.</t> | provided.</dd> | |||
<dt>REQ-3.6:</dt> | ||||
<t anchor="req-3.6" hangText="REQ-3.6:">Receiver can detail the | <dd anchor="req-3.6">The receiver can detail the | |||
characteristics of the simulcast streams that it prefers to | characteristics of the simulcast streams that it prefers to | |||
receive.</t> | receive.</dd> | |||
</list></t> | </dl> | |||
</dd> | ||||
<t anchor="req-4" hangText="REQ-4:">Distinguishing features. It must | <dt>REQ-4:</dt> | |||
<dd anchor="req-4">Distinguishing features. It must | ||||
be possible to have different simulcast streams use different codec | be possible to have different simulcast streams use different codec | |||
parameters, as can be expressed by SDP format values and RTP payload | parameters, as can be expressed by SDP format values and RTP payload | |||
types.</t> | types.</dd> | |||
<dt>REQ-5:</dt> | ||||
<t anchor="req-5" hangText="REQ-5:">Compatibility. It must be | <dd anchor="req-5"> | |||
<t>Compatibility. It must be | ||||
possible to use simulcast in combination with other RTP mechanisms | possible to use simulcast in combination with other RTP mechanisms | |||
that generate additional RTP streams:<list style="hanging"> | that generate additional RTP streams:</t> | |||
<t anchor="req-5.1" hangText="REQ-5.1:"><xref | <dl newline="false" spacing="normal"> | |||
target="RFC4588">RTP Retransmission</xref>.</t> | <dt>REQ-5.1:</dt> | |||
<dd anchor="req-5.1"> | ||||
<t anchor="req-5.2" hangText="REQ-5.2:"><xref | <xref target="RFC4588" format="default">RTP retransmission</xref>. | |||
target="RFC5109">RTP Forward Error Correction</xref>.</t> | </dd> | |||
<dt>REQ-5.2:</dt> | ||||
<t anchor="req-5.3" hangText="REQ-5.3:">Related payload types | <dd anchor="req-5.2"> | |||
such as audio Comfort Noise and/or DTMF.</t> | <xref target="RFC5109" format="default">RTP Forward Error Correcti | |||
on</xref>.</dd> | ||||
<t hangText="REQ-5.4:">A single simulcast stream can consist of | <dt>REQ-5.3:</dt> | |||
<dd anchor="req-5.3">Related payload types | ||||
such as audio Comfort Noise and/or DTMF.</dd> | ||||
<dt>REQ-5.4:</dt> | ||||
<dd>A single simulcast stream can consist of | ||||
multiple RTP streams, to support codecs where a dependent stream | multiple RTP streams, to support codecs where a dependent stream | |||
is dependent on a set of encoded and dependent streams, each | is dependent on a set of encoded and dependent streams, each | |||
potentially carried in their own RTP stream.</t> | potentially carried in their own RTP stream.</dd> | |||
</list></t> | </dl> | |||
</dd> | ||||
<t anchor="req-6" hangText="REQ-6:">Interoperability. The solution | <dt>REQ-6:</dt> | |||
must be possible to use in:<list style="hanging"> | <dd anchor="req-6"> | |||
<t anchor="req-6.1" hangText="REQ-6.1:">Interworking with | <t>Interoperability. The solution | |||
non-simulcast legacy clients using a single media source per | must be possible to use in:</t> | |||
media type.</t> | <dl newline="false" spacing="normal"> | |||
<dt>REQ-6.1:</dt> | ||||
<dd anchor="req-6.1">Interworking with | ||||
nonsimulcast legacy clients using a single media source per | ||||
media type.</dd> | ||||
<dt>REQ-6.2:</dt> | ||||
<dd anchor="req-6.2">WebRTC environment with | ||||
a single media source per SDP media description.</dd> | ||||
</dl> | ||||
</dd> | ||||
</dl> | ||||
<t anchor="req-6.2" hangText="REQ-6.2:">WebRTC environment with | </section> | |||
a single media source per SDP media description.</t> | <section anchor="sec-ack" numbered="false" toc="default"> | |||
</list></t> | <name>Acknowledgements</name> | |||
</list></t> | <t>The authors would like to thank <contact fullname="Bernard Aboba"/>, <c | |||
ontact | ||||
fullname="Thomas Belling"/>, <contact fullname="Roni Even"/>, <contact | ||||
fullname="Adam Roach"/>, <contact fullname="IƱaki Baz Castillo"/>, | ||||
<contact fullname="Paul Kyzivat"/>, and <contact fullname="Arun | ||||
Arunachalam"/> for the feedback they provided during the development of | ||||
this document.</t> | ||||
</section> | </section> | |||
<section title="Changes From Earlier Versions"> | <section anchor="sec-contributors" numbered="false" toc="default"> | |||
<t>NOTE TO RFC EDITOR: Please remove this section prior to | <name>Contributors</name> | |||
publication.</t> | ||||
<section title="Modifications Between WG Version -13 and -14"> | ||||
<t><list style="symbols"> | ||||
<t>c= and t= line order corrected in SDP examples</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -12 and -13"> | ||||
<t><list style="symbols"> | ||||
<t>Examples corrected to follow RID ABNF</t> | ||||
<t>Example <xref target="fig-ms-offer"/> now comments on priority | ||||
for second media source.</t> | ||||
<t>Clarified a SHOULD limitation.</t> | ||||
<t>Added urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id in | ||||
examples with RTX.</t> | ||||
<t>ABNF now uses RFC 7405 to indicate case sensitivity</t> | ||||
<t>Various minor editorials and nits.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -11 and -12"> | ||||
<t><list style="symbols"> | ||||
<t>Modified Normative statement regarding RTP stream duplication | ||||
in Section 5.2.</t> | ||||
<t>Clarified assumption about use of congestion control by | ||||
applications.</t> | ||||
<t>Changed to use RFC 8174 boilerplate instead of RFC 2119.</t> | ||||
<t>Clarified explanation of syntax for simulcast attribute in | ||||
Section 4.</t> | ||||
<t>Editorial clarification in Section 5.2 and 5.3.2.</t> | ||||
<t>Various minor editorials and nits.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -10 and -11"> | ||||
<t><list style="symbols"> | ||||
<t>Added new SDP example section on Simulcast and Redundancy, | ||||
including both RED (RFC2198), RTP RTX (RFC4588), and FEC | ||||
(draft-ietf-payload-flexible-fec-scheme).</t> | ||||
<t>Removed restriction that "related" payload formats in an RTP | ||||
stream (such as CN and DTMF) must not have their own rid-id, since | ||||
there is no reason to forbid this and corresponding clarification | ||||
is made in draft-ietf-mmusic-rid.</t> | ||||
<t>Removed any mention of source-specific signaling and the | ||||
reference to RFC5576, since draft-ietf-mmusic-rid is not defined | ||||
for source-specific signaling.</t> | ||||
<t>Changed some SDP examples to use a=rid restrictions instead of | ||||
a=imageattr.</t> | ||||
<t>Changed reference from the obsoleted RFC 5285 to RFC 8285.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -09 and -10"> | ||||
<t><list style="symbols"> | ||||
<t>Amended overview section with a bit more explanation on the | ||||
examples, and added an rid-id alternative for one of the | ||||
streams.</t> | ||||
<t>Removed SCID also from the Terminology section, which was | ||||
forgotten in -09 when changing SCID to rid-id.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -08 and -09"> | ||||
<t><list style="symbols"> | ||||
<t>Changed SCID to rid-id, to align with ietf-draft-mmusic-rid | ||||
naming.</t> | ||||
<t>Changed Overview to be based on examples and shortened it.</t> | ||||
<t>Changed semantics of initially paused rid-id in modified SDP | ||||
offers from requiring it to follow actual RFC 7728 pause state to | ||||
an informational offerer's opinion at the time of offer creation, | ||||
not in any way overriding or amending RFC 7728 signaling.</t> | ||||
<t>Replaced text on ignoring all but the first of multiple | ||||
"a=simulcast" lines in a media description with mandating that at | ||||
most one "a=simulcast" line is included.</t> | ||||
<t>Clarified with a note that, for the case it is clear from the | ||||
SDP that RTP PT uniquely maps to RtpStreamId, an RTP receiver can | ||||
use RTP PT to relate simulcast streams.</t> | ||||
<t>Moved Section 4 Requirements to become Appendix A.</t> | ||||
<t>Editorial corrections and clarifications.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -07 and -08"> | ||||
<t><list style="symbols"> | ||||
<t>Correcting syntax of SDP examples in section 6.6.1, as found by | ||||
Inaki Baz Castillo.</t> | ||||
<t>Changing ABNF to only define the sc-value, not the SDP | ||||
attribute itself, as suggested by Paul Kyzivat.</t> | ||||
<t>Changing I-D reference to newly published RFC 8108.</t> | ||||
<t>Adding list of modifications between -06 and -07.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -06 and -07"> | ||||
<t><list style="symbols"> | ||||
<t>A scope clarification, as result of the discussion with Roni | ||||
Even.</t> | ||||
<t>A reformulation of the identification requirements for | ||||
simulcast stream.</t> | ||||
<t>Correcting the statement related to source specific signalling | ||||
(RFC 5576) to address Roni Even's comment.</t> | ||||
<t>Update of the last paragraph in Section 6.2 regarding simulcast | ||||
stream differences as well as forbidding multiple instances of the | ||||
same SCID within a single a=simulcast line.</t> | ||||
<t>Removal of note in Section 6.4 as result of issue raised by | ||||
Roni Even.</t> | ||||
<t>Use of "m=" has been changed to media description and a few | ||||
other editorial improvements and clarifications.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -05 and -06"> | ||||
<t><list style="symbols"> | ||||
<t>Added section on RTP Aspects</t> | ||||
<t>Added a requirement (5-4) on that capability exchange must be | ||||
capable of handling multi RTP stream cases.</t> | ||||
<t>Added extmap attribute also on first signalling example as it | ||||
is a recommended to use mechanism.</t> | ||||
<t>Clarified the definition of the simulcast attribute and how | ||||
simulcast streams relates to simulcast formats and SCIDs.</t> | ||||
<t>Updated References list and moved around some references | ||||
between informative and normative categories.</t> | ||||
<t>Editorial improvements and corrections.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -04 and -05"> | ||||
<t><list style="symbols"> | ||||
<t>Aligned with recent changes in draft-ietf-mmusic-rid and | ||||
draft-ietf-avtext-rid.</t> | ||||
<t>Modified the SDP offer/answer section to follow the generally | ||||
accepted structure, also adding a brief text on modifying the | ||||
session that is aligned with draft-ietf-mmusic-rid.</t> | ||||
<t>Improved text around simulcast stream identification (as | ||||
opposed to the simulcast stream itself) to consistently use the | ||||
acronym SCID and defined that in the Terminology section.</t> | ||||
<t>Changed references for RTP-level pause/resume and VP8 payload | ||||
format that are now published as RFC.</t> | ||||
<t>Improved IANA registration text.</t> | ||||
<t>Removed unused reference to | ||||
draft-ietf-payload-flexible-fec-scheme.</t> | ||||
<t>Editorial improvements and corrections.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -03 and -04"> | ||||
<t><list style="symbols"> | ||||
<t>Changed to only use RID identification, as was consensus during | ||||
IETF 94.</t> | ||||
<t>ABNF improvements.</t> | ||||
<t>Clarified offer-answer rules for initially paused streams.</t> | ||||
<t>Changed references for RTP topologies and RTP taxonomy | ||||
documents that are now published as RFC.</t> | ||||
<t>Added reference to the new RID draft in AVTEXT.</t> | ||||
<t>Re-structured section 6 to provide an easy reference by the | ||||
updated IANA section.</t> | ||||
<t>Added a sub-section 7.1 with a discussion of bitrate | ||||
adaptation.</t> | ||||
<t>Editorial improvements.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -02 and -03"> | ||||
<t><list style="symbols"> | ||||
<t>Removed text on multicast / broadcast from use cases, since it | ||||
is not supported by the solution.</t> | ||||
<t>Removed explicit references to unified plan draft.</t> | ||||
<t>Added possibility to initiate simulcast streams in paused | ||||
mode.</t> | ||||
<t>Enabled an offerer to offer multiple stream identification (pt | ||||
or rid) methods and have the answerer choose which to use.</t> | ||||
<t>Added a preference indication also in send direction | ||||
offers.</t> | ||||
<t>Added a section on limitations of the current proposal, | ||||
including identification method specific limitations.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -01 and -02"> | ||||
<t><list style="symbols"> | ||||
<t>Relying on the new RID solution for codec constraints and | ||||
configuration identification. This has resulted in changes in | ||||
syntax to identify if pt or RID is used to describe the simulcast | ||||
stream.</t> | ||||
<t>Renamed simulcast version and simulcast version alternative to | ||||
simulcast stream and simulcast format respectively, and improved | ||||
definitions for them.</t> | ||||
<t>Clarification that it is possible to switch between simulcast | ||||
version alternatives, but that only a single one be used at any | ||||
point in time.</t> | ||||
<t>Changed the definition so that ordering of simulcast formats | ||||
for a specific simulcast stream do have a preference order.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between WG Version -00 and -01"> | ||||
<t><list style="symbols"> | ||||
<t>No changes. Only preventing expiry.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Modifications Between Individual Version -00 and WG Versio | <t><contact fullname="Morgan Lindqvist"/> and <contact fullname="Fredrik | |||
n -00"> | Jansson"/>, both from Ericsson, have contributed with important material | |||
<t><list style="symbols"> | to the first draft versions of this document. <contact fullname="Robert | |||
<t>Added this appendix.</t> | Hanton"/> and <contact fullname="Cullen Jennings"/> from Cisco, <contact | |||
</list></t> | fullname="Peter Thatcher"/> from Google, and <contact fullname="Adam | |||
</section> | Roach"/> from Mozilla contributed significantly to subsequent | |||
versions.</t> | ||||
</section> | </section> | |||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 306 change blocks. | ||||
1136 lines changed or deleted | 1015 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/ |