rfc8860xml2.original.xml | rfc8860.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"?> | docName="draft-ietf-avtcore-multi-media-rtp-session-13" number="8860" | |||
<?rfc tocindent="yes"?> | ipr="trust200902" updates="3550, 3551" obsoletes="" submissionType="IETF" | |||
<?rfc symrefs="yes"?> | consensus="true" xml:lang="en" tocInclude="true" tocDepth="3" symRefs="true | |||
<?rfc sortrefs="yes"?> | " sortRefs="true" version="3"> | |||
<?rfc comments="yes"?> | <!-- xml2rfc v2v3 conversion 2.35.0 --> | |||
<?rfc inline="yes"?> | ||||
<?rfc compact="yes"?> | ||||
<?rfc subcompact="no"?> | ||||
<rfc category="std" docName="draft-ietf-avtcore-multi-media-rtp-session-13" | ||||
ipr="trust200902" updates="3550, 3551"> | ||||
<front> | <front> | |||
<title abbrev="Multiple Media Types in an RTP Session">Sending Multiple | <title abbrev="Multiple Media Types in an RTP Session">Sending Multiple | |||
Types of Media in a Single RTP Session</title> | Types of Media in a Single RTP Session</title> | |||
<seriesInfo name="RFC" value="8860"/> | ||||
<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>Farogatan 6</street> | <street>Torshamnsgatan 23</street> | |||
<city>Stockholm</city> | ||||
<city>SE-164 80 Kista</city> | <code>164 80</code> | |||
<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="Colin Perkins" initials="C. " surname="Perkins"> | <author fullname="Colin Perkins" initials="C. " surname="Perkins"> | |||
<organization>University of Glasgow</organization> | <organization>University of Glasgow</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>School of Computing Science</street> | <street>School of Computing Science</street> | |||
<city>Glasgow</city> | <city>Glasgow</city> | |||
<code>G12 8QQ</code> | <code>G12 8QQ</code> | |||
<country>United Kingdom</country> | <country>United Kingdom</country> | |||
</postal> | </postal> | |||
<email>csp@csperkins.org</email> | <email>csp@csperkins.org</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Jonathan Lennox" initials="J." surname="Lennox"> | <author fullname="Jonathan Lennox" initials="J." surname="Lennox"> | |||
<organization abbrev="Vidyo">Vidyo, Inc.</organization> | <organization abbrev="8x8 / Jitsi">8x8, Inc. / Jitsi</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>433 Hackensack Avenue</street> | <city>Jersey City</city> | |||
<street>Seventh Floor</street> | ||||
<city>Hackensack</city> | ||||
<region>NJ</region> | <region>NJ</region> | |||
<code>07302</code> | ||||
<code>07601</code> | <country>United States of America</country> | |||
<country>US</country> | ||||
</postal> | </postal> | |||
<email>jonathan.lennox@8x8.com</email> | ||||
<email>jonathan@vidyo.com</email> | ||||
</address> | </address> | |||
</author> | </author> | |||
<date month="January" year="2021"/> | ||||
<date day="18" month="December" year="2015"/> | <keyword>Real-time</keyword> | |||
<keyword>Multiplexing</keyword> | ||||
<workgroup>AVTCORE WG</workgroup> | <keyword>Bundle</keyword> | |||
<abstract> | <abstract> | |||
<t>This document specifies how an RTP session can contain RTP Streams | <t>This document specifies how an RTP session can contain RTP streams | |||
with media from multiple media types such as audio, video, and text. | with media from multiple media types such as audio, video, and text. | |||
This has been restricted by the RTP Specification, and thus this | This has been restricted by the RTP specifications (RFCs 3550 and 3551), a | |||
document updates RFC 3550 and RFC 3551 to enable this behaviour for | nd thus this | |||
document updates RFCs 3550 and 3551 to enable this behaviour for | ||||
applications that satisfy the applicability for using multiple media | applications that satisfy the applicability for using multiple media | |||
types in a single RTP session.</t> | types in a single RTP session.</t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section title="Introduction"> | <section numbered="true" toc="default"> | |||
<t>The Real-time Transport Protocol <xref target="RFC3550"/> was | <name>Introduction</name> | |||
<t>The Real-time Transport Protocol <xref target="RFC3550" format="default | ||||
"/> was | ||||
designed to use separate RTP sessions to transport different types of | designed to use separate RTP sessions to transport different types of | |||
media. This implies that different transport layer flows are used for | media. This implies that different transport-layer flows are used for | |||
different RTP streams. For example, a video conferencing application | different RTP streams. For example, a video conferencing application | |||
might send audio and video traffic RTP flows on separate UDP ports. With | might send audio and video traffic RTP flows on separate UDP ports. With | |||
increased use of network address/port translation, firewalls, and other | increased use of network address/port translation, firewalls, and other | |||
middleboxes it is, however, becoming difficult to establish multiple | middleboxes, it is, however, becoming difficult to establish multiple | |||
transport layer flows between endpoints. Hence, there is pressure to | transport-layer flows between endpoints. Hence, there is pressure to | |||
reduce the number of concurrent transport flows used by RTP | reduce the number of concurrent transport flows used by RTP | |||
applications.</t> | applications.</t> | |||
<t>This memo updates <xref target="RFC3550" format="default"/> and <xref t | ||||
<t>This memo updates <xref target="RFC3550"/> and <xref | arget="RFC3551" format="default"/> to allow multiple media types to be sent in a | |||
target="RFC3551"/> to allow multiple media types to be sent in a single | single | |||
RTP session in certain cases, thereby reducing the number of transport | RTP session in certain cases, thereby reducing the number of transport-lay | |||
layer flows that are needed. It makes no changes to RTP behaviour when | er flows that are needed. It makes no changes to RTP behaviour when | |||
using multiple RTP streams containing media of the same type (e.g., | using multiple RTP streams containing media of the same type (e.g., | |||
multiple audio streams or multiple video streams) in a single RTP | multiple audio streams or multiple video streams) in a single RTP | |||
session. However <xref target="I-D.ietf-avtcore-rtp-multi-stream"/> | session. However, <xref target="RFC8108" format="default"/> | |||
provides important clarifications to RTP behaviour in that case.</t> | provides important clarifications to RTP behaviour in that case.</t> | |||
<t>This memo is structured as follows. <xref target="sec_defn" format="def | ||||
<t>This memo is structured as follows. <xref target="sec:defn"/> defines | ault"/> defines | |||
terminology. <xref target="sec:background"/> further describes the | terminology. <xref target="sec_background" format="default"/> further desc | |||
background to, and motivation for, this memo and <xref | ribes the | |||
target="sec:applicability"/> describes the scenarios where this memo is | background to, and motivation for, this memo; <xref target="sec_applicabil | |||
applicable. <xref target="sec:base"/> discusses issues arising from the | ity" format="default"/> describes the scenarios where this memo is | |||
base RTP and RTCP specification when using multiple types of media in a | applicable. <xref target="sec_base" format="default"/> discusses issues ar | |||
single RTP session, while <xref target="sec:extn"/> considers the impact | ising from the | |||
of RTP extensions. We discuss signalling in <xref target="sec:sig"/>. | base RTP and RTP Control Protocol (RTCP) specifications <xref | |||
Finally, security considerations are discussed in <xref | target="RFC3550"/> <xref target="RFC3551"/> when using multiple types of m | |||
target="Security"/>.</t> | edia in a | |||
single RTP session, while <xref target="sec_extn" format="default"/> consi | ||||
ders the impact | ||||
of RTP extensions. We discuss signalling in <xref target="sec_sig" format= | ||||
"default"/>. | ||||
Finally, security considerations are discussed in <xref target="Security" | ||||
format="default"/>.</t> | ||||
</section> | </section> | |||
<section anchor="sec_defn" numbered="true" toc="default"> | ||||
<section anchor="sec:defn" title="Terminology"> | <name>Terminology</name> | |||
<t>The terms Encoded Stream, Endpoint, Media Source, RTP Session, and | <t>The terms "encoded stream", "endpoint", "media source", "RTP session", | |||
RTP Stream are used as defined in <xref target="RFC7656"/>. We also | and | |||
"RTP stream" are used as defined in <xref target="RFC7656" format="default | ||||
"/>. We also | ||||
define the following terms:</t> | define the following terms:</t> | |||
<dl newline="false" spacing="normal"> | ||||
<t><list style="hanging"> | <dt>Media Type:</dt> | |||
<t hangText="Media Type:">The general type of media data used by a | <dd>The general type of media data used by a | |||
real-time application. The media type corresponds to the value used | real-time application. The media type corresponds to the value used | |||
in the <media> field of an SDP m= line. The media types | in the <media> field of a Session Description Protocol (SDP) | |||
"m=" line. The media types | ||||
defined at the time of this writing are "audio", "video", "text", | defined at the time of this writing are "audio", "video", "text", | |||
"image", "application", and "message". <xref target="RFC4566"/> | "image", "application", and "message" <xref target="RFC4566" format="d | |||
<xref target="RFC6466"/></t> | efault"/> | |||
<xref target="RFC6466" format="default"/>.</dd> | ||||
<t hangText="Quality of Service (QoS):">Network mechanisms that are | <dt>Quality of Service (QoS):</dt> | |||
<dd>Network mechanisms that are | ||||
intended to ensure that the packets within a flow or with a specific | intended to ensure that the packets within a flow or with a specific | |||
marking are transported with certain properties.</t> | marking are transported with certain properties.</dd> | |||
</list></t> | </dl> | |||
<t> | ||||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14> | |||
"OPTIONAL" in this document are to be interpreted as described in <xref | ", | |||
target="RFC2119"/>.</t> | "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
"<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"/> <xref | ||||
target="RFC8174"/> when, and only when, they appear in all capitals, as | ||||
shown here. | ||||
</t> | ||||
</section> | </section> | |||
<section anchor="sec_background" numbered="true" toc="default"> | ||||
<section anchor="sec:background" title="Background and Motivation"> | <name>Background and Motivation</name> | |||
<t>RTP was designed to support multimedia sessions, containing multiple | <t>RTP was designed to support multimedia sessions, containing multiple | |||
types of media sent simultaneously, by using multiple transport layer | types of media sent simultaneously, by using multiple transport-layer | |||
flows. The existence of network address translators, firewalls, and | flows. The existence of network address translators, firewalls, and | |||
other middleboxes complicates this, however, since a mechanism is needed | other middleboxes complicates this, however, since a mechanism is needed | |||
to ensure that all the transport layer flows needed by the application | to ensure that all the transport-layer flows needed by the application | |||
can be established. This has three consequences: <list style="numbers"> | can be established. This has three consequences: </t> | |||
<t>increased delay to establish a complete session, since each of | <ol spacing="normal" type="1"> | |||
the transport layer flows needs to be negotiated and | <li>increased delay to establish a complete session, since each of | |||
established;</t> | the transport-layer flows needs to be negotiated and | |||
established;</li> | ||||
<t>increased state and resource consumption in the middleboxes that | <li>increased state and resource consumption in the middleboxes that | |||
can lead to unexpected behaviour when middlebox resource limits are | can lead to unexpected behaviour when middlebox resource limits are | |||
reached; and</t> | reached; and</li> | |||
<li>increased risk that a subset of the transport-layer flows will | ||||
<t>increased risk that a subset of the transport layer flows will | ||||
fail to be established, thus preventing the application from | fail to be established, thus preventing the application from | |||
communicating.</t> | communicating.</li> | |||
</list></t> | </ol> | |||
<t>Using fewer transport-layer flows can hence be seen to reduce the | ||||
<t>Using fewer transport layer flows can hence be seen to reduce the | risk of communication failure and can lead to improved reliability and | |||
risk of communication failure, and can lead to improved reliability and | ||||
performance.</t> | performance.</t> | |||
<t>One of the benefits of using multiple transport-layer flows is that | ||||
<t>One of the benefits of using multiple transport layer flows is that | it makes it easy to use network-layer QoS | |||
it makes it easy to use network layer quality of service (QoS) | ||||
mechanisms to give differentiated performance for different flows. | mechanisms to give differentiated performance for different flows. | |||
However, we note that many RTP-using application don't use network QoS | However, we note that many applications that use RTP don't use network QoS | |||
features, and don't expect or desire any separation in network treatment | features and don't expect or desire any separation in network treatment | |||
of their media packets, independent of whether they are audio, video or | of their media packets, independent of whether they are audio, video, or | |||
text. When an application has no such desire, it doesn't need to provide | text. When an application has no such desire, it doesn't need to provide | |||
a transport flow structure that simplifies flow based QoS.</t> | a transport flow structure that simplifies flow-based QoS.</t> | |||
<t>Given the above issues, it might seem appropriate for RTP-based | <t>Given the above issues, it might seem appropriate for RTP-based | |||
applications to send all their RTP streams bundled into one RTP session, | applications to send all their RTP streams bundled into one RTP session, | |||
running over a single transport layer flow. However, this is prohibited | running over a single transport-layer flow. However, this is prohibited | |||
by the RTP specification, because the design of RTP makes certain | by the RTP specifications <xref target="RFC3550"/> <xref target="RFC3551"/ | |||
>, because the design of RTP makes certain | ||||
assumptions that can be incompatible with sending multiple media types | assumptions that can be incompatible with sending multiple media types | |||
in a single RTP session. Specifically, the RTP control protocol (RTCP) | in a single RTP session. Specifically, the RTCP | |||
timing rules assume that all RTP media flows in a single RTP session | timing rules assume that all RTP media flows in a single RTP session | |||
have broadly similar RTCP reporting and feedback requirements, which can | have broadly similar RTCP reporting and feedback requirements, which can | |||
be problematic when different types of media are multiplexed together. | be problematic when different types of media are multiplexed together. | |||
Various RTP extensions also make assumptions about SSRC use and RTCP | Various RTP extensions also make assumptions about Synchronisation | |||
Source (SSRC) use and RTCP | ||||
reporting that are incompatible with sending different media types in a | reporting that are incompatible with sending different media types in a | |||
single RTP session.</t> | single RTP session.</t> | |||
<t>This memo updates <xref target="RFC3550" format="default"/> and <xref t | ||||
<t>This memo updates <xref target="RFC3550"/> and <xref | arget="RFC3551" format="default"/> to allow RTP sessions to contain more than on | |||
target="RFC3551"/> to allow RTP sessions to contain more than one media | e media | |||
type in certain circumstances, and gives guidance on when it is safe to | type in certain circumstances and gives guidance on when it is safe to | |||
send multiple media types in a single RTP session.</t> | send multiple media types in a single RTP session.</t> | |||
</section> | </section> | |||
<section anchor="sec_applicability" numbered="true" toc="default"> | ||||
<section anchor="sec:applicability" title="Applicability"> | <name>Applicability</name> | |||
<t>This specification has limited applicability, and anyone intending to | <t>This specification has limited applicability, and anyone intending to | |||
use it needs to ensure that their application and use case meets the | use it needs to ensure that their application and use case meet the | |||
following criteria: <list style="hanging"> | following criteria: </t> | |||
<t hangText="Equal treatment of media:">The use of a single RTP | <dl newline="false" spacing="normal"> | |||
<dt>Equal treatment of media:</dt> | ||||
<dd>The use of a single RTP | ||||
session normally results in similar network treatment for all types | session normally results in similar network treatment for all types | |||
of media used within the session. Applications that require | of media used within the session. Applications that require | |||
significantly different network quality of service (QoS) or RTCP | significantly different network QoS or RTCP | |||
configuration for different RTP streams are better suited by sending | configuration for different RTP streams are better suited to sending | |||
those RTP streams in separate RTP session, using separate transport | those RTP streams in separate RTP sessions, using separate | |||
layer flows for each, since that gives greater flexibility. Further | transport-layer flows for each, since that method provides greater flex | |||
guidance on how to provide differential treatment for some media is | ibility. Further | |||
given in <xref target="I-D.ietf-avtcore-multiplex-guidelines"/> and | guidance on how to provide differential treatment for some media strea | |||
<xref target="RFC7657"/>.</t> | ms is | |||
given in <xref target="RFC8872" format="default"/> and | ||||
<t hangText="Compatible RTCP Behaviour:">The RTCP timing rules | <xref target="RFC7657" format="default"/>.</dd> | |||
<dt>Compatible RTCP behaviour:</dt> | ||||
<dd>The RTCP timing rules | ||||
enforce a single RTCP reporting interval for all participants in an | enforce a single RTCP reporting interval for all participants in an | |||
RTP session. Flows with very different media sending rate or RTCP | RTP session. Flows with very different media sending rates or RTCP | |||
feedback requirements cannot be multiplexed together, since this | feedback requirements cannot be multiplexed together, since this | |||
leads to either excessive or insufficient RTCP for some flows, | leads to either excessive or insufficient RTCP for some flows, | |||
depending on how the RTCP session bandwidth, and hence reporting | depending on how the RTCP session bandwidth, and hence the reporting | |||
interval, is configured. For example, it is likely infeasible to | interval, are configured. For example, it is likely infeasible to | |||
find a single RTCP configuration that simultaneously suits both a | find a single RTCP configuration that simultaneously suits both a | |||
low-rate audio flow with no feedback, and a high-quality video flow | low-rate audio flow with no feedback and a high-quality video flow | |||
with sophisticated RTCP-based feedback. Thus, combining these into a | with sophisticated RTCP-based feedback. Thus, combining these into a | |||
single RTP session is difficult and/or inadvisable.</t> | single RTP session is difficult and/or inadvisable.</dd> | |||
<dt>Signalled support:</dt> | ||||
<t hangText="Signalled Support:">The extensions defined in this memo | <dd>The extensions defined in this memo | |||
are not compatible with unmodified <xref | are not compatible with unmodified endpoints that are compatible | |||
target="RFC3550"/>-compatible endpoints. Their use requires | with <xref target="RFC3550" format="default"/>. Their use requires | |||
signalling and mutual agreement by all participants within an RTP | signalling and mutual agreement by all participants within an RTP | |||
session. This requirement can be a problem for signalling solutions | session. This requirement can be a problem for signalling solutions | |||
that can't negotiate with all participants. For declarative | that can't negotiate with all participants. For declarative | |||
signalling solutions, mandating that the session is using multiple | signalling solutions, mandating that the session use multiple | |||
media types in one RTP session can be a way of attempting to ensure | media types in one RTP session can be a way of attempting to ensure | |||
that all participants in the RTP session follow the requirement. | that all participants in the RTP session follow the requirement. | |||
However, for signalling solutions that lack methods for enforcing | However, for signalling solutions that lack methods for enforcing | |||
that a receiver supports a specific feature, this can still cause | a requirement that a receiver support a specific feature, this can sti | |||
issues.</t> | ll cause | |||
issues.</dd> | ||||
<t hangText="Consistent support for multiparty RTP sessions:">If it | <dt>Consistent support for multiparty RTP sessions:</dt> | |||
<dd><t>If it | ||||
is desired to send multiple types of media in a multiparty RTP | is desired to send multiple types of media in a multiparty RTP | |||
session, then all participants in that session need to support | session, then all participants in that session need to support | |||
sending multiple type of media in a single RTP session. It is not | sending multiple types of media in a single RTP session. It is not | |||
possible, in the general case, to implement a gateway that can | possible, in the general case, to implement a gateway that can | |||
interconnect an endpoint using multiple types of media sent using | interconnect an endpoint that uses multiple types of media sent using | |||
separate RTP sessions, with one or more endpoints that send multiple | separate RTP sessions with one or more endpoints that send multiple | |||
types of media in a single RTP session.</t> | types of media in a single RTP session.</t> | |||
<t>One reason for this is that the same SSRC value can safely be | <t>One reason for this is that the same SSRC value can safely be | |||
used for different streams in multiple RTP sessions, but when | used for different streams in multiple RTP sessions, but when | |||
collapsed to a single RTP session there is an SSRC collision. This | collapsed to a single RTP session there is an SSRC collision. This | |||
would not be an issue, since SSRC collision detection will resolve | would not be an issue, since SSRC collision detection will resolve | |||
the conflict, except that some RTP payload formats and extensions | the conflict, except that some RTP payload formats and extensions | |||
use matching SSRCs to identify related flows, and break when a | use matching SSRCs to identify related flows and will break when a | |||
single RTP session is used.</t> | single RTP session is used.</t> | |||
<t>A middlebox that remaps SSRC values when combining multiple RTP | <t>A middlebox that remaps SSRC values when combining multiple RTP | |||
sessions into one also needs to be aware of all possible RTCP packet | sessions into one also needs to be aware of all possible RTCP packet | |||
types that might be used, so that it can remap the SSRC values in | types that might be used, so that it can remap the SSRC values in | |||
those packets. This is impossible to do without restricting the set | those packets. This is impossible to do without restricting the set | |||
of RTCP packet types that can be used to those that are known by the | of RTCP packet types that can be used to those that are known by the | |||
middlebox. Such a middlebox might also have difficulty due to | middlebox. Such a middlebox might also have difficulty due to | |||
differences in configured RTCP bandwidth and other parameters | differences in configured RTCP bandwidth and other parameters | |||
between the RTP sessions.</t> | between the RTP sessions.</t> | |||
<t>Finally, the use of a middlebox that translates SSRC values can | <t>Finally, the use of a middlebox that translates SSRC values can | |||
negatively impact the possibility for loop detection, as SSRC/CSRC | negatively impact the possibility of loop detection, as SSRC/CSRC | |||
can't be used to detect the loops; instead some other RTP stream or | (Contributing Source) can't be used to detect the loops; instead, some | |||
media source identity name space that is common across all | other RTP stream or | |||
interconnect parts is needed.</t> | media source identity namespace that is common across all | |||
interconnected parts is needed.</t> | ||||
<t hangText="Ability to operate with limited payload type space:">An | </dd> | |||
<dt>Ability to operate with limited payload type space:</dt> | ||||
<dd>An | ||||
RTP session has only a single 7-bit payload type space for all its | RTP session has only a single 7-bit payload type space for all its | |||
payload type numbers. Some applications might find this space | payload type numbers. Some applications might find this space to be | |||
limiting when using different media types and RTP payload formats | limiting (i.e., overly restrictive) when using different media types a | |||
within a single RTP session.</t> | nd RTP payload formats | |||
within a single RTP session.</dd> | ||||
<t hangText="Avoids incompatible Extensions:">Some RTP and RTCP | <dt>Avoidance of incompatible extensions:</dt> | |||
<dd>Some RTP and RTCP | ||||
extensions rely on the existence of multiple RTP sessions and relate | extensions rely on the existence of multiple RTP sessions and relate | |||
RTP streams between sessions. Others report on particular media | RTP streams between sessions. Others report on particular media | |||
types, and cannot be used with other media types. Applications that | types and cannot be used with other media types. Applications that | |||
send multiple types of media into a single RTP session need to avoid | send multiple types of media into a single RTP session need to avoid | |||
such extensions.</t> | such extensions.</dd> | |||
</list></t> | </dl> | |||
</section> | </section> | |||
<section anchor="sec_base" numbered="true" toc="default"> | ||||
<section anchor="sec:base" | <name>Using Multiple Media Types in a Single RTP Session</name> | |||
title="Using Multiple Media Types in a Single RTP Session"> | ||||
<t>This section defines what needs to be done or avoided to make an RTP | <t>This section defines what needs to be done or avoided to make an RTP | |||
session with multiple media types function without issues.</t> | session with multiple media types function without issues.</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="Allowing Multiple Media Types in an RTP Session"> | <name>Allowing Multiple Media Types in an RTP Session</name> | |||
<t>Section 5.2 of <xref target="RFC3550">"RTP: A Transport Protocol | <t><xref target="RFC3550" sectionFormat="of" section="5.2"> | |||
for Real-Time Applications"</xref> states:<list style="empty"> | "RTP: A Transport Protocol for Real-Time Applications"</xref> states:</t> | |||
<t>For example, in a teleconference composed of audio and video | <blockquote> | |||
media encoded separately, each medium SHOULD be carried in a | <t>For example, in a teleconference composed of audio and video | |||
media encoded separately, each medium <bcp14>SHOULD</bcp14> be carried | ||||
in a | ||||
separate RTP session with its own destination transport | separate RTP session with its own destination transport | |||
address.</t> | address.</t> | |||
<t>Separate audio and video streams <bcp14>SHOULD NOT</bcp14> be carried in a | ||||
<t>Separate audio and video streams SHOULD NOT be carried in a | ||||
single RTP session and demultiplexed based on the payload type or | single RTP session and demultiplexed based on the payload type or | |||
SSRC fields.</t> | SSRC fields.</t> | |||
</list></t> | </blockquote> | |||
<t>This specification changes both of these sentences. The first | <t>This specification changes both of these sentences. The first | |||
sentence is changed to:<list style="empty"> | sentence is changed to:</t> | |||
<t>For example, in a teleconference composed of audio and video | <blockquote> | |||
media encoded separately, each medium SHOULD be carried in a | For example, in a teleconference composed of audio and video | |||
media encoded separately, each medium <bcp14>SHOULD</bcp14> be carri | ||||
ed in a | ||||
separate RTP session with its own destination transport address, | separate RTP session with its own destination transport address, | |||
unless specification [RFCXXXX] is followed and the application | unless the guidelines specified in [RFC8860] are followed and the ap | |||
meets the applicability constraints.</t> | plication | |||
</list></t> | meets the applicability constraints. | |||
</blockquote> | ||||
<t>The second sentence is changed to:<list style="empty"> | <t>The second sentence is changed to:</t> | |||
<t>Separate audio and video media sources SHOULD NOT be carried in | <blockquote> | |||
a single RTP session, unless the guidelines specified in [RFCXXXX] | Separate audio and video media sources <bcp14>SHOULD NOT</bcp14> be ca | |||
are followed.</t> | rried in | |||
</list></t> | a single RTP session, unless the guidelines specified in [RFC8860] | |||
are followed. | ||||
<t>Second paragraph of Section 6 in <xref target="RFC3551">RTP Profile | </blockquote> | |||
for Audio and Video Conferences with Minimal Control</xref> says:</t> | <t>The second paragraph of <xref target="RFC3551" sectionFormat="of" sec | |||
tion="6">"RTP Profile for Audio and Video Conferences with Minimal Control"</xre | ||||
<t><list style="empty"> | f> says:</t> | |||
<t>The payload types currently defined in this profile are | <blockquote> | |||
The payload types currently defined in this profile are | ||||
assigned to exactly one of three categories or media types: audio | assigned to exactly one of three categories or media types: audio | |||
only, video only and those combining audio and video. The media | only, video only and those combining audio and video. The media | |||
types are marked in Tables 4 and 5 as "A", "V" and "AV", | types are marked in Tables 4 and 5 as "A", "V" and "AV", | |||
respectively. Payload types of different media types SHALL NOT be | respectively. Payload types of different media types <bcp14>SHALL NO T</bcp14> be | |||
interleaved or multiplexed within a single RTP session, but | interleaved or multiplexed within a single RTP session, but | |||
multiple RTP sessions MAY be used in parallel to send multiple | multiple RTP sessions <bcp14>MAY</bcp14> be used in parallel to send | |||
media types. An RTP source MAY change payload types within the | multiple | |||
media types. An RTP source <bcp14>MAY</bcp14> change payload types w | ||||
ithin the | ||||
same media type during a session. See the section "Multiplexing | same media type during a session. See the section "Multiplexing | |||
RTP Sessions" of RFC 3550 for additional explanation.</t> | RTP Sessions" of RFC 3550 for additional explanation. | |||
</list>This specification's purpose is to override that existing | </blockquote> | |||
SHALL NOT under certain conditions. Thus this sentence also has to be | <t>This specification's purpose is to override the above-listed | |||
changed to allow for multiple media type's payload types in the same | "<bcp14>SHALL NOT</bcp14>" under certain conditions. Thus, this sen | |||
session. The sentence containing "SHALL NOT" in the above paragraph is | tence also has to be | |||
changed to:<list style="empty"> | changed to allow for multiple media types' payload types in the same | |||
<t>Payload types of different media types SHALL NOT be interleaved | session. The sentence containing "<bcp14>SHALL NOT</bcp14>" in the above | |||
or multiplexed within a single RTP session unless [RFCXXXX] is | paragraph is | |||
used, and the application conforms to the applicability | changed to:</t> | |||
constraints. Multiple RTP sessions MAY be used in parallel to send | <blockquote> | |||
multiple media types.</t> | Payload types of different media types <bcp14>SHALL NOT</bcp14> be int | |||
</list></t> | erleaved | |||
or multiplexed within a single RTP session unless [RFC8860] is | ||||
<t>RFC-Editor Note: Please replace RFCXXXX with the RFC number of this | used and the application conforms to the applicability | |||
specification when assigned.</t> | constraints. Multiple RTP sessions <bcp14>MAY</bcp14> be used in par | |||
allel to send | ||||
multiple media types. | ||||
</blockquote> | ||||
</section> | </section> | |||
<section anchor="sec_demuxing" numbered="true" toc="default"> | ||||
<section anchor="sec:demuxing" | <name>Demultiplexing Media Types within an RTP Session</name> | |||
title="Demultiplexing media types within an RTP session"> | <t>When receiving packets from a transport-layer flow, an endpoint | |||
<t>When receiving packets from a transport layer flow, an endpoint | will first separate the RTP and RTCP packets from the non-RTP packets | |||
will first separate the RTP and RTCP packets from the non-RTP packets, | ||||
and pass them to the RTP/RTCP protocol handler. The RTP and RTCP | and pass them to the RTP/RTCP protocol handler. The RTP and RTCP | |||
packets are then demultiplexed based on their SSRC into the different | packets are then demultiplexed into the different | |||
RTP streams. For each RTP stream, incoming RTCP packets are processed, | RTP streams based on their SSRC. For each RTP stream, incoming RTCP pack | |||
ets are processed, | ||||
and the RTP payload type is used to select the appropriate media | and the RTP payload type is used to select the appropriate media | |||
decoder. This process remains the same irrespective of whether | decoder. This process remains the same irrespective of whether | |||
multiple media types are sent in a single RTP session or not.</t> | multiple media types are sent in a single RTP session or not.</t> | |||
<t>As explained below, it is important to note that the RTP payload | <t>As explained below, it is important to note that the RTP payload | |||
type is never used to distinguish RTP streams. The RTP packets are | type is never used to distinguish RTP streams. The RTP packets are | |||
demultiplexed into RTP streams based on their SSRC, then the RTP | demultiplexed into RTP streams based on their SSRC; the RTP | |||
payload type is used to select the correct media decoding pathway for | payload type is then used to select the correct media-decoding pathway f | |||
or | ||||
each RTP stream.</t> | each RTP stream.</t> | |||
</section> | </section> | |||
<section anchor="sec-source-restrcitctions" numbered="true" toc="default"> | ||||
<section anchor="sec-source-restrcitctions" | <name>Per-SSRC Media Type Restrictions</name> | |||
title="Per-SSRC Media Type Restrictions"> | ||||
<t>An SSRC in an RTP session can change between media formats of the | <t>An SSRC in an RTP session can change between media formats of the | |||
same type, subject to certain restrictions <xref target="RFC7160"/>, | same type, subject to certain restrictions <xref target="RFC7160" format | |||
but MUST NOT change media type during its lifetime. For example, an | ="default"/>, | |||
SSRC can change between different audio formats, but cannot start | but <bcp14>MUST NOT</bcp14> change its media type during its lifetime. F | |||
sending audio then change to sending video. The lifetime of an SSRC | or example, an | |||
ends when an RTCP BYE packet for that SSRC is sent, or when it ceases | SSRC can change between different audio formats, but it cannot start | |||
sending audio and then change to sending video. The lifetime of an SSRC | ||||
ends when an RTCP BYE packet for that SSRC is sent or when it ceases | ||||
transmission for long enough that it times out for the other | transmission for long enough that it times out for the other | |||
participants in the session.</t> | participants in the session.</t> | |||
<t>The main motivation is that a given SSRC has its own RTP timestamp | <t>The main motivation is that a given SSRC has its own RTP timestamp | |||
and sequence number spaces. The same way that you can't send two | and sequence number spaces. The same way that you can't send two | |||
encoded streams of audio with the same SSRC, you can't send one | encoded streams of audio with the same SSRC, you can't send one | |||
encoded audio and one encoded video stream with the same SSRC. Each | encoded audio and one encoded video stream with the same SSRC. Each | |||
encoded stream when made into an RTP stream needs to have the sole | encoded stream, when made into an RTP stream, needs to have sole | |||
control over the sequence number and timestamp space. If not, one | control over the sequence number and timestamp space. If not, one | |||
would not be able to detect packet loss for that particular encoded | would not be able to detect packet loss for that particular encoded | |||
stream. Nor can one easily determine which clock rate a particular | stream, nor could one easily determine which clock rate a particular | |||
SSRCs timestamp will increase with. For additional arguments why RTP | SSRC's timestamp will increase with. For additional arguments regarding | |||
payload type based multiplexing of multiple media sources doesn't | why multiplexing of multiple media sources that is based on RTP payload t | |||
work, see <xref target="I-D.ietf-avtcore-multiplex-guidelines"/>.</t> | ype doesn't | |||
work, see <xref target="RFC8872" format="default"/>.</t> | ||||
<t>Within an RTP session where multiple media types have been | <t>Within an RTP session where multiple media types have been | |||
configured for use, an SSRC can only send one type of media during its | configured for use, an SSRC can only send one type of media during its | |||
lifetime (i.e., it can switch between different audio codecs, since | lifetime (i.e., it can switch between different audio codecs, since | |||
those are both the same type of media, but cannot switch between audio | those are both the same type of media, but it cannot switch between audi | |||
and video). Different SSRCs MUST be used for the different media | o | |||
and video). Different SSRCs <bcp14>MUST</bcp14> be used for the differen | ||||
t media | ||||
sources, the same way multiple media sources of the same media type | sources, the same way multiple media sources of the same media type | |||
already have to do. The payload type will inform a receiver which | already have to do. The payload type will inform a receiver which | |||
media type the SSRC is being used for. Thus the payload type MUST be | media type the SSRC is being used for. Thus, the payload type <bcp14>MUS | |||
unique across all of the payload configurations independent of media | T</bcp14> be | |||
unique across all of the payload configurations, independent of the medi | ||||
a | ||||
type that is used in the RTP session.</t> | type that is used in the RTP session.</t> | |||
</section> | </section> | |||
<section anchor="sec.rtcp" numbered="true" toc="default"> | ||||
<!-- This adds nothing compared to the later sections (csp) | <name>RTCP Considerations</name> | |||
<section title="Payload Type Applicability"> | ||||
<t>Most Payload Types have a native media type, like an audio codec is | ||||
natural belonging to the audio media type. However, there exist a | ||||
number of RTP payload types that don't have a native media type. For | ||||
example, transport robustness mechanisms like <xref | ||||
target="RFC4588">RTP Retransmission</xref> and <xref | ||||
target="RFC5109">Generic FEC</xref> inherit their media type from what | ||||
they protect. RTP Retransmission is explicitly bound to the payload | ||||
type it is protecting, and thus will inherit it. However Generic FEC | ||||
is a excellent example of an RTP payload type that has no natural | ||||
media type. The media type for what it protects is not relevant as it | ||||
is the recovered RTP packets that have a particular media type, and | ||||
thus Generic FEC is best categorized as an application media type.</t> | ||||
<t>The above discussion is relevant to what limitations exist for RTP | ||||
payload type usage within an RTP session that has multiple media | ||||
types. In fact <xref target="sec-generic-fec">this document</xref> | ||||
suggest that for usage of Generic FEC (XOR-based) as defined in RFC | ||||
5109 can actually use a single media type when used with independent | ||||
RTP sessions for source and repair data. <list style="hanging"> | ||||
<t>Note a particular SSRC carrying Generic FEC will clearly only | ||||
protect a specific SSRC and thus that instance is bound to the | ||||
SSRC's media type. For this specific case, it is possible to have | ||||
one be applicable to both. However, in cases when the signalling | ||||
is setup to enable fall back to using separate RTP sessions, then | ||||
using a different media type, e.g. application, than the media | ||||
being protected can create issues.</t> | ||||
</list></t> | ||||
</section> | ||||
--> | ||||
<section anchor="sec.rtcp" title="RTCP Considerations"> | ||||
<t>When sending multiple types of media that have different rates in a | <t>When sending multiple types of media that have different rates in a | |||
single RTP session, endpoints MUST follow the guidelines for handling | single RTP session, endpoints <bcp14>MUST</bcp14> follow the guidelines | |||
RTCP described in Section 7 of <xref | for handling | |||
target="I-D.ietf-avtcore-rtp-multi-stream"/>.</t> | RTCP as provided in <xref target="RFC8108" sectionFormat="of" section="7 | |||
"/>.</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec_extn" numbered="true" toc="default"> | ||||
<section anchor="sec:extn" title="Extension Considerations"> | <name>Extension Considerations</name> | |||
<t>This section outlines known issues and incompatibilities with RTP and | <t>This section outlines known issues and incompatibilities with RTP and | |||
RTCP extensions when multiple media types are used in a single RTP | RTCP extensions when multiple media types are used in a single RTP | |||
sessions. Future extensions to RTP and RTCP need to consider, and | session. Future extensions to RTP and RTCP need to consider, and | |||
document, any potential incompatibility.</t> | document, any potential incompatibilities.</t> | |||
<section anchor="sec-rtx" numbered="true" toc="default"> | ||||
<section anchor="sec-rtx" title="RTP Retransmission Payload Format"> | <name>RTP Retransmission Payload Format</name> | |||
<t>The RTP Retransmission Payload Format <xref target="RFC4588"/> can | <t>The RTP retransmission payload format <xref target="RFC4588" format=" | |||
operate in either SSRC-multiplexed mode or session-multiplex mode.</t> | default"/> can | |||
operate in either SSRC-multiplexed mode or session-multiplexed mode.</t> | ||||
<t>In SSRC-multiplexed mode, retransmitted RTP packets are sent in the | <t>In SSRC-multiplexed mode, retransmitted RTP packets are sent in the | |||
same RTP session as the original packets, but use a different SSRC | same RTP session as the original packets but use a different SSRC | |||
with the same RTCP SDES CNAME. If each endpoint sends only a single | with the same RTCP Source Description (SDES) CNAME. If each endpoint sen | |||
ds only a single | ||||
original RTP stream and a single retransmission RTP stream in the | original RTP stream and a single retransmission RTP stream in the | |||
session, this is sufficient. If an endpoint sends multiple original | session, this is sufficient. If an endpoint sends multiple original | |||
and retransmission RTP streams, as would occur when sending multiple | and retransmission RTP streams, as would occur when sending multiple | |||
media types in a single RTP session, then each original RTP stream and | media types in a single RTP session, then each original RTP stream and | |||
the retransmission RTP stream have to be associated using heuristics. | the retransmission RTP stream have to be associated using heuristics. | |||
By having retransmission requests outstanding for only one SSRC not | By having retransmission requests outstanding for only one SSRC not | |||
yet mapped, a receiver can determine the binding between original and | yet mapped, a receiver can determine the binding between the original an | |||
retransmission RTP stream. Another alternative is the use of different | d | |||
retransmission RTP streams. Another alternative is the use of different | ||||
RTP payload types, allowing the signalled "apt" (associated payload | RTP payload types, allowing the signalled "apt" (associated payload | |||
type) parameter of the RTP retransmission payload format to be used to | type) parameter <xref target="RFC4588"/> of the RTP retransmission paylo ad format to be used to | |||
associate retransmitted and original packets.</t> | associate retransmitted and original packets.</t> | |||
<t>Session-multiplexed mode sends the retransmission RTP stream in a | <t>Session-multiplexed mode sends the retransmission RTP stream in a | |||
separate RTP session to the original RTP stream, but using the same | separate RTP session to the original RTP stream, but using the same | |||
SSRC for each, with association being done by matching SSRCs between | SSRC for each, with the association being done by matching SSRCs between | |||
the two sessions. This is unaffected by the use of multiple media | the two sessions. This is unaffected by the use of multiple media | |||
types in a single RTP session, since each media type will be sent | types in a single RTP session, since each media type will be sent | |||
using a different SSRC in the original RTP session, and the same SSRCs | using a different SSRC in the original RTP session, and the same SSRCs | |||
can be used in the retransmission session, allowing the streams to be | can be used in the retransmission session, allowing the streams to be | |||
associated. This can be signalled using SDP with the BUNDLE <xref | associated. This can be signalled using SDP with the BUNDLE grouping | |||
target="I-D.ietf-mmusic-sdp-bundle-negotiation"/> and FID grouping | extension <xref target="RFC8843" format="default"/> and the Flow Identifi | |||
<xref target="RFC5888"/> extensions. These SDP extensions require each | cation (FID) | |||
grouping extension <xref target="RFC5888" format="default"/>. These SDP e | ||||
xtensions require each | ||||
"m=" line to only be included in a single FID group, but the RTP | "m=" line to only be included in a single FID group, but the RTP | |||
retransmission payload format uses FID groups to indicate the m= lines | retransmission payload format uses FID groups to indicate the "m=" lines | |||
that form an original and retransmission pair. Accordingly, when using | that form an original and retransmission pair. Accordingly, when using | |||
the BUNDLE extension to allow multiple media types to be sent in a | the BUNDLE extension to allow multiple media types to be sent in a | |||
single RTP session, each original media source (m= line) that is | single RTP session, each original media source ("m=" line) that is | |||
retransmitted needs a corresponding m= line in the retransmission RTP | retransmitted needs a corresponding "m=" line in the retransmission RTP | |||
session. In case there are multiple media lines for retransmission, | session. If there are multiple media lines for retransmission, | |||
these media lines will form an independent BUNDLE group from the | these media lines will form an independent BUNDLE group from the | |||
BUNDLE group with the source streams.</t> | BUNDLE group with the source streams.</t> | |||
<t>An example SDP fragment showing the grouping structures is provided | <t>An example SDP fragment showing the grouping structures is provided | |||
in <xref target="fig-rtx-session"/>. This example is not legal SDP and | in <xref target="fig-rtx-session" format="default"/>. This example is no t legal SDP, and | |||
only the most important attributes have been left in place. Note that | only the most important attributes have been left in place. Note that | |||
this SDP is not an initial BUNDLE offer. As can be seen there are two | this SDP is not an initial BUNDLE offer. As can be seen in this example, | |||
bundle groups, one for the source RTP session and one for the | there are two | |||
retransmissions. Then each of the media sources are grouped with its | bundle groups -- one for the source RTP session and one for the | |||
retransmissions. Then, each of the media sources is grouped with its | ||||
retransmission flow using FID, resulting in three more groupings.</t> | retransmission flow using FID, resulting in three more groupings.</t> | |||
<figure anchor="fig-rtx-session"> | ||||
<figure anchor="fig-rtx-session" | <name>SDP Example of Session-Multiplexed RTP Retransmission</name> | |||
title="SDP example of Session Multiplexed RTP Retransmission"> | <sourcecode name="sdp-example" type="sdp"><![CDATA[ a=group:BUND | |||
<artwork><![CDATA[ a=group:BUNDLE foo bar fiz | LE foo bar fiz | |||
a=group:BUNDLE zoo kelp glo | a=group:BUNDLE zoo kelp glo | |||
a=group:FID foo zoo | a=group:FID foo zoo | |||
a=group:FID bar kelp | a=group:FID bar kelp | |||
a=group:FID fiz glo | a=group:FID fiz glo | |||
m=audio 10000 RTP/AVP 0 | m=audio 10000 RTP/AVP 0 | |||
a=mid:foo | a=mid:foo | |||
a=rtpmap:0 PCMU/8000 | a=rtpmap:0 PCMU/8000 | |||
m=video 10000 RTP/AVP 31 | m=video 10000 RTP/AVP 31 | |||
a=mid:bar | a=mid:bar | |||
a=rtpmap:31 H261/90000 | a=rtpmap:31 H261/90000 | |||
skipping to change at line 524 ¶ | skipping to change at line 452 ¶ | |||
a=rtpmap:99 rtx/90000 | a=rtpmap:99 rtx/90000 | |||
a=fmtp:99 apt=0;rtx-time=3000 | a=fmtp:99 apt=0;rtx-time=3000 | |||
a=mid:zoo | a=mid:zoo | |||
m=video 40000 RTP/AVPF 100 | m=video 40000 RTP/AVPF 100 | |||
a=rtpmap:100 rtx/90000 | a=rtpmap:100 rtx/90000 | |||
a=fmtp:199 apt=31;rtx-time=3000 | a=fmtp:199 apt=31;rtx-time=3000 | |||
a=mid:kelp | a=mid:kelp | |||
m=video 40000 RTP/AVPF 100 | m=video 40000 RTP/AVPF 100 | |||
a=rtpmap:100 rtx/90000 | a=rtpmap:100 rtx/90000 | |||
a=fmtp:199 apt=31;rtx-time=3000 | a=fmtp:199 apt=31;rtx-time=3000 | |||
a=mid:glo | a=mid:glo]]></sourcecode> | |||
]]></artwork> | ||||
</figure> | </figure> | |||
</section> | </section> | |||
<section anchor="sec-generic-fec" numbered="true" toc="default"> | ||||
<section anchor="sec-generic-fec" | <name>RTP Payload Format for Generic FEC</name> | |||
title="RTP Payload Format for Generic FEC"> | <t>The RTP payload format for generic Forward Error Correction (FEC), | |||
<t>The RTP Payload Format for Generic Forward Error Correction (FEC) | as defined in <xref target="RFC5109" format="default"/> (and its predece | |||
<xref target="RFC5109"/> (and its predecessor <xref | ssor, <xref target="RFC2733" format="default"/>), can either send the FEC stream | |||
target="RFC2733"/>) can either send the FEC stream as a separate RTP | as a separate RTP | |||
stream, or it can send the FEC combined with the original RTP stream | stream or send the FEC combined with the original RTP stream | |||
as a redundant encoding <xref target="RFC2198"/>.</t> | as a redundant encoding <xref target="RFC2198" format="default"/>.</t> | |||
<t>When sending FEC as a separate stream, the RTP payload format for | ||||
<t>When sending FEC as a separate stream, the RTP Payload Format for | ||||
generic FEC requires that FEC stream to be sent in a separate RTP | generic FEC requires that FEC stream to be sent in a separate RTP | |||
session to the original stream, using the same SSRC, with the FEC | session to the original stream, using the same SSRC, with the FEC | |||
stream being associated by matching the SSRC between sessions. The RTP | stream being associated by matching the SSRC between sessions. The RTP | |||
session used for the original streams can include multiple RTP | session used for the original streams can include multiple RTP | |||
streams, and those RTP streams can use multiple media types. The | streams, and those RTP streams can use multiple media types. The | |||
repair session only needs one RTP Payload type to indicate FEC data, | repair session only needs one RTP payload type to indicate FEC data, | |||
irrespective of the number of FEC streams sent, since the SSRC is used | irrespective of the number of FEC streams sent, since the SSRC is used | |||
to associate the FEC streams with the original streams. Hence, it is | to associate the FEC streams with the original streams. Hence, it is | |||
RECOMMENDED that the FEC stream use the "application/ulpfec" media | <bcp14>RECOMMENDED</bcp14> that the FEC stream use the "application/ulpf | |||
type for <xref target="RFC5109"/>, and the "application/parityfec" | ec" media | |||
media type for <xref target="RFC2733"/>. It is legal, but NOT | type in the case of support for <xref target="RFC5109" format="default"/ | |||
RECOMMENDED, to send FEC streams using media specific payload format | > and the "application/&wj;parityfec" | |||
media type in the case of support for <xref target="RFC2733" format="def | ||||
ault"/>. It is legal, but <bcp14>NOT | ||||
RECOMMENDED</bcp14>, to send FEC streams using media-specific payload fo | ||||
rmat | ||||
names (e.g., using both the "audio/ulpfec" and "video/ulpfec" payload | names (e.g., using both the "audio/ulpfec" and "video/ulpfec" payload | |||
formats for a single RTP session containing both audio and video | formats for a single RTP session containing both audio and video | |||
flows), since this unnecessarily uses up RTP payload type values, and | flows), since this (1) unnecessarily uses up RTP payload type value | |||
adds no value for demultiplexing since there might be multiple streams | s and | |||
(2) adds no value for demultiplexing because there might be multipl | ||||
e streams | ||||
of the same media type).</t> | of the same media type).</t> | |||
<t>The combination of an original RTP session using multiple media | <t>The combination of an original RTP session using multiple media | |||
types with an associated generic FEC session can be signalled using | types with an associated generic FEC session can be signalled using | |||
SDP with the BUNDLE extension <xref | SDP with the BUNDLE extension <xref target="RFC8843" format="default"/>. | |||
target="I-D.ietf-mmusic-sdp-bundle-negotiation"/>. In this case, the | In this case, the | |||
RTP session carrying the FEC streams will be its own BUNDLE group. The | RTP session carrying the FEC streams will be its own BUNDLE group. The | |||
m= line for each original stream and the m= line for the corresponding | "m=" line for each original stream and the "m=" line for the correspondi | |||
FEC stream are grouped using the SDP grouping framework using either | ng | |||
the <xref target="RFC5956">FEC-FR</xref> grouping or, for backwards | FEC stream are grouped using the SDP Grouping Framework, using either | |||
compatibility, the FEC <xref target="RFC4756"/> grouping. This is | the <xref target="RFC5956" format="default">FEC-FR grouping</xref> or, f | |||
or backwards | ||||
compatibility, the FEC grouping <xref target="RFC4756" format="default"/ | ||||
>. This is | ||||
similar to the situation that arises for RTP retransmission with | similar to the situation that arises for RTP retransmission with | |||
session multiplexing discussed in <xref target="sec-rtx"/>.</t> | session-based multiplexing as discussed in <xref target="sec-rtx" format | |||
="default"/>.</t> | ||||
<t>The <xref target="RFC5576">Source-Specific Media Attributes</xref> | <t>The <xref target="RFC5576" format="default">source-specific media | |||
specification defines an SDP extension (the "FEC" semantic of the | attributes specification</xref> | |||
defines an SDP extension (the "FEC" semantic of the | ||||
"ssrc-group" attribute) to signal FEC relationships between multiple | "ssrc-group" attribute) to signal FEC relationships between multiple | |||
RTP streams within a single RTP session. This cannot be used with | RTP streams within a single RTP session. This cannot be used with | |||
generic FEC, since the FEC repair packets need to have the same SSRC | generic FEC, since the FEC repair packets need to have the same SSRC | |||
value as the source packets being protected. There was work on an | value as the source packets being protected. | |||
Unequal Layer Protection (ULP) extension to allow it be use FEC RTP | There existed a proposal (now abandoned) for an Uneven Level Protection (ULP) | |||
streams within the same RTP Session as the source stream <xref | extension to enable transmission of the FEC RTP | |||
target="I-D.lennox-payload-ulp-ssrc-mux"/>.</t> | streams within the same RTP session as the source stream <xref | |||
target="I-D.lennox-payload-ulp-ssrc-mux" format="default"/>.</t> | ||||
<t>When the FEC is sent as a redundant encoding, the considerations in | <t>When the FEC is sent as a redundant encoding, the considerations in | |||
<xref target="sec-red"/> apply.</t> | <xref target="sec-red" format="default"/> apply.</t> | |||
</section> | </section> | |||
<section anchor="sec-red" numbered="true" toc="default"> | ||||
<section anchor="sec-red" title="RTP Payload Format for Redundant Audio"> | <name>RTP Payload Format for Redundant Audio</name> | |||
<t>The RTP Payload Format for Redundant Audio <xref target="RFC2198"/> | <t>The RTP payload format for redundant audio <xref target="RFC2198" for | |||
mat="default"/> | ||||
can be used to protect audio streams. It can also be used along with | can be used to protect audio streams. It can also be used along with | |||
the generic FEC payload format to send original and repair data in the | the generic FEC payload format to send original and repair data in the | |||
same RTP packets. Both are compatible with RTP sessions containing | same RTP packets. Both are compatible with RTP sessions containing | |||
multiple media types.</t> | multiple media types.</t> | |||
<t>This payload format requires each different redundant encoding to use | ||||
<t>This payload format requires each different redundant encoding use | ||||
a different RTP payload type number. When used with generic FEC in | a different RTP payload type number. When used with generic FEC in | |||
sessions that contain multiple media types, this requires each media | sessions that contain multiple media types, this requires each media | |||
type to use a different payload type for the FEC stream. For example, | type to use a different payload type for the FEC stream. For example, | |||
if audio and text are sent in a single RTP session with generic ULP | if audio and text are sent in a single RTP session with generic ULP | |||
FEC sent as a redundant encoding for each, then payload types need to | FEC sent as a redundant encoding for each, then payload types need to | |||
be assigned for FEC using the audio/ulpfec and text/ulpfec payload | be assigned for FEC using the audio/ulpfec and text/&wj;ulpfec payload | |||
formats. If multiple original payload types are used in the session, | formats. If multiple original payload types are used in the session, | |||
different redundant payload types need to be allocated for each one. | different redundant payload types need to be allocated for each one. | |||
This has potential to rapidly exhaust the available RTP payload type | This has potential to rapidly exhaust the available RTP payload type | |||
numbers.</t> | numbers.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec_sig" numbered="true" toc="default"> | ||||
<section anchor="sec:sig" title="Signalling"> | <name>Signalling</name> | |||
<t>Establishing a single RTP session using multiple media types requires | <t>Establishing a single RTP session using multiple media types requires | |||
signalling. This signalling has to:<list style="numbers"> | signalling. This signalling has to:</t> | |||
<t>ensure that any participant in the RTP session is aware that this | <ol spacing="normal" type="1"> | |||
is an RTP session with multiple media types;</t> | <li>ensure that any participant in the RTP session is aware that this | |||
is an RTP session with multiple media types;</li> | ||||
<t>ensure that the payload types in use in the RTP session are using | <li>ensure that the payload types in use in the RTP session are using | |||
unique values, with no overlap between the media types;</t> | unique values, with no overlap between the media types;</li> | |||
<li>ensure that RTP session-level parameters -- for example, the RTCP RR | ||||
<t>ensure RTP session level parameters, for example the RTCP RR and | and | |||
RS bandwidth modifiers, the RTP/AVPF trr-int parameter, transport | RS bandwidth modifiers <xref target="RFC3556"/>, the RTP/AVPF | |||
protocol, RTCP extensions in use, and any security parameters, are | trr-int parameter <xref target="RFC4585"/>, transport | |||
consistent across the session; and</t> | protocol, RTCP extensions in use, and any security parameters -- are | |||
consistent across the session; and</li> | ||||
<t>ensure that RTP and RTCP functions that can be bound to a | <li>ensure that RTP and RTCP functions that can be bound to a | |||
particular media type are reused where possible, rather than | particular media type are reused where possible, rather than | |||
configuring multiple code-points for the same thing.</t> | configuring multiple code points for the same thing.</li> | |||
</list></t> | </ol> | |||
<t>When using SDP signalling, the BUNDLE extension <xref target="RFC8843" | ||||
<t>When using SDP signalling, the BUNDLE extension <xref | format="default"/> is used to signal RTP | |||
target="I-D.ietf-mmusic-sdp-bundle-negotiation"/> is used to signal RTP | ||||
sessions containing multiple media types.</t> | sessions containing multiple media types.</t> | |||
</section> | </section> | |||
<section anchor="Security" numbered="true" toc="default"> | ||||
<section anchor="Security" title="Security Considerations"> | <name>Security Considerations</name> | |||
<t>RTP provides a range of strong security mechanisms that can be used | <t>RTP provides a range of strong security mechanisms that can be used | |||
to secure sessions <xref target="RFC7201"/>, <xref target="RFC7202"/>. | to secure sessions <xref target="RFC7201" format="default"/> <xref target= "RFC7202" format="default"/>. | |||
The majority of these are independent of the type of media sent in the | The majority of these are independent of the type of media sent in the | |||
RTP session; however it is important to check that the security | RTP session; however, it is important to check that the security | |||
mechanism chosen is compatible with all types of media sent within the | mechanism chosen is compatible with all types of media sent within the | |||
session.</t> | session.</t> | |||
<t>Sending multiple media types in a single RTP session will generally | <t>Sending multiple media types in a single RTP session will generally | |||
require that all use the same security mechanism, whereas media sent | require that all use the same security mechanism, whereas media sent | |||
using different RTP sessions can be secured in different ways. When | using different RTP sessions can be secured in different ways. When | |||
different media types have different security requirements, it might be | different media types have different security requirements, it might be | |||
necessary to send them using separate RTP sessions to meet those | necessary to send them using separate RTP sessions to meet those | |||
different requirements. This can have significant costs in terms of | different requirements. This can have significant costs in terms of | |||
resource usage, session set-up time, etc.</t> | resource usage, session setup time, etc.</t> | |||
</section> | ||||
<section anchor="IANA" title="IANA Considerations"> | ||||
<t>This memo makes no request of IANA.</t> | ||||
</section> | </section> | |||
<section anchor="IANA" numbered="true" toc="default"> | ||||
<section anchor="Acknowledgements" title="Acknowledgements"> | <name>IANA Considerations</name> | |||
<t>The authors would like to thank Christer Holmberg, Gunnar | <t>This document has no IANA actions.</t> | |||
Hellström, Charles Eckel, Tolga Asveren, Warren Kumari, and Meral | ||||
Shirazipour for their feedback on the document.</t> | ||||
</section> | </section> | |||
</middle> | </middle> | |||
<back> | <back> | |||
<references title="Normative References"> | ||||
<?rfc include="reference.RFC.2119"?> | ||||
<?rfc include='reference.RFC.3550'?> | ||||
<?rfc include='reference.RFC.3551'?> | ||||
<?rfc include='reference.I-D.ietf-mmusic-sdp-bundle-negotiation'?> | <displayreference target="I-D.lennox-payload-ulp-ssrc-mux" to="FEC-Src-Multiplex | |||
ing"/> | ||||
<?rfc include='reference.I-D.ietf-avtcore-rtp-multi-stream'?> | ||||
</references> | ||||
<references title="Informative References"> | ||||
<?rfc include='reference.I-D.ietf-avtcore-multiplex-guidelines'?> | ||||
<?rfc include='reference.RFC.7656'?> | ||||
<?rfc include='reference.RFC.7657'?> | ||||
<?rfc include='reference.I-D.lennox-payload-ulp-ssrc-mux'?> | ||||
<?rfc include='reference.RFC.2198'?> | ||||
<?rfc include='reference.RFC.2733'?> | ||||
<?rfc include='reference.RFC.4566'?> | ||||
<?rfc include='reference.RFC.4588'?> | ||||
<?rfc include='reference.RFC.4756'?> | ||||
<?rfc include='reference.RFC.5109'?> | ||||
<?rfc include='reference.RFC.5576'?> | <references> | |||
<name>References</name> | ||||
<references> | ||||
<name>Normative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.2119.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.3550.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.3551.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.8174.xml"/> | ||||
<?rfc include='reference.RFC.5888'?> | <!-- draft-ietf-mmusic-sdp-bundle-negotiation (RFC 8843) --> | |||
<reference anchor="RFC8843" target="https://www.rfc-editor.org/info/rfc8843" | ||||
> | ||||
<front> | ||||
<title>Negotiating Media Multiplexing Using the Session Description Prot | ||||
ocol (SDP)</title> | ||||
<author initials="C" surname="Holmberg" fullname="Christer Holmberg"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="H" surname="Alvestrand" fullname="Harald Alvestrand"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="C" surname="Jennings" fullname="Cullen Jennings"> | ||||
<organization/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8843"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8843"/> | ||||
</reference> | ||||
<?rfc include='reference.RFC.5956'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R FC.8108.xml"/> | |||
<?rfc include='reference.RFC.6466'?> | </references> | |||
<references> | ||||
<name>Informative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.3556.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4585.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7656.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7657.xml"/> | ||||
<?rfc include='reference.RFC.7160'?> | <!-- draft-ietf-avtcore-multiplex-guidelines (RFC 8872) --> | |||
<reference anchor="RFC8872" target="https://www.rfc-editor.org/info/rfc8872"> | ||||
<front> | ||||
<title>Guidelines for Using the Multiplexing Features of RTP to Support | ||||
Multiple Media Streams</title> | ||||
<author initials="M" surname="Westerlund" fullname="Magnus Westerlund"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="B" surname="Burman" fullname="Bo Burman"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="C" surname="Perkins" fullname="Colin Perkins"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="H" surname="Alvestrand" fullname="Harald Alvestrand"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="R" surname="Even" fullname="Roni Even"> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8872"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8872"/> | ||||
</reference> | ||||
<?rfc include='reference.RFC.7201'?> | <!-- draft-lennox-payload-ulp-ssrc-mux (Expired) --> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/refe | ||||
rence.I-D.draft-lennox-payload-ulp-ssrc-mux-00.xml"/> | ||||
<?rfc include='reference.RFC.7202'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
FC.2198.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.2733.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4566.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4588.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4756.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5109.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5576.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5888.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5956.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6466.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7160.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7201.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7202.xml"/> | ||||
</references> | ||||
</references> | </references> | |||
<section anchor="Acknowledgements" numbered="false" toc="default"> | ||||
<name>Acknowledgements</name> | ||||
<t>The authors would like to thank <contact fullname="Christer | ||||
Holmberg"/>, <contact fullname="Gunnar Hellström"/>, <contact | ||||
fullname="Charles Eckel"/>, <contact fullname="Tolga Asveren"/>, | ||||
<contact fullname="Warren Kumari"/>, and <contact fullname="Meral | ||||
Shirazipour"/> for their feedback on this document.</t> | ||||
</section> | ||||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 131 change blocks. | ||||
436 lines changed or deleted | 490 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/ |