rfc8872xml2.original.xml | rfc8872.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
FC.2119.xml"> | ||||
<!ENTITY RFC2198 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-avtcore-mult | |||
FC.2198.xml"> | iplex-guidelines-12" number="8872" ipr="trust200902" submissionType="IETF" categ | |||
<!ENTITY RFC2205 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ory="info" consensus="true" obsoletes="" updates="" xml:lang="en" tocInclude="tr | |||
FC.2205.xml"> | ue" tocDepth="3" symRefs="true" sortRefs="true" version="3"> | |||
<!ENTITY RFC2474 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.2474.xml"> | <!-- xml2rfc v2v3 conversion 2.45.3 --> | |||
<!ENTITY RFC4588 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.4588.xml"> | ||||
<!ENTITY RFC5109 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.5109.xml"> | ||||
<!ENTITY RFC3264 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.3264.xml"> | ||||
<!ENTITY RFC2974 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.2974.xml"> | ||||
<!ENTITY RFC3261 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.3261.xml"> | ||||
<!ENTITY RFC3550 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.3550.xml"> | ||||
<!ENTITY RFC3389 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.3389.xml"> | ||||
<!ENTITY RFC3551 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.3551.xml"> | ||||
<!ENTITY RFC3711 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.3711.xml"> | ||||
<!ENTITY RFC3830 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.3830.xml"> | ||||
<!ENTITY RFC4103 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.4103.xml"> | ||||
<!ENTITY RFC4383 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.4383.xml"> | ||||
<!ENTITY RFC4566 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.4566.xml"> | ||||
<!ENTITY RFC4568 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.4568.xml"> | ||||
<!ENTITY RFC4585 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.4585.xml"> | ||||
<!ENTITY RFC5104 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.5104.xml"> | ||||
<!ENTITY RFC5389 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.5389.xml"> | ||||
<!ENTITY RFC5576 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.5576.xml"> | ||||
<!ENTITY RFC5760 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.5760.xml"> | ||||
<!ENTITY RFC5761 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.5761.xml"> | ||||
<!ENTITY RFC5764 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.5764.xml"> | ||||
<!ENTITY RFC5888 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.5888.xml"> | ||||
<!ENTITY RFC6465 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.6465.xml"> | ||||
<!ENTITY RFC7201 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.7201.xml"> | ||||
<!ENTITY RFC7656 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.7656.xml"> | ||||
<!ENTITY RFC7657 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.7657.xml"> | ||||
<!ENTITY RFC7667 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.7667.xml"> | ||||
<!ENTITY RFC7826 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.7826.xml"> | ||||
<!ENTITY RFC7983 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.7983.xml"> | ||||
<!ENTITY RFC8088 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.8088.xml"> | ||||
<!ENTITY RFC8108 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.8108.xml"> | ||||
<!ENTITY RFC8445 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.R | ||||
FC.8445.xml"> | ||||
<!ENTITY I-D.ietf-mmusic-rid SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc | ||||
/bibxml3/reference.I-D.ietf-mmusic-rid.xml"> | ||||
<!ENTITY I-D.ietf-mmusic-sdp-bundle-negotiation SYSTEM "https://xml2rfc.tools. | ||||
ietf.org/public/rfc/bibxml3/reference.I-D.ietf-mmusic-sdp-bundle-negotiation.xml | ||||
"> | ||||
<!ENTITY I-D.ietf-avtcore-multi-media-rtp-session SYSTEM "https://xml2rfc.tool | ||||
s.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-avtcore-multi-media-rtp-session | ||||
.xml"> | ||||
<!ENTITY I-D.ietf-perc-srtp-ekt-diet SYSTEM "https://xml2rfc.tools.ietf.org/pu | ||||
blic/rfc/bibxml3/reference.I-D.ietf-perc-srtp-ekt-diet.xml"> | ||||
<!ENTITY I-D.ietf-avtext-rid SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc | ||||
/bibxml3/reference.I-D.ietf-avtext-rid.xml"> | ||||
<!ENTITY I-D.ietf-perc-private-media-framework SYSTEM "https://xml2rfc.tools.i | ||||
etf.org/public/rfc/bibxml3/reference.I-D.ietf-perc-private-media-framework.xml"> | ||||
]> | ||||
<?rfc toc="yes"?> | ||||
<?rfc tocompact="yes"?> | ||||
<?rfc tocdepth="3"?> | ||||
<?rfc tocindent="yes"?> | ||||
<?rfc symrefs="yes"?> | ||||
<?rfc sortrefs="yes"?> | ||||
<?rfc comments="yes"?> | ||||
<?rfc inline="yes"?> | ||||
<?rfc compact="yes"?> | ||||
<?rfc subcompact="no"?> | ||||
<rfc | ||||
category="info" | ||||
docName="draft-ietf-avtcore-multiplex-guidelines-12" | ||||
ipr="trust200902" | ||||
submissionType="IETF"> | ||||
<front> | <front> | |||
<title abbrev="Guidelines for Multiplexing in RTP">Guidelines for | <title abbrev="Guidelines for Multiplexing in RTP">Guidelines for | |||
using the Multiplexing Features of RTP to Support Multiple Media | Using the Multiplexing Features of RTP to Support Multiple Media | |||
Streams</title> | Streams</title> | |||
<author | <seriesInfo name="RFC" value="8872"/> | |||
fullname="Magnus Westerlund" | <author fullname="Magnus Westerlund" initials="M." surname="Westerlund"> | |||
initials="M." | ||||
surname="Westerlund"> | ||||
<organization>Ericsson</organization> | <organization>Ericsson</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Torshamnsgatan 23</street> | <street>Torshamnsgatan 23</street> | |||
<street>SE-164 80 Kista</street> | <code>164 80</code> | |||
<street>Sweden</street> | <city>Kista</city> | |||
<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="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> | |||
<street>SE-164 60 Kista</street> | <code>164 60</code> | |||
<street>Sweden</street> | <city>Kista</city> | |||
<country>Sweden</country> | ||||
</postal> | </postal> | |||
<email>bo.burman@ericsson.com</email> | <email>bo.burman@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> | <extaddr>School of Computing Science</extaddr> | |||
<street>Glasgow G12 8QQ</street> | <city>Glasgow</city> | |||
<street>United Kingdom</street> | <code>G12 8QQ</code> | |||
<country>United Kingdom</country> | ||||
</postal> | </postal> | |||
<email>csp@csperkins.org</email> | <email>csp@csperkins.org</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author | <author fullname="Harald Tveit Alvestrand" initials="H." surname="Alvestrand | |||
fullname="Harald Tveit Alvestrand" | "> | |||
initials="H." | ||||
surname="Alvestrand"> | ||||
<organization>Google</organization> | <organization>Google</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Kungsbron 2</street> | <street>Kungsbron 2</street> | |||
<street>Stockholm 11122</street> | <city>Stockholm</city> | |||
<street>Sweden</street> | <code>11122</code> | |||
<country>Sweden</country> | ||||
</postal> | </postal> | |||
<email>harald@alvestrand.no</email> | <email>harald@alvestrand.no</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Roni Even" initials="R." surname="Even"> | <author fullname="Roni Even" initials="R." surname="Even"> | |||
<address> | <address> | |||
<email>ron.even.tlv@gmail.com</email> | <email>ron.even.tlv@gmail.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date day="16" month="June" year="2020"/> | <date month="January" year="2021"/> | |||
<keyword>Simulcast</keyword> | ||||
<abstract> | <abstract> | |||
<t>The Real-time Transport Protocol (RTP) is a flexible protocol that | <t>The Real-time Transport Protocol (RTP) is a flexible protocol that | |||
can be used in a wide range of applications, networks, and system | can be used in a wide range of applications, networks, and system | |||
topologies. That flexibility makes for wide applicability, but can | topologies. That flexibility makes for wide applicability but can | |||
complicate the application design process. One particular design | complicate the application design process. One particular design | |||
question that has received much attention is how to support multiple | question that has received much attention is how to support multiple | |||
media streams in RTP. This memo discusses the available options and | media streams in RTP. This memo discusses the available options and | |||
design trade-offs, and provides guidelines on how to use the | design trade-offs, and provides guidelines on how to use the | |||
multiplexing features of RTP to support multiple media streams.</t> | multiplexing features of RTP to support multiple media streams.</t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="section-1" title="Introduction"> | <section anchor="sect-1" numbered="true" toc="default"> | |||
<name>Introduction</name> | ||||
<t>The Real-time Transport Protocol (RTP) | <t>The Real-time Transport Protocol (RTP) | |||
<xref target="RFC3550"/> | <xref target="RFC3550" format="default"/> | |||
is a commonly used protocol for real-time media transport. It is a | is a commonly used protocol for real-time media transport. It is a | |||
protocol that provides great flexibility and can support a large set | protocol that provides great flexibility and can support a large set | |||
of different applications. RTP was from the beginning designed for | of different applications. From the beginning, RTP was designed for | |||
multiple participants in a communication session. It supports many | multiple participants in a communication session. It supports many | |||
topology paradigms and usages, as defined in | topology paradigms and usages, as defined in | |||
<xref target="RFC7667"/>. RTP has several multiplexing points designed | <xref target="RFC7667" format="default"/>. RTP has several multiplexing | |||
for different purposes. These enable support of multiple RTP streams | points designed | |||
and switching between different encoding or packetization of the | for different purposes; these points enable support of multiple RTP stre | |||
ams | ||||
and switching between different encoding or packetization techniques for | ||||
the | ||||
media. By using multiple RTP sessions, sets of RTP streams can be | media. By using multiple RTP sessions, sets of RTP streams can be | |||
structured for efficient processing or identification. Thus, an | structured for efficient processing or identification. Thus, | |||
RTP application designer needs to understand how to best use the RTP | to meet an application's needs, an RTP application designer needs to understand | |||
session, the RTP stream identifier (SSRC), and the RTP payload type to | how best to use the RTP | |||
meet the application's needs.</t> | session, the RTP stream identifier (synchronization source (SSRC)), and | |||
<t>There have been increased interest in more advanced usage of RTP. | the RTP payload type.</t> | |||
<t>There has been increased interest in more-advanced usage of RTP. | ||||
For example, multiple RTP streams can be used when a single endpoint | For example, multiple RTP streams can be used when a single endpoint | |||
has multiple media sources (like multiple cameras or microphones) that | has multiple media sources (like multiple cameras or microphones) from | |||
need to be sent simultaneously. Consequently, questions are raised | which streams of media need to be sent simultaneously. Consequently, que | |||
stions are raised | ||||
regarding the most appropriate RTP usage. The limitations in some | regarding the most appropriate RTP usage. The limitations in some | |||
implementations, RTP/RTCP extensions, and signalling have also been | implementations, RTP/RTCP extensions, and signaling have also been | |||
exposed. This document aims to clarify the usefulness | exposed. This document aims to clarify the usefulness | |||
of some functionalities in RTP which will hopefully result in more compl | of some functionalities in RTP that, hopefully, will result in future | |||
ete | implementations that are more complete.</t> | |||
implementations in the future.</t> | ||||
<t>The purpose of this document is to provide clear information about | <t>The purpose of this document is to provide clear information about | |||
the possibilities of RTP when it comes to multiplexing. The RTP | the possibilities of RTP when it comes to multiplexing. The RTP | |||
application designer needs to understand the implications arising | application designer needs to understand the implications arising | |||
from a particular usage of the RTP multiplexing points. The document | from a particular usage of the RTP multiplexing points. This document | |||
will provide some guidelines and recommend against some usages as | provides some guidelines and recommends against some usages as | |||
being unsuitable, in general or for particular purposes.</t> | being unsuitable, in general or for particular purposes.</t> | |||
<t>The document starts with some definitions and then goes into the | <t>This document starts with some definitions and then goes into | |||
existing RTP functionalities around multiplexing. Both the desired | existing RTP functionalities around multiplexing. Both the desired | |||
behaviour and the implications of a particular behaviour depend on | behavior and the implications of a particular behavior depend on | |||
which topologies are used, which requires some consideration. This is | which topologies are used; therefore, this topic requires some | |||
followed by a discussion of some choices in multiplexing behaviour and | consideration. We then discuss some choices regarding multiplexing | |||
their impacts. Some designs of RTP usage are discussed. Finally, some | behavior and the impacts of those choices. Some designs of RTP usage | |||
are also discussed. Finally, some | ||||
guidelines and examples are provided.</t> | guidelines and examples are provided.</t> | |||
</section> | </section> | |||
<section anchor="section-2" title="Definitions"> | <section anchor="sect-2" numbered="true" toc="default"> | |||
<section anchor="section-2.1" title="Terminology"> | <name>Definitions</name> | |||
<t>The definitions in Section 3 of | <section anchor="sect-2.1" numbered="true" toc="default"> | |||
<xref target="RFC3550"/> | <name>Terminology</name> | |||
are referenced normatively.</t> | <t>The definitions in <xref target="RFC3550" sectionFormat="of" | |||
<t>The taxonomy defined in | section="3"/> are referenced normatively.</t> | |||
<xref target="RFC7656"/> | <t>The taxonomy defined in <xref target="RFC7656" format="default"/> | |||
is referenced normatively.</t> | is referenced normatively.</t> | |||
<t>The following terms and abbreviations are used in this document:</t> | <t>The following terms and abbreviations are used in this document:</t> | |||
<t> | <dl newline="true" spacing="normal"> | |||
<list hangIndent="3" style="hanging"> | <dt>Multi-party:</dt> | |||
<t hangText="Multiparty:">A communication situation including multip | <dd>Communication that includes multiple endpoints. | |||
le endpoints. | In this document, "multi-party" will be used to refer to scenarios whe | |||
<vspace blankLines="0"/> | re | |||
In this document, it will be used to refer to situations where mor | more than two endpoints communicate.</dd> | |||
e | <dt>Multiplexing:</dt> | |||
than two endpoints communicate.</t> | <dd>An operation that takes multiple entities as input, aggregating | |||
<t hangText="Multiplexing:">The operation of taking multiple entitie | them onto some common resource while keeping the individual entities | |||
s as input, | addressable such that they can later be fully and unambiguously | |||
<vspace blankLines="0"/> | separated (demultiplexed) again.</dd> | |||
aggregating them onto some common resource while keeping the | <dt>RTP Receiver:</dt> | |||
individual entities addressable such that they can later be fully | <dd>An endpoint or middlebox receiving RTP streams and RTCP | |||
and | messages. It uses at least one SSRC to send RTCP messages. An RTP | |||
unambiguously separated (de-multiplexed) again.</t> | receiver may also be an RTP sender.</dd> | |||
<t hangText="RTP Receiver:">An Endpoint or Middlebox receiving RTP | <dt>RTP Sender:</dt> | |||
streams and RTCP messages. It uses at least one SSRC to send RTCP | <dd>An endpoint sending one or more RTP streams but also sending | |||
messages. An RTP Receiver may also be an RTP Sender. | RTCP messages.</dd> | |||
</t> | <dt>RTP Session Group:</dt> | |||
<t hangText="RTP Sender:">An Endpoint sending one or more RTP | <dd>One or more RTP sessions that are used together to perform some | |||
streams, but also sending RTCP messages. | function. Examples include multiple RTP sessions used to carry differe | |||
</t> | nt | |||
<t hangText="RTP Session Group:">One or more RTP sessions that are us | layers of a layered encoding. In an RTP Session Group, CNAMEs are | |||
ed together | assumed to be valid across all RTP sessions and designate | |||
<vspace blankLines="0"/> | synchronization contexts that can cross RTP sessions; i.e., SSRCs | |||
to perform some function. Examples are multiple RTP sessions used | that map to a common CNAME can be assumed to have RTCP Sender Report | |||
to | (SR) timing information derived from a common clock such that they | |||
carry different layers of a layered encoding. In an RTP Session Gr | can be synchronized for playout.</dd> | |||
oup, | <dt>Signaling:</dt> | |||
CNAMEs are assumed to be valid across all RTP sessions, and design | <dd>The process of configuring endpoints to participate in one or | |||
ate | more RTP sessions.</dd> | |||
synchronisation contexts that can cross RTP sessions; i.e. SSRCs t | </dl> | |||
hat | <aside><t> Note: The above definitions of "RTP receiver" and "RTP sender | |||
map to a common CNAME can be assumed to have RTCP Sender Report (S | " are | |||
R) timing | consistent with the usage in <xref target="RFC3550" format="default"/> | |||
information derived from a common clock such that they can be | . | |||
synchronised for playout. | </t></aside> | |||
</t> | ||||
<t hangText="Signalling:">The process of configuring endpoints to pa | ||||
rticipate in | ||||
<vspace blankLines="0"/> | ||||
one or more RTP sessions.</t> | ||||
</list> | ||||
</t> | ||||
<t> Note: The above definitions of RTP Receiver and RTP Sender are | ||||
consistent with the usage in <xref target="RFC3550"/>. | ||||
</t> | ||||
</section> | </section> | |||
<section anchor="section-2.2" title="Subjects Out of Scope"> | <section anchor="sect-2.2" numbered="true" toc="default"> | |||
<name>Focus of This Document</name> | ||||
<t>This document is focused on issues that affect RTP. Thus, issues | <t>This document is focused on issues that affect RTP. Thus, issues | |||
that involve signalling protocols, such as whether SIP | that involve signaling protocols -- such as whether SIP | |||
<xref target="RFC3261"/>, Jingle <xref target="JINGLE"/> or some | <xref target="RFC3261" format="default"/>, Jingle <xref target="JINGLE" | |||
other protocol is in use for session configuration, the particular | format="default"/>, or some | |||
syntaxes used to define RTP session properties, or the constraints | other protocol is in use for session configuration; the particular | |||
imposed by particular choices in the signalling protocols, are | syntaxes used to define RTP session properties; or the constraints | |||
imposed by particular choices in the signaling protocols -- are | ||||
mentioned only as examples in order to describe the RTP issues more | mentioned only as examples in order to describe the RTP issues more | |||
precisely.</t> | precisely.</t> | |||
<t>This document assumes the applications will use RTCP. While there | <t>This document assumes that the applications will use RTCP. While ther e | |||
are applications that don't send RTCP, they do not conform to the RTP | are applications that don't send RTCP, they do not conform to the RTP | |||
specification, and thus can be regarded as reusing the RTP packet | specification and thus can be regarded as reusing the RTP packet | |||
format but not implementing the RTP protocol.</t> | format but not implementing RTP.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="section-3" title="RTP Multiplexing Overview"> | <section anchor="sect-3" numbered="true" toc="default"> | |||
<section | <name>RTP Multiplexing Overview</name> | |||
anchor="section-3.1" | <section anchor="sect-3.1" numbered="true" toc="default"> | |||
title="Reasons for Multiplexing and Grouping RTP Streams"> | <name>Reasons for Multiplexing and Grouping RTP Streams</name> | |||
<t>There are several reasons why an endpoint might choose to send | <t>There are several reasons why an endpoint might choose to send | |||
multiple media streams. In the below discussion, please keep in mind | multiple media streams. In the discussion below, please keep in mind | |||
that the reasons for having multiple RTP streams vary and include but | that the reasons for having multiple RTP streams vary and include, but | |||
are not limited to the following:</t> | are not limited to, the following:</t> | |||
<t> | <ul spacing="normal"> | |||
<list style="symbols"> | <li>There might be multiple media sources.</li> | |||
<t>Multiple media sources</t> | <li> | |||
<t>Multiple RTP streams might be needed to represent one media sourc | <t>Multiple RTP streams might be needed to represent one media | |||
e for instance: | source, for example: | |||
<list style="symbols"> | </t> | |||
<t>To carry different layers of an scalable encoding of a media s | <ul spacing="normal"> | |||
ource</t> | <li>To carry different layers of a scalable encoding of a media so | |||
<t>Alternative encodings during simulcast, for instance using dif | urce</li> | |||
ferent codecs for the | <li>Alternative encodings during simulcast, using different codecs | |||
same audio stream</t> | for the | |||
<t>Alternative formats during simulcast, for instance multiple r | same audio stream</li> | |||
esolutions of the same | <li>Alternative formats during simulcast, multiple resolutions of | |||
video stream</t> | the same | |||
</list> | video stream</li> | |||
</t> | </ul> | |||
<t>A retransmission stream might repeat some parts of the content of | </li> | |||
another RTP stream</t> | <li>A retransmission stream might repeat some parts of the content of | |||
<t>A Forward Error Correction (FEC) stream might provide material th | another RTP stream.</li> | |||
at | <li>A Forward Error Correction (FEC) stream might provide material tha | |||
can be used to repair another RTP stream</t> | t | |||
</list> | can be used to repair another RTP stream.</li> | |||
</t> | </ul> | |||
<t>For each of these reasons, it is necessary to decide if each | <t>For each of these reasons, it is necessary to decide whether each | |||
additional RTP stream is sent within the same RTP session as the other | additional RTP stream is sent within the same RTP session as the other | |||
RTP streams, or if it is necessary to use additional RTP sessions to | RTP streams or it is necessary to use additional RTP sessions to | |||
group the RTP streams. The choice suitable for one situation, might no | group the RTP streams. For a combination of reasons, the suitable choi | |||
t | ce for one situation might not | |||
be the choice suitable in another situation or combination of reasons. | be the suitable choice for another situation. The choice is easiest | |||
The clearest understanding | when multiplexing multiple media sources of the same | |||
is associated with multiplexing multiple media sources of the same | ||||
media type. However, all reasons warrant discussion and clarification | media type. However, all reasons warrant discussion and clarification | |||
on how to deal with them. As the discussion below will show, in | regarding how to deal with them. As the discussion below will show, | |||
reality we cannot choose a single one of SSRC or RTP session | a single solution does not suit all purposes. | |||
multiplexing solutions for all purposes. To utilise RTP well and as ef | To utilize RTP well and as efficiently as | |||
ficiently as | possible, both are needed. | |||
possible, both are needed. The real issue is finding the right | The real issue is knowing when to create multiple RTP sessions versus when to | |||
guidance on when to create additional RTP sessions and when additional | send multiple RTP streams in a single RTP session.</t> | |||
RTP streams in the same RTP session is the right choice.</t> | ||||
</section> | </section> | |||
<section anchor="section-3.2" title="RTP Multiplexing Points"> | <section anchor="sect-3.2" numbered="true" toc="default"> | |||
<t>This section describes the multiplexing points present in the RTP | <name>RTP Multiplexing Points</name> | |||
protocol that can be used to distinguish RTP streams and groups of RTP | <t>This section describes the multiplexing points present in RTP | |||
streams. Figure 1 outlines the process of demultiplexing incoming RTP | that can be used to distinguish RTP streams and groups of RTP | |||
streams starting already at the socket representing reception of one | streams. <xref target="ref-rtp-demultiplexing-process"/> outlines | |||
or more transport flows, e.g. based on the UDP destination port. It als | the process of demultiplexing incoming RTP | |||
o demultiplexes | streams, starting with one or more sockets representing the reception | |||
RTP/RTCP from any other protocols, such as STUN <xref target="RFC5389"/ | of one | |||
> | or more transport flows, e.g., based on the UDP destination port. It a | |||
and DTLS-SRTP <xref target="RFC5764"/> on the same transport as | lso demultiplexes | |||
described in <xref target="RFC7983"/>. The Processing and Buffering (PB | RTP/RTCP from any other protocols, such as Session Traversal | |||
) | Utilities for NAT (STUN) <xref target="RFC5389" format="default"/> | |||
step of Figure 1 terminates the RTP/RTCP protocol and prepares the | and DTLS-SRTP <xref target="RFC5764" format="default"/> on the same tr | |||
ansport as | ||||
described in <xref target="RFC7983" format="default"/>. | ||||
The Processing and Buffering (PB) | ||||
step in <xref target="ref-rtp-demultiplexing-process"/> terminates | ||||
RTP/RTCP and prepares the | ||||
RTP payload for input to the decoder.</t> | RTP payload for input to the decoder.</t> | |||
<figure | <figure anchor="ref-rtp-demultiplexing-process"> | |||
anchor="ref-rtp-demultiplexing-process" | <name>RTP Demultiplexing Process</name> | |||
title="RTP Demultiplexing Process"> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
<artwork> | ||||
<![CDATA[ | ||||
| | | | | | | | |||
| | | packets | | | | packets | |||
+-- v v v | +-- v v v | |||
| +------------+ | | +------------+ | |||
| | Socket(s) | Transport Protocol Demultiplexing | | | Socket(s) | Transport Protocol Demultiplexing | |||
| +------------+ | | +------------+ | |||
| || || | | || || | |||
RTP | RTP/ || |+-----> DTLS (SRTP Keying, SCTP, etc) | RTP | RTP/ || |+-----> DTLS (SRTP keying, SCTP, etc.) | |||
Session | RTCP || +------> STUN (multiplexed using same port) | Session | RTCP || +------> STUN (multiplexed using same port) | |||
+-- || | +-- || | |||
+-- || | +-- || | |||
| ++(split by SSRC)-++---> Identify SSRC collision | | ++(split by SSRC)-++---> Identify SSRC collision | |||
| || || || || | | || || || || | |||
| (associate with signalling by MID/RID) | | (associate with signaling by MID/RID) | |||
| vv vv vv vv | | vv vv vv vv | |||
RTP | +--+ +--+ +--+ +--+ Jitter buffer, | RTP | +--+ +--+ +--+ +--+ Jitter buffer, | |||
Streams | |PB| |PB| |PB| |PB| process RTCP, etc. | Streams | |PB| |PB| |PB| |PB| process RTCP, etc. | |||
| +--+ +--+ +--+ +--+ | | +--+ +--+ +--+ +--+ | |||
+-- | | | | | +-- | | | | | |||
(select decoder based on PT) | (select decoder based on payload type (PT)) | |||
+-- | / | / | +-- | / | / | |||
| +-----+ | / | | +-----+ | / | |||
| / | |/ | | / | |/ | |||
Payload | v v v | Payload | v v v | |||
Formats | +---+ +---+ +---+ | Formats | +---+ +---+ +---+ | |||
| |Dec| |Dec| |Dec| Decoders | | |Dec| |Dec| |Dec| Decoders | |||
| +---+ +---+ +---+ | | +---+ +---+ +---+ | |||
+-- | +--]]></artwork> | |||
]]> | ||||
</artwork> | ||||
</figure> | </figure> | |||
<t/> | <section anchor="sect-3.2.1" numbered="true" toc="default"> | |||
<section anchor="section-3.2.1" title="RTP Session"> | <name>RTP Session</name> | |||
<t>An RTP session is the highest semantic layer in the RTP protocol, | <t>An RTP session is the highest semantic layer in RTP | |||
and represents an association between a group of communicating | and represents an association between a group of communicating | |||
endpoints. RTP does not contain a session identifier, yet different | endpoints. RTP does not contain a session identifier, yet different | |||
RTP sessions must be possible to identify both across a set of diffe rent | RTP sessions must be possible to identify both across a set of diffe rent | |||
endpoints and from the perspective of a single endpoint.</t> | endpoints and from the perspective of a single endpoint.</t> | |||
<t>For RTP session separation across endpoints, the set of | <t>For RTP session separation across endpoints, the set of | |||
participants that form an RTP session is defined as those that share a | participants that form an RTP session is defined as those that share a | |||
single synchronisation source space | single SSRC space | |||
<xref target="RFC3550"/>. That is, if a group of participants are ea | <xref target="RFC3550" format="default"/>. That is, if a group of pa | |||
ch | rticipants are each | |||
aware of the synchronisation source identifiers belonging to the oth | aware of the SSRC identifiers belonging to the other | |||
er | ||||
participants, then those participants are in a single RTP session. A | participants, then those participants are in a single RTP session. A | |||
participant can become aware of a synchronisation source identifier | participant can become aware of an SSRC identifier by | |||
by | receiving an RTP packet containing the identifier in the SSRC field | |||
receiving an RTP packet containing it in the SSRC field or CSRC list | or | |||
, | contributing source (CSRC) list, | |||
by receiving an RTCP packet mentioning it in an SSRC field, or throu | by receiving an RTCP packet listing it in an SSRC field, or through | |||
gh | signaling (e.g., the Session Description Protocol (SDP) | |||
signalling (e.g., the Session Description Protocol (SDP) | <xref target="RFC4566" format="default"/> | |||
<xref target="RFC4566"/> | ||||
"a=ssrc:" attribute | "a=ssrc:" attribute | |||
<xref target="RFC5576"/>). Thus, the scope of an RTP session is | <xref target="RFC5576" format="default"/>). Thus, the scope of an RT P session is | |||
determined by the participants' network interconnection topology, in | determined by the participants' network interconnection topology, in | |||
combination with RTP and RTCP forwarding strategies deployed by the | combination with RTP and RTCP forwarding strategies deployed by the | |||
endpoints and any middleboxes, and by the signalling.</t> | endpoints and any middleboxes, and by the signaling.</t> | |||
<t>For RTP session separation within a single endpoint RTP relies on | <t>For RTP session separation within a single endpoint, RTP relies on | |||
the underlying transport layer, and on the signalling to identify RT | the underlying transport layer and the signaling to identify RTP | |||
P | ||||
sessions in a manner that is meaningful to the application. A single | sessions in a manner that is meaningful to the application. A single | |||
endpoint can have one or more transport flows for the same RTP | endpoint can have one or more transport flows for the same RTP | |||
session, and a single RTP session can span multiple transport | session, and a single RTP session can span multiple transport-layer | |||
layer flows even if all endpoints use a single transport layer flow | flows even if all endpoints use a single transport-layer flow per endpoint | |||
per endpoint | for that RTP session. The signaling layer might give RTP sessions an | |||
for that RTP session. The signalling layer might give RTP sessions a | explicit | |||
n explicit | ||||
identifier, or the identification might be implicit based on the | identifier, or the identification might be implicit based on the | |||
addresses and ports used. Accordingly, a single RTP session can have | addresses and ports used. Accordingly, a single RTP session can have | |||
multiple associated identifiers, explicit and implicit, belonging to | multiple associated identifiers, explicit and implicit, belonging to | |||
different contexts. For example, when running RTP on top of UDP/IP, an | different contexts. For example, when running RTP on top of UDP/IP, an | |||
endpoint can identify and delimit an RTP session from other RTP | endpoint can identify and delimit an RTP session from other RTP | |||
sessions by their UDP source and destination IP addresses and UDP po | sessions by their UDP source and destination IP addresses and | |||
rt numbers. | their UDP port numbers. | |||
A single RTP session can be using multiple IP/UDP flows for receiving | A single RTP session can be using multiple IP/UDP flows for receivin | |||
and/or | g and/or | |||
sending RTP packets to other endpoints or middleboxes, even if the | sending RTP packets to other endpoints or middleboxes, even if the | |||
endpoint does not have multiple IP addresses. Using multiple IP addre | endpoint does not have multiple IP addresses. Using multiple IP addr | |||
sses | esses | |||
only makes it more likely to require multiple IP/UDP flows. | only makes it more likely that multiple IP/UDP flows will be | |||
Another example is SDP media descriptions (the "m=" line and the | required. Another example is SDP media descriptions (the "m=" line a | |||
following associated lines) that signal the transport flow and RTP s | nd the | |||
ession | subsequent associated lines) that signal the transport flow and RTP | |||
session | ||||
configuration for the endpoint's part of the RTP session. The SDP gr ouping | configuration for the endpoint's part of the RTP session. The SDP gr ouping | |||
framework | framework | |||
<xref target="RFC5888"/> | <xref target="RFC5888" format="default"/> | |||
allows labeling of the media descriptions to be used so that | allows labeling of the media descriptions to be used so that | |||
RTP Session Groups can be created. Through use of Negotiating Media | RTP Session Groups can be created. Through the use of | |||
Multiplexing | <xref target="RFC8843">"Negotiating Media Multiplexing Using the | |||
Using the Session Description Protocol (SDP) | Session Description Protocol (SDP)"</xref>, | |||
<xref target="I-D.ietf-mmusic-sdp-bundle-negotiation"/>, | ||||
multiple media descriptions become part of a common RTP session wher e each | multiple media descriptions become part of a common RTP session wher e each | |||
media description represents the RTP streams sent or received for a media source.</t> | media description represents the RTP streams sent or received for a media source.</t> | |||
<t>The RTP protocol makes no normative statements about the | <t>RTP makes no normative statements about the | |||
relationship between different RTP sessions, however the application | relationship between different RTP sessions; however, applications | |||
s | that use more than one RTP session need to understand how the | |||
that use more than one RTP session will have some higher layer | different RTP sessions that they create relate to one another.</t> | |||
understanding of the relationship between the sessions they create.< | ||||
/t> | ||||
</section> | </section> | |||
<section anchor="section-3.2.2" title="Synchronisation Source (SSRC)"> | <section anchor="sect-3.2.2" numbered="true" toc="default"> | |||
<t>A synchronisation source (SSRC) identifies a source of an RTP | <name>Synchronization Source (SSRC)</name> | |||
<t>An SSRC identifies a source of an RTP | ||||
stream, or an RTP receiver when sending RTCP. Every endpoint has at | stream, or an RTP receiver when sending RTCP. Every endpoint has at | |||
least one SSRC identifier, even if it does not send RTP packets. RTP | least one SSRC identifier, even if it does not send RTP packets. RTP | |||
endpoints that are only RTP receivers still send RTCP and use their | endpoints that are only RTP receivers still send RTCP and use their | |||
SSRC identifiers in the RTCP packets they send. An endpoint can have | SSRC identifiers in the RTCP packets they send. An endpoint can have | |||
multiple SSRC identifiers if it sends multiple RTP streams. Endpoint s | multiple SSRC identifiers if it sends multiple RTP streams. Endpoint s | |||
that are both RTP sender and RTP receiver use the same SSRC(s) in | that function as both RTP sender and RTP receiver use the same SSRC( s) in | |||
both roles.</t> | both roles.</t> | |||
<t>The SSRC is a 32-bit identifier. It is present in every RTP and | <t>The SSRC is a 32-bit identifier. It is present in every RTP and | |||
RTCP packet header, and in the payload of some RTCP packet types. It | RTCP packet header and in the payload of some RTCP packet types. It | |||
can also be present in SDP signalling. Unless pre-signalled, e.g. | can also be present in SDP signaling. Unless presignaled, e.g., | |||
using the SDP "a=ssrc:" attribute | using the SDP "a=ssrc:" attribute | |||
<xref target="RFC5576"/>, the SSRC is chosen at random. It is not | <xref target="RFC5576" format="default"/>, the SSRC is chosen at ran | |||
dependent on the network address of the endpoint, and is intended to | dom. It is not | |||
be unique within an RTP session. SSRC collisions can occur, and are | dependent on the network address of the endpoint and is intended to | |||
be unique within an RTP session. SSRC collisions can occur and are | ||||
handled as specified in | handled as specified in | |||
<xref target="RFC3550"/> | <xref target="RFC3550" format="default"/> | |||
and | and | |||
<xref target="RFC5576"/>, resulting in the SSRC of the colliding RTP | <xref target="RFC5576" format="default"/>, resulting in the SSRC of the colliding RTP | |||
streams or receivers changing. An endpoint that changes | streams or receivers changing. An endpoint that changes | |||
its network transport address during a session has to choose a new | its network transport address during a session has to choose a new | |||
SSRC identifier to avoid being interpreted as looped source, unless | SSRC identifier to avoid being interpreted as a looped source, unles | |||
a mechanism providing a virtual transport (such as ICE | s | |||
<xref target="RFC8445"/>) abstracts the changes.</t> | a mechanism providing a virtual transport (such as Interactive | |||
<t>SSRC identifiers that belong to the same synchronisation context | Connectivity Establishment (ICE) | |||
(i.e., that represent RTP streams that can be synchronised using | <xref target="RFC8445" format="default"/>) abstracts the changes.</t | |||
> | ||||
<t>SSRC identifiers that belong to the same synchronization context | ||||
(i.e., that represent RTP streams that can be synchronized using | ||||
information in RTCP SR packets) use identical CNAME chunks in | information in RTCP SR packets) use identical CNAME chunks in | |||
corresponding RTCP SDES packets. SDP signalling can also be used to | corresponding RTCP source description (SDES) packets. SDP signaling can also be used to | |||
provide explicit SSRC grouping | provide explicit SSRC grouping | |||
<xref target="RFC5576"/>.</t> | <xref target="RFC5576" format="default"/>.</t> | |||
<t>In some cases, the same SSRC identifier value is used to relate | <t>In some cases, the same SSRC identifier value is used to relate | |||
streams in two different RTP sessions, such as in RTP retransmission | streams in two different RTP sessions, such as in RTP retransmission | |||
<xref target="RFC4588"/>. This is to be avoided since there is no | <xref target="RFC4588" format="default"/>. This is to be avoided, si | |||
guarantee that SSRC values are unique across RTP sessions. For the R | nce there is no | |||
TP | guarantee that SSRC values are unique across RTP sessions. In the | |||
retransmission | case of RTP retransmission | |||
<xref target="RFC4588"/> | <xref target="RFC4588" format="default"/>, | |||
case it is recommended to use explicit binding of the source RTP | it is recommended to use explicit binding of the source RTP | |||
stream and the redundancy stream, e.g. using the RepairedRtpStreamId | stream and the redundancy stream, e.g., using the RepairedRtpStreamI | |||
RTCP SDES item <xref target="I-D.ietf-avtext-rid"/>. The | d | |||
RepairedRtpStreamId is a rather recent mechanism, so one cannot expec | RTCP SDES item <xref target="RFC8852" format="default"/>. The | |||
t | RepairedRtpStreamId is a rather recent mechanism, so one cannot expe | |||
older applications to follow this recommendation. | ct | |||
</t> | older applications to follow this recommendation. | |||
<t>Note that RTP sequence number and RTP timestamp are scoped by the | </t> | |||
SSRC and thus specific per RTP stream.</t> | <t>Note that the RTP sequence number and RTP timestamp are scoped by t | |||
he | ||||
<t>Different types of entities use an SSRC to identify themselves, as | SSRC and are thus specific per RTP stream.</t> | |||
follows: | <t>Different types of entities use an SSRC to identify themselves, as | |||
</t> | follows: | |||
<t> | </t> | |||
<list hangIndent="3" style="hanging"> | <ul spacing="normal"> | |||
<t hangText="A real media source:">Uses the SSRC to identify a "phy | <li>A real media source uses the SSRC to identify a "physical" media | |||
sical" | source.</li> | |||
media source.</t> | <li>A conceptual media source uses the SSRC to identify the result o | |||
<t hangText="A conceptual media source:">Uses the SSRC to identify | f | |||
the result of | applying some filtering function in a network node -- for exampl | |||
applying some filtering function in a network node, for example | e, a | |||
a | ||||
filtering function in an RTP mixer that provides the most active | filtering function in an RTP mixer that provides the most active | |||
speaker based on some criteria, or a mix representing a set of o ther | speaker based on some criteria, or a mix representing a set of o ther | |||
sources.</t> | sources.</li> | |||
<t hangText="An RTP receiver:">Uses the SSRC to identify itself as | <li>An RTP receiver uses the SSRC to identify itself as the | |||
the | source of its RTCP reports.</li> | |||
source of its RTCP reports.</t> | </ul> | |||
</list> | <t>An endpoint that generates more than one media type, e.g., | |||
</t> | ||||
<t>An endpoint that generates more than one media type, e.g. | ||||
a conference participant sending both audio and video, need not (and , | a conference participant sending both audio and video, need not (and , | |||
indeed, should not) use the same SSRC value across RTP sessions. RTC | indeed, should not) use the same SSRC value across RTP | |||
P compound | sessions. Using RTCP compound | |||
packets containing the CNAME SDES item is the designated method to | packets containing the CNAME SDES item is the designated method for | |||
bind an SSRC to a CNAME, effectively cross-correlating SSRCs within | binding an SSRC to a CNAME, effectively cross-correlating SSRCs with | |||
and between RTP Sessions as coming from the same endpoint. The main | in | |||
and between RTP sessions as coming from the same endpoint. The main | ||||
property attributed to SSRCs associated with the same CNAME is that | property attributed to SSRCs associated with the same CNAME is that | |||
they are from a particular synchronisation context and can be | they are from a particular synchronization context and can be | |||
synchronised at playback.</t> | synchronized at playback.</t> | |||
<t>An RTP receiver receiving a previously unseen SSRC value will | <t>An RTP receiver receiving a previously unseen SSRC value will | |||
interpret it as a new source. It might in fact be a previously | interpret it as a new source. It might in fact be a previously | |||
existing source that had to change SSRC number due to an SSRC | existing source that had to change its SSRC number due to an SSRC | |||
conflict. Use of the MID extension | conflict. Using the media identification (MID) extension | |||
<xref target="I-D.ietf-mmusic-sdp-bundle-negotiation"/> helps to ide | <xref target="RFC8843" format="default"/> helps to identify | |||
ntify | which media source the new SSRC represents, and using the | |||
which media source the new SSRC represents and use of the RID extensi | restriction identifier (RID) extension | |||
on | <xref target="RFC8851" format="default"/> helps to identify what enc | |||
<xref target="I-D.ietf-mmusic-rid"/> helps to identify what encoding | oding | |||
or redundancy stream it represents, even though the SSRC changed. | or redundancy stream it represents, even though the SSRC changed. | |||
However, the originator of the previous SSRC ought to have | However, the originator of the previous SSRC ought to have | |||
ended the conflicting source by sending an RTCP BYE for it prior to | ended the conflicting source by sending an RTCP BYE for it prior to | |||
starting to send with the new SSRC, making the new SSRC a new source .</t> | starting to send with the new SSRC, making the new SSRC a new source .</t> | |||
</section> | </section> | |||
<section anchor="section-3.2.3" title="Contributing Source (CSRC)"> | <section anchor="sect-3.2.3" numbered="true" toc="default"> | |||
<t>The Contributing Source (CSRC) is not a separate identifier. Rather | <name>Contributing Source (CSRC)</name> | |||
<t>The CSRC is not a separate identifier. Rather, | ||||
an SSRC identifier is listed as a CSRC in the RTP header of a packet | an SSRC identifier is listed as a CSRC in the RTP header of a packet | |||
generated by an RTP mixer or video MCU/switch, if the corresponding | generated by an RTP mixer or video Multipoint Control Unit (MCU) / | |||
SSRC | switch, if the corresponding SSRC | |||
was in the header of one of the packets that contributed to the outp ut.</t> | was in the header of one of the packets that contributed to the outp ut.</t> | |||
<t>It is not possible, in general, to extract media represented by an | <t>It is not possible, in general, to extract media represented by an | |||
individual CSRC since it is typically the result of a media merge | individual CSRC, since it is typically the result of a media merge | |||
(e.g. mix) operation on the individual media streams | (e.g., mix) operation on the individual media streams | |||
corresponding to the CSRC identifiers. The exception is the case whe | corresponding to the CSRC identifiers. The exception is the case whe | |||
n | re | |||
only a single CSRC is indicated as this represent forwarding of an R | only a single CSRC is indicated, as this represents the forwarding o | |||
TP | f an RTP | |||
stream, possibly modified. The RTP header extension for | stream that might have been modified. The RTP header extension (<xre | |||
Mixer-to-Client Audio Level Indication | f target="RFC6465">"A Real-time Transport Protocol (RTP) | |||
<xref target="RFC6465"/> | Header Extension for Mixer-to-Client Audio Level Indication"</xref>) | |||
expands on the receiver's information about a packet with a CSRC lis t. | expands on the receiver's information about a packet with a CSRC lis t. | |||
Due to these restrictions, CSRC will not be considered a fully | Due to these restrictions, a CSRC will not be considered a fully | |||
qualified multiplexing point and will be disregarded in the rest of | qualified multiplexing point and will be disregarded in the rest of | |||
this document.</t> | this document.</t> | |||
</section> | </section> | |||
<section anchor="section-3.2.4" title="RTP Payload Type"> | <section anchor="sect-3.2.4" numbered="true" toc="default"> | |||
<t>Each RTP stream utilises one or more RTP payload formats. An RTP | <name>RTP Payload Type</name> | |||
<t>Each RTP stream utilizes one or more RTP payload formats. An RTP | ||||
payload format describes how the output of a particular media codec is | payload format describes how the output of a particular media codec is | |||
framed and encoded into RTP packets. The payload format is | framed and encoded into RTP packets. The payload format is | |||
identified by the payload type (PT) field in the RTP packet header. | identified by the payload type (PT) field in the RTP packet header. | |||
The combination of SSRC and PT therefore identifies a specific RTP s tream | The combination of SSRC and PT therefore identifies a specific RTP s tream | |||
in a specific encoding format. The format definition can be taken fro | in a specific encoding format. The format definition can be taken fr | |||
m | om | |||
<xref target="RFC3551"/> | <xref target="RFC3551" format="default"/> | |||
for statically allocated payload types, but ought to be explicitly | for statically allocated payload types but ought to be explicitly | |||
defined in signalling, such as SDP, both for static and dynamic | defined in signaling, such as SDP, for both static and dynamic | |||
payload types. The term "format" here includes those aspects describ ed | payload types. The term "format" here includes those aspects describ ed | |||
by out-of-band signalling means; in SDP, the term "format" includes | by out-of-band signaling means; in SDP, the term "format" includes | |||
media type, RTP timestamp sampling rate, codec, codec configuration, | media type, RTP timestamp sampling rate, codec, codec configuration | |||
payload format configurations, and various robustness mechanisms such | , | |||
as redundant encodings <xref target="RFC2198"/>.</t> | payload format configurations, and various robustness mechanisms suc | |||
h | ||||
as redundant encodings <xref target="RFC2198" format="default"/>.</t | ||||
> | ||||
<t>The RTP payload type is scoped by the sending endpoint within an | <t>The RTP payload type is scoped by the sending endpoint within an | |||
RTP session. PT has the same meaning across all RTP streams in an RT P | RTP session. PT has the same meaning across all RTP streams in an RT P | |||
session. All SSRCs sent from a single endpoint share the same payloa d | session. All SSRCs sent from a single endpoint share the same payloa d | |||
type definitions. The RTP payload type is designed such that only a | type definitions. The RTP payload type is designed such that only a | |||
single payload type is valid at any time instant in the RTP stream's | single payload type is valid at any instant in time in the RTP strea | |||
timestamp time line, effectively time-multiplexing different payload | m's | |||
timestamp timeline, effectively time-multiplexing different payload | ||||
types if any change occurs. The payload type can change on a | types if any change occurs. The payload type can change on a | |||
per-packet basis for an SSRC, for example a speech codec making use of | per-packet basis for an SSRC -- for example, a speech codec making u se of | |||
generic comfort noise | generic comfort noise | |||
<xref target="RFC3389"/>. If there is a true need to send multiple | <xref target="RFC3389" format="default"/>. If there is a true need t o send multiple | |||
payload types for the same SSRC that are valid for the same instant, | payload types for the same SSRC that are valid for the same instant, | |||
then redundant encodings | then redundant encodings | |||
<xref target="RFC2198"/> | <xref target="RFC2198" format="default"/> | |||
can be used. Several additional constraints than the ones mentioned | can be used. Several additional constraints, other than those mentio | |||
above need to be met to enable this use, one of which is that the | ned | |||
above, need to be met to enable this usage, one of which is that the | ||||
combined payload sizes of the different payload types ought not exce ed | combined payload sizes of the different payload types ought not exce ed | |||
the transport MTU.</t> | the transport MTU.</t> | |||
<t>Other aspects of RTP payload format use are described in How to | <t>Other aspects of using the RTP payload format are described in | |||
Write an RTP Payload Format | <xref target="RFC8088">"How to Write an RTP Payload Format"</xref>.< | |||
<xref target="RFC8088"/>.</t> | /t> | |||
<t>The payload type is not a multiplexing point at the RTP layer (see | <t>The payload type is not a multiplexing point at the RTP layer (see | |||
<xref target="section-a"/> | <xref target="sect-a" format="default"/> | |||
for a detailed discussion of why using the payload type as an RTP | for a detailed discussion of why using the payload type as an RTP | |||
multiplexing point does not work). The RTP payload type is, however, | multiplexing point does not work). The RTP payload type is, however, | |||
used to determine how to consume and decode an RTP stream. The RTP | used to determine how to consume and decode an RTP stream. The RTP | |||
payload type number is sometimes used to associate an RTP stream wit h | payload type number is sometimes used to associate an RTP stream wit h | |||
the signalling, which in general requires that unique RTP payload | the signaling, which in general requires that unique RTP payload | |||
type numbers are used in each context. Use of MID, e.g. when bundlin | type numbers be used in each context. Using MID, e.g., when bundling | |||
g "m=" sections | "m=" sections | |||
<xref target="I-D.ietf-mmusic-sdp-bundle-negotiation"/>, | <xref target="RFC8843" format="default"/>, | |||
can replace the payload type as signalling association and unique | can replace the payload type as a signaling association, and unique | |||
RTP payload types are then no longer required for that purpose.</t> | RTP payload types are then no longer required for that purpose.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section | <section anchor="sect-3.3" numbered="true" toc="default"> | |||
anchor="section-3.3" | <name>Issues Related to RTP Topologies</name> | |||
title="Issues Related to RTP Topologies"> | ||||
<t>The impact of how RTP multiplexing is performed will in general | <t>The impact of how RTP multiplexing is performed will in general | |||
vary with how the RTP session participants are interconnected, | vary with how the RTP session participants are interconnected, | |||
described by RTP Topology | as described in | |||
<xref target="RFC7667"/>.</t> | <xref target="RFC7667">"RTP Topologies"</xref>.</t> | |||
<t>Even the most basic use case, denoted Topo-Point-to-Point in | <t>Even the most basic use case -- "Topo-Point-to-Point" as described in | |||
<xref target="RFC7667"/>, raises a number of considerations that are | <xref target="RFC7667" format="default"/> -- raises a number of | |||
discussed in detail in following sections. They range over such | considerations, which are | |||
aspects as:</t> | discussed in detail in the following sections. They range over such | |||
<t> | aspects as the following:</t> | |||
<list style="symbols"> | <ul spacing="normal"> | |||
<t>Does my communication peer support RTP as defined with multiple | <li>Does my communication peer support RTP as defined with multiple | |||
SSRCs per RTP session?</t> | SSRCs per RTP session?</li> | |||
<t>Do I need network differentiation in form of QoS | <li>Do I need network differentiation in the form of QoS | |||
(<xref target="section-4.2.1"/>)?</t> | (<xref target="sect-4.2.1" format="default"/>)?</li> | |||
<t>Can the application more easily process and handle the media | <li>Can the application more easily process and handle the media | |||
streams if they are in different RTP sessions?</t> | streams if they are in different RTP sessions?</li> | |||
<t>Do I need to use additional RTP streams for RTP retransmission or | <li>Do I need to use additional RTP streams for RTP retransmission or | |||
FEC?</t> | FEC?</li> | |||
</list> | </ul> | |||
</t> | <t>For some point-to-multipoint topologies (e.g., Topo-ASM and | |||
<t>For some point to multi-point topologies (e.g. Topo-ASM and | Topo-SSM | |||
Topo-SSM in | <xref target="RFC7667" format="default"/>), multicast is used to inter | |||
<xref target="RFC7667"/>), multicast is used to interconnect the | connect the | |||
session participants. Special considerations (documented in | session participants. Special considerations (documented in | |||
<xref target="section-4.2.3"/>) are then needed as multicast is a | <xref target="sect-4.2.3" format="default"/>) are then needed, as mult icast is a | |||
one-to-many distribution system.</t> | one-to-many distribution system.</t> | |||
<t>Sometimes an RTP communication can end up in a situation when the | <t>Sometimes, an RTP communication session can end up in a situation whe | |||
communicating peers are not compatible for various reasons:</t> | re the | |||
<t> | communicating peers are not compatible, for various reasons:</t> | |||
<list style="symbols"> | <ul spacing="normal"> | |||
<t>No common media codec for a media type thus requiring transcoding | <li>No common media codec for a media type, thus requiring transcoding | |||
.</t> | .</li> | |||
<t>Different support for multiple RTP streams and RTP sessions.</t> | <li>Different support for multiple RTP streams and RTP sessions.</li> | |||
<t>Usage of different media transport protocols, i.e., RTP or other. | <li>Usage of different media transport protocols (i.e., one peer | |||
</t> | uses RTP, but the other peer uses a different transport protocol).</li | |||
<t>Usage of different transport protocols, e.g., UDP, DCCP, or TCP.< | > | |||
/t> | <li>Usage of different transport protocols, e.g., UDP, the Datagram | |||
<t>Different security solutions, e.g., IPsec, TLS, DTLS, or SRTP wit | Congestion Control Protocol (DCCP), or TCP.</li> | |||
h | <li>Different security solutions (e.g., IPsec, TLS, DTLS, or the | |||
different keying mechanisms.</t> | Secure Real-time Transport Protocol (SRTP)) with | |||
</list> | different keying mechanisms.</li> | |||
</t> | </ul> | |||
<t>In many situations this is resolved by the inclusion of a | <t>These compatibility issues can often be resolved by the inclusion of | |||
translator between the two peers, as described by Topo-PtP-Translator | a | |||
in | translator between the two peers -- the Topo-PtP-Translator, as | |||
<xref target="RFC7667"/>. The translator's main purpose is to make the | described in | |||
peers look compatible to each other. There can also be other reasons | <xref target="RFC7667" format="default"/>. The translator's main purpo | |||
than compatibility to insert a translator in the form of a middlebox | se is to make the | |||
or gateway, for example a need to monitor the RTP streams. Beware that | peers look compatible to each other. There can also be reasons other | |||
than compatibility for inserting a translator in the form of a middleb | ||||
ox | ||||
or gateway -- for example, a need to monitor the RTP streams. Beware t | ||||
hat | ||||
changing the stream transport characteristics in the translator | changing the stream transport characteristics in the translator | |||
can require thorough understanding of aspects from congestion control | can require a thorough understanding of aspects ranging from congestio | |||
and media adaptation to application-layer semantics.</t> | n control | |||
<t>Within the uses enabled by the RTP standard, the point to point | and media-level adaptations to application-layer semantics.</t> | |||
topology can contain one or more RTP sessions | <t>Within the uses enabled by the RTP standard, the point-to-point | |||
topology can contain one or more RTP sessions | ||||
with one or more media sources per session, each having one or more | with one or more media sources per session, each having one or more | |||
RTP streams per media source.</t> | RTP streams per media source.</t> | |||
</section> | </section> | |||
<section | <section anchor="sect-3.4" numbered="true" toc="default"> | |||
anchor="section-3.4" | <name>Issues Related to RTP and RTCP</name> | |||
title="Issues Related to RTP and RTCP Protocol"> | ||||
<t>Using multiple RTP streams is a well-supported feature of RTP. | <t>Using multiple RTP streams is a well-supported feature of RTP. | |||
However, for most implementers or people writing RTP/RTCP applications | However, for most implementers or people writing RTP/RTCP applications | |||
or extensions attempting to apply multiple streams, it can be unclear | or extensions attempting to apply multiple streams, it can be unclear | |||
when it is most appropriate to add an additional RTP stream in an | when it is most appropriate to add an additional RTP stream in an | |||
existing RTP session and when it is better to use multiple RTP | existing RTP session and when it is better to use multiple RTP | |||
sessions. This section discusses the various considerations needed.</t | sessions. This section discusses the various considerations that | |||
> | need to be taken into account.</t> | |||
<section anchor="section-3.4.1" title="The RTP Specification"> | <section anchor="sect-3.4.1" numbered="true" toc="default"> | |||
<t>RFC 3550 contains some recommendations and a bullet list with 5 | <name>The RTP Specification</name> | |||
arguments for different aspects of RTP multiplexing. Please review | <t>RFC 3550 contains some | |||
Section 5.2 of <xref target="RFC3550"/>. Five important aspects | recommendations and a numbered list (<xref target="RFC3550" | |||
are quoted below.</t> | sectionFormat="of" section="5.2"/>) of five arguments regarding differ | |||
<t><list hangIndent="3" style="hanging"> | ent | |||
<t hangText="1.">If, say, two audio streams shared the same RTP sessi | aspects of RTP multiplexing. Please review <xref target="RFC3550" | |||
on and the same | sectionFormat="of" section="5.2"/>. Five important aspects are | |||
quoted below.</t> | ||||
<ol spacing="normal" type="1"> | ||||
<li><blockquote>If, say, two audio streams shared the same RTP sessi | ||||
on and the same | ||||
SSRC value, and one were to change encodings and thus acquire a | SSRC value, and one were to change encodings and thus acquire a | |||
different RTP payload type, there would be no general way of | different RTP payload type, there would be no general way of | |||
identifying which stream had changed encodings.</t></list> | identifying which stream had changed encodings.</blockquote> | |||
</t> | <t>This argument advocates the use of different SSRCs for each individ | |||
<t>The first argument is to use different SSRC for each individual RTP | ual RTP | |||
stream, which is fundamental to RTP operation.</t> | stream, as this is fundamental to RTP operation.</t></li> | |||
<t><list hangIndent="3" style="hanging"> | <li><blockquote>An SSRC is defined to identify a single timing and s | |||
<t hangText="2.">An SSRC is defined to identify a single timing and s | equence number | |||
equence number | ||||
space. Interleaving multiple payload types would require differe nt | space. Interleaving multiple payload types would require differe nt | |||
timing spaces if the media clock rates differ and would require | timing spaces if the media clock rates differ and would require | |||
different sequence number spaces to tell which payload type suff ered | different sequence number spaces to tell which payload type suff ered | |||
packet loss.</t></list> | packet loss.</blockquote> | |||
</t> | <t>This argument advocates against demultiplexing RTP | |||
<t>The second argument is advocating against demultiplexing RTP | streams within a session based only on their RTP payload type number | |||
streams within a session based only on their RTP payload type number | s; | |||
s, | it still stands, as can be seen by the extensive list of issues | |||
which still stands as can been seen by the extensive list of issues | discussed in <xref target="sect-a"/>.</t></li> | |||
found in Appendix A.</t> | <!-- Note: "Section 6.4" is in RFC 3550, so no xref --> | |||
<t><list hangIndent="3" style="hanging"> | <li><blockquote>The RTCP sender and receiver reports (see Section 6. | |||
<t hangText="3.">The RTCP sender and receiver reports (see Section 6. | 4) can only | |||
4) can only | ||||
describe one timing and sequence number space per SSRC and do no t | describe one timing and sequence number space per SSRC and do no t | |||
carry a payload type field.</t></list> | carry a payload type field.</blockquote> | |||
</t> | <t>This argument is yet another argument against payload type | |||
<t>The third argument is yet another argument against payload type | multiplexing.</t></li> | |||
multiplexing.</t> | <li><blockquote>An RTP mixer would not be able to combine interleave | |||
<t><list hangIndent="3" style="hanging"> | d streams of | |||
<t hangText="4.">An RTP mixer would not be able to combine interleave | incompatible media into one stream.</blockquote> | |||
d streams of | <t>This argument advocates against multiplexing RTP packets that | |||
incompatible media into one stream.</t></list> | require different handling into the same session. In most cases, | |||
</t> | the RTP mixer must embed application logic | |||
<t>The fourth argument is against multiplexing RTP packets that | ||||
require different handling into the same session. In most cases | ||||
the RTP mixer must embed application logic | ||||
to handle streams; the separation of streams according to | to handle streams; the separation of streams according to | |||
stream type is just another piece of application logic, which might or | stream type is just another piece of application logic, which might or | |||
might not be appropriate for a particular application. One type of | might not be appropriate for a particular application. One type of | |||
application that can mix different media sources blindly is the | application that can mix different media sources blindly is the | |||
audio-only telephone bridge, although the ability to do that comes | audio-only telephone bridge, although the ability to do that comes | |||
from the well-defined scenario that is aided by use of a single medi a | from the well-defined scenario that is aided by the use of a single media | |||
type, even though individual streams may use incompatible codec type s; | type, even though individual streams may use incompatible codec type s; | |||
most other types of applications need application-specific logic to | most other types of applications need application-specific logic to | |||
perform the mix correctly.</t> | perform the mix correctly.</t></li> | |||
<t><list hangIndent="3" style="hanging"> | <li><blockquote><t>Carrying multiple media in one RTP session preclu | |||
<t hangText="5.">Carrying multiple media in one RTP session precludes | des: the use of | |||
: the use of | ||||
different network paths or network resource allocations if | different network paths or network resource allocations if | |||
appropriate; reception of a subset of the media if desired, for | appropriate; reception of a subset of the media if desired, for | |||
example just audio if video would exceed the available bandwidth ; and | example just audio if video would exceed the available bandwidth ; and | |||
receiver implementations that use separate processes for the dif ferent | receiver implementations that use separate processes for the dif ferent | |||
media, whereas using separate RTP sessions permits either single - or | media, whereas using separate RTP sessions permits either single - or | |||
multiple-process implementations.</t></list></t> | multiple-process implementations.</t></blockquote> | |||
<t>The fifth argument discusses network aspects that are described in | <t>This argument discusses network aspects that are described in | |||
<xref target="section-4.2"/>. It also goes into aspects of | <xref target="sect-4.2" format="default"/>. It also goes into aspect | |||
implementation, like Split Component Terminal (see Section 3.10 of | s of | |||
<xref target="RFC7667"/>) endpoints where different processes or | implementation, like split component terminals (see | |||
inter-connected devices handle different aspects of the whole | <xref target="RFC7667" sectionFormat="of" section="3.10"/>) -- endpo | |||
multi-media session.</t> | ints where different processes or | |||
<t>A summary of RFC 3550's view on multiplexing is to use unique SSRC | interconnected devices handle different aspects of the whole | |||
s | multimedia session.</t></li> | |||
for anything that is its own media/packet stream, and to use | </ol> | |||
different RTP sessions for media streams that don't share a media | <t>To summarize, RFC 3550's view on multiplexing is to use unique SSRC | |||
type. This document supports the first point; it is very valid. The | s | |||
latter needs further discussion, as imposing a single solution on all | for anything that is its own media/packet stream and use | |||
usages of RTP is inappropriate. "Multiple Media Types in an RTP | different RTP sessions for media streams that don't share a media | |||
Session specification" <xref target="I-D.ietf-avtcore-multi-media-rtp | type. This document supports the first point; it is very valid. Th | |||
-session"/> | e | |||
updates RFC 3550 to allow multiple media types in a RTP session. | latter needs further discussion, as imposing a single solution on al | |||
It also provides a detailed analysis of the potential benefits | l | |||
and issues in having | usages of RTP is inappropriate. <xref target="RFC8860">"Sending | |||
multiple media types in the same RTP session. Thus, that document pr | Multiple Types of Media in a Single RTP Session"</xref> | |||
ovides | updates RFC 3550 to allow multiple media types in an RTP session | |||
a wider scope for an RTP session and considers multiple media types | and provides a detailed analysis of the potential benefits | |||
in one RTP session as a possible choice for the RTP application | and issues related to having | |||
designer.</t> | multiple media types in the same RTP session. Thus, <xref target="R | |||
</section> | FC8860"/> provides | |||
<section anchor="section-3.4.2" title="Multiple SSRCs in a Session"> | a wider scope for an RTP session and considers multiple media types | |||
in one RTP session as a possible choice for the RTP application | ||||
designer.</t> | ||||
</section> | ||||
<section anchor="sect-3.4.2" numbered="true" toc="default"> | ||||
<name>Multiple SSRCs in a Session</name> | ||||
<t>Using multiple SSRCs at one endpoint in an RTP session requires | <t>Using multiple SSRCs at one endpoint in an RTP session requires | |||
resolving some unclear aspects of the RTP specification. These could | that some unclear aspects of the RTP specification be resolved. These | |||
potentially lead to some interoperability issues as well as some | items could potentially lead to some interoperability issues as | |||
potential significant inefficiencies, as further discussed in "RTP | well as some potential significant inefficiencies, as further | |||
Considerations for Endpoints Sending Multiple Media Streams" | discussed in "Sending Multiple RTP Streams in a Single RTP Session" | |||
<xref target="RFC8108"/>. An RTP application designer should conside | <xref target="RFC8108" format="default"/>. An RTP | |||
r | application designer should consider these issues and the | |||
these issues and the possible application impact from lack of | application's possible impact caused by a lack of appropriate RTP hand | |||
appropriate RTP handling or optimization in the peer endpoints.</t> | ling or | |||
optimization in the peer endpoints.</t> | ||||
<t>Using multiple RTP sessions can potentially mitigate application | <t>Using multiple RTP sessions can potentially mitigate application | |||
issues caused by multiple SSRCs in an RTP session.</t> | issues caused by multiple SSRCs in an RTP session.</t> | |||
</section> | </section> | |||
<section anchor="section-3.4.3" title="Binding Related Sources"> | <section anchor="sect-3.4.3" numbered="true" toc="default"> | |||
<name>Binding Related Sources</name> | ||||
<t>A common problem in a number of various RTP extensions has been how | <t>A common problem in a number of various RTP extensions has been how | |||
to bind related RTP streams together. This issue is common to both | to bind related RTP streams together. This issue is common to both | |||
using additional SSRCs and multiple RTP sessions.</t> | using additional SSRCs and multiple RTP sessions.</t> | |||
<t>The solutions can be divided into a few groups:</t> | <t>The solutions can be divided into a few groups:</t> | |||
<t> | <ul spacing="normal"> | |||
<list style="symbols"> | <li>RTP/RTCP based</li> | |||
<t>RTP/RTCP based</t> | <li>Signaling based, e.g., SDP</li> | |||
<t>Signalling based, e.g. SDP</t> | <li>Grouping related RTP sessions</li> | |||
<t>Grouping related RTP sessions</t> | <li>Grouping SSRCs within an RTP session</li> | |||
<t>Grouping SSRCs within an RTP session</t> | </ul> | |||
</list> | ||||
</t> | ||||
<t>Most solutions are explicit, but some implicit methods have also | <t>Most solutions are explicit, but some implicit methods have also | |||
been applied to the problem.</t> | been applied to the problem.</t> | |||
<t>The SDP-based signalling solutions are:</t> | <t>The SDP-based signaling solutions are:</t> | |||
<t> | <dl newline="true" spacing="normal"> | |||
<list hangIndent="3" style="hanging"> | <dt>SDP media description grouping:</dt> | |||
<t hangText="SDP Media Description Grouping:">The SDP Grouping Fra | <dd>The SDP grouping framework <xref target="RFC5888" | |||
mework | format="default"/> uses various semantics to group any number of | |||
<xref target="RFC5888"/> | media descriptions. SDP media description grouping has primarily | |||
<vspace blankLines="0"/> | been used to group RTP sessions, | |||
uses various semantics to group any number of media descriptions | but in combination with <xref target="RFC8843" format="default"/>, | |||
. | it can also group multiple media descriptions within a single RTP | |||
This has primarily been grouping RTP sessions, but in combinatio | session.</dd> | |||
n with | <dt>SDP media multiplexing:</dt> | |||
<xref target="I-D.ietf-mmusic-sdp-bundle-negotiation"/> | <dd><xref target="RFC8843">"Negotiating Media | |||
it can also group multiple media descriptions within a single RT | Multiplexing Using the Session Description Protocol (SDP)"</xref> | |||
P session.</t> | uses information taken from both SDP and RTCP to associate RTP streams to SDP me | |||
<t hangText="SDP Media Multiplexing:">Negotiating Media Multiplexi | dia | |||
ng Using | descriptions. This allows both SDP and RTCP to group RTP streams bel | |||
the Session Description Protocol (SDP) | onging to | |||
<xref target="I-D.ietf-mmusic-sdp-bundle-negotiation"/> | an SDP media description and group multiple SDP media | |||
<vspace blankLines="0"/> | descriptions into a single RTP session.</dd> | |||
uses both SDP and RTCP information to associate RTP streams to S | <dt>SDP SSRC grouping:</dt> | |||
DP media | <dd><xref target="RFC5576">"Source-Specific Media Attributes in | |||
descriptions. This allows both to group RTP streams belonging to | the Session Description Protocol (SDP)"</xref> includes a solution f | |||
an SDP | or grouping | |||
media description, and to group multiple SDP media descriptions | SSRCs in the same | |||
into a | way that the grouping framework groups media descriptions.</dd> | |||
single RTP session.</t> | </dl> | |||
<t hangText="SDP SSRC grouping:">Source-Specific Media Attributes | ||||
in SDP | ||||
<xref target="RFC5576"/> | ||||
<vspace blankLines="0"/> | ||||
includes a solution for grouping SSRCs the same way as the Group | ||||
ing | ||||
framework groups Media Descriptions.</t> | ||||
</list> | ||||
</t> | ||||
<t>The above grouping constructs support many use cases. Those solutio ns have | <t>The above grouping constructs support many use cases. Those solutio ns have | |||
shortcomings in cases where the session's dynamic properties are suc h | shortcomings in cases where the session's dynamic properties are suc h | |||
that it is difficult or a drain on resources to keep the list of rel ated | that it is difficult or a drain on resources to keep the list of rel ated | |||
SSRCs up to date.</t> | SSRCs up to date.</t> | |||
<t>An RTP/RTCP-based grouping solution is to use the RTCP SDES CNAME t | <t>One RTP/RTCP-based grouping solution is to use the RTCP SDES CNAME | |||
o bind | to bind | |||
related RTP streams to an endpoint or to a synchronization context. | related RTP streams to an endpoint or a synchronization context. For | |||
For | applications with a single RTP stream per type (media, source, or | |||
applications with a single RTP stream per type (media, source or | redundancy stream), the CNAME is sufficient for that purpose, indepe | |||
redundancy stream), CNAME is sufficient for that purpose independent | ndent of whether one or more RTP sessions | |||
ly of whether one or more RTP sessions | are used. However, some applications choose not to use a CNAME becau | |||
are used. However, some applications choose not to use CNAME because | se of | |||
of | ||||
perceived complexity or a desire not to implement RTCP and instead u se | perceived complexity or a desire not to implement RTCP and instead u se | |||
the same SSRC value to bind related RTP streams across multiple RTP | the same SSRC value to bind related RTP streams across multiple RTP | |||
sessions. RTP Retransmission | sessions. RTP retransmission | |||
<xref target="RFC4588"/> | <xref target="RFC4588" format="default"/>, | |||
in multiple RTP session mode and Generic FEC | when configured to use multiple RTP sessions, and generic FEC | |||
<xref target="RFC5109"/> | <xref target="RFC5109" format="default"/> | |||
both use the CNAME method to relate the RTP streams, which may work but might have some | both use the CNAME method to relate the RTP streams, which may work but might have some | |||
downsides in RTP sessions with many participating SSRCs. It is not r ecommended to | downsides in RTP sessions with many participating SSRCs. It is not r ecommended to | |||
use identical SSRC values across RTP sessions to relate RTP streams; | use identical SSRC values across RTP sessions to relate RTP streams; | |||
When an SSRC | when an SSRC | |||
collision occurs, this will force change of that SSRC in all RTP | collision occurs, this will force a change of that SSRC in all RTP | |||
sessions and thus resynchronize all of them instead of only the sing | sessions and will thus resynchronize all of the streams instead of o | |||
le | nly the single | |||
media stream having the collision.</t> | media stream experiencing the collision.</t> | |||
<t>Another method to implicitly bind SSRCs is used by RTP | <t>Another method for implicitly binding SSRCs is used by RTP | |||
Retransmission | retransmission | |||
<xref target="RFC4588"/> | <xref target="RFC4588" format="default"/> | |||
when using the same RTP session as the source RTP stream for retrans missions. | when using the same RTP session as the source RTP stream for retrans missions. | |||
The receiver missing a packet issues an RTP retransmission | A receiver that is missing a packet issues an RTP retransmission | |||
request, and then awaits a new SSRC carrying the RTP retransmission | request and then awaits a new SSRC carrying the RTP retransmission | |||
payload and where that SSRC is from the same CNAME. This limits a | payload, where that SSRC is from the same CNAME. This limits a | |||
requester to having only one outstanding retransmission request on a ny | requester to having only one outstanding retransmission request on a ny | |||
new source SSRCs per endpoint.</t> | new SSRCs per endpoint.</t> | |||
<t>RTP Payload Format Restrictions | <t><xref target="RFC8851">"RTP Payload Format Restrictions"</xref> | |||
<xref target="I-D.ietf-mmusic-rid"/> | provides an RTP/RTCP-based mechanism to unambiguously identify the R | |||
provides an RTP/RTCP based mechanism to unambiguously identify the R | TP | |||
TP | ||||
streams within an RTP session and restrict the streams' payload form at | streams within an RTP session and restrict the streams' payload form at | |||
parameters in a codec-agnostic way beyond what is provided with the | parameters in a codec-agnostic way beyond what is provided with the | |||
regular payload types. The mapping is done by specifying an "a=rid" | regular payload types. The mapping is done by specifying an "a=rid" | |||
value in the SDP offer/answer signalling and having the correspondin | value in the SDP offer/answer signaling and having the corresponding | |||
g | RtpStreamId value as an SDES item and an RTP header extension | |||
RtpStreamId value as an SDES item and an RTP header extension. The | <xref target="RFC8852"/>. The | |||
RID solution also includes a solution for binding redundancy RTP | RID solution also includes a solution for binding redundancy RTP | |||
streams to their original source RTP streams, given that those use R | streams to their original source RTP streams, given that those | |||
ID | streams use RID | |||
identifiers.</t> | identifiers. The redundancy stream uses the RepairedRtpStreamId | |||
<t>Experience has found that an explicit binding between the RTP str | SDES item and RTP header extension to declare the RtpStreamId | |||
eams, | value of the source stream to create the binding.</t> | |||
agnostic of SSRC values, behaves well. That way, solutions using | <t>Experience has shown that an explicit binding between the RTP strea | |||
ms, | ||||
agnostic of SSRC values, behaves well. That way, solutions using | ||||
multiple RTP streams in a single RTP session and in multiple RTP ses sions | multiple RTP streams in a single RTP session and in multiple RTP ses sions | |||
will use the same type of binding.</t> | will use the same type of binding.</t> | |||
</section> | </section> | |||
<section anchor="section-3.4.4" title="Forward Error Correction"> | <section anchor="sect-3.4.4" numbered="true" toc="default"> | |||
<t>There exist a number of Forward Error Correction (FEC) based | <name>Forward Error Correction</name> | |||
schemes for how to mitigate packet loss in the original streams. | <t>There exist a number of FEC-based schemes designed to mitigate pack | |||
Most of the FEC schemes protect a single source flow. The | et loss in the original streams. | |||
Most of the FEC schemes protect a single source flow. This | ||||
protection is achieved by transmitting a certain amount of redundant | protection is achieved by transmitting a certain amount of redundant | |||
information that is encoded such that it can repair one or more pack | information that is encoded such that it can repair one or more | |||
et | instances of packet | |||
losses over the set of packets the redundant information protects. | loss over the set of packets the redundant information protects. | |||
This sequence of redundant information needs to be transmitted as | This sequence of redundant information needs to be transmitted as | |||
its own media stream, or in some cases, instead of the original medi a | its own media stream or, in some cases, instead of the original medi a | |||
stream. Thus, many of these schemes create a need for binding relate d | stream. Thus, many of these schemes create a need for binding relate d | |||
flows as discussed above. Looking at the history of these schemes, | flows, as discussed above. Looking at the history of these schemes, | |||
there are schemes using multiple SSRCs and schemes using multiple RT P | there are schemes using multiple SSRCs and schemes using multiple RT P | |||
sessions, and some schemes that support both modes of operation.</t> | sessions, and some schemes that support both modes of operation.</t> | |||
<t>Using multiple RTP sessions supports the case where some set of | <t>Using multiple RTP sessions supports the case where some set of | |||
receivers might not be able to utilise the FEC information. By placi | receivers might not be able to utilize the FEC information. By placi | |||
ng | ng | |||
it in a separate RTP session and if separating RTP sessions on | it in a separate RTP session and if separating RTP sessions at the | |||
transport level, FEC can easily be ignored already on the transport | transport level, FEC can easily be ignored at the transport level, | |||
level, | without considering any RTP-layer information.</t> | |||
without considering any RTP layer information.</t> | <t>In usages involving multicast, sending FEC information in a separat | |||
<t>In usages involving multicast, having the FEC information on its | e multicast group allows for similar flexibility. This is especially | |||
own multicast group allows for similar flexibility. This is especial | ||||
ly | ||||
useful when receivers see heterogeneous packet loss rates. A receive r | useful when receivers see heterogeneous packet loss rates. A receive r | |||
can decide, based on measurement of experienced packet loss rates, | can decide, based on measurement of experienced packet loss rates, | |||
whether to join a multicast group with the suitable FEC data repair | whether to join a multicast group with suitable FEC data repair | |||
capabilities.</t> | capabilities.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section | <section anchor="sect-4" numbered="true" toc="default"> | |||
anchor="section-4" | <name>Considerations for RTP Multiplexing</name> | |||
title="Considerations for RTP Multiplexing"> | <section anchor="sect-4.1" numbered="true" toc="default"> | |||
<section anchor="section-4.1" title="Interworking Considerations"> | <name>Interworking Considerations</name> | |||
<t>There are several different kinds of interworking, and this section | <t>There are several different kinds of interworking, and this section | |||
discusses two; interworking directly between different applications, a | discusses two: interworking directly between different applications an | |||
nd | d | |||
interworking of applications through an RTP Translator. The discussion | the interworking of applications through an RTP translator. The discus | |||
includes | sion includes | |||
the implications of potentially different RTP multiplexing point | the implications of potentially different RTP multiplexing point | |||
choices and limitations that have to be considered when working with | choices and limitations that have to be considered when working with | |||
some legacy applications.</t> | some legacy applications.</t> | |||
<section anchor="section-4.1.1" title="Application Interworking"> | <section anchor="sect-4.1.1" numbered="true" toc="default"> | |||
<name>Application Interworking</name> | ||||
<t>It is not uncommon that applications or services of similar but not | <t>It is not uncommon that applications or services of similar but not | |||
identical usage, especially the ones intended for interactive | identical usage, especially those intended for interactive | |||
communication, encounter a situation where one want to interconnect | communication, encounter a situation where one wants to interconnect | |||
two or more of these applications.</t> | two or more of these applications.</t> | |||
<t>In these cases, one ends up in a situation where one might use a | <t>In these cases, one ends up in a situation where one might use a | |||
gateway to interconnect applications. This gateway must then either | gateway to interconnect applications. This gateway must then either | |||
change the multiplexing structure or adhere to the respective | change the multiplexing structure or adhere to the respective | |||
limitations in each application.</t> | limitations in each application.</t> | |||
<t>There are two fundamental approaches to building a gateway: using | <t>There are two fundamental approaches to building a gateway: using | |||
RTP Translator interworking (RTP bridging), where the gateway acts | RTP translator interworking (RTP bridging), where the gateway acts | |||
as an RTP Translator with the two interconnected applications being | as an RTP translator with the two interconnected applications being | |||
members of the same RTP session; or using Gateway Interworking with | members of the same RTP session; or using gateway interworking | |||
(<xref target="sect-4.1.3"/>) with | ||||
RTP termination, where there are independent RTP sessions between | RTP termination, where there are independent RTP sessions between | |||
each interconnected application and the gateway.</t> | each interconnected application and the gateway.</t> | |||
<t>For interworking to be feasible, any security solution in use needs | <t>For interworking to be feasible, any security solution in use needs | |||
to be compatible and capable of exchanging keys with either the peer | to be compatible and capable of exchanging keys with either the peer | |||
or the gateway under the used trust model. Secondly, the applications | or the gateway under the trust model being used. Secondly, the appli | |||
need to use media streams in a way that makes sense in both applicati | cations | |||
ons. | need to use media streams in a way that makes sense in both applicat | |||
</t> | ions. | |||
</t> | ||||
</section> | </section> | |||
<section anchor="section-4.1.2" title="RTP Translator Interworking"> | <section anchor="sect-4.1.2" numbered="true" toc="default"> | |||
<t>From an RTP perspective, the RTP Translator approach could work if | <name>RTP Translator Interworking</name> | |||
<t>From an RTP perspective, the RTP translator approach could work if | ||||
all the applications are using the same codecs with the same payload | all the applications are using the same codecs with the same payload | |||
types, have made the same multiplexing choices, and have the same | types, have made the same multiplexing choices, and have the same | |||
capabilities in number of simultaneous RTP streams combined with the | capabilities regarding the number of simultaneous RTP streams combin ed with the | |||
same set of RTP/RTCP extensions being supported. Unfortunately, this | same set of RTP/RTCP extensions being supported. Unfortunately, this | |||
might not always be true.</t> | might not always be true.</t> | |||
<t>When a gateway is implemented via an RTP Translator, an important | <t>When a gateway is implemented via an RTP translator, an important | |||
consideration is if the two applications being interconnected need t o | consideration is if the two applications being interconnected need t o | |||
use the same approach to multiplexing. If one side is using RTP | use the same approach to multiplexing. If one side is using RTP | |||
session multiplexing and the other is using SSRC multiplexing with B UNDLE | session multiplexing and the other is using SSRC multiplexing with B UNDLE | |||
<xref target="I-D.ietf-mmusic-sdp-bundle-negotiation"/>, it may be p ossible | <xref target="RFC8843" format="default"/>, it may be possible | |||
for the RTP translator to map the RTP streams between both | for the RTP translator to map the RTP streams between both | |||
sides using some method, e.g. based on the number and order of SDP " | sides using some method, e.g., based on the number and order of SDP | |||
m=" | "m=" | |||
lines from each side. There are also challenges with | lines from each side. There are also challenges related to | |||
SSRC collision handling since, unless SSRC translation is applied on | SSRC collision handling, since, unless SSRC translation is applied o | |||
the | n the | |||
RTP translator, there may be a collision on the SSRC multiplexing | RTP translator, there may be a collision on the SSRC multiplexing | |||
side that the RTP session multiplexing side will not be aware of. | side that the RTP session multiplexing side will not be aware of. | |||
Furthermore, if one of the applications is capable of | Furthermore, if one of the applications is capable of | |||
working in several modes (such as being able to use additional RTP | working in several modes (such as being able to use additional RTP | |||
streams in one RTP session or multiple RTP sessions at will), and th e | streams in one RTP session or multiple RTP sessions at will) and the | |||
other one is not, successful interconnection depends on locking the | other one is not, successful interconnection depends on locking the | |||
more flexible application into the operating mode where | more flexible application into the operating mode where | |||
interconnection can be successful, even if none of the participants are using | interconnection can be successful, even if none of the participants are using | |||
the less flexible application when the RTP sessions are being create d.</t> | the less flexible application when the RTP sessions are being create d.</t> | |||
</section> | </section> | |||
<section anchor="section-4.1.3" title="Gateway Interworking"> | <section anchor="sect-4.1.3" numbered="true" toc="default"> | |||
<name>Gateway Interworking</name> | ||||
<t>When one terminates RTP sessions at the gateway, there are certain | <t>When one terminates RTP sessions at the gateway, there are certain | |||
tasks that the gateway has to carry out:</t> | tasks that the gateway has to carry out:</t> | |||
<t> | <ul spacing="normal"> | |||
<list style="symbols"> | <li>Generating appropriate RTCP reports for all RTP streams (possibl | |||
<t>Generating appropriate RTCP reports for all RTP streams (possib | y | |||
ly | based on incoming RTCP reports) originating from SSRCs controlle | |||
based on incoming RTCP reports), originating from SSRCs controll | d by | |||
ed by | the gateway.</li> | |||
the gateway.</t> | <li>Handling SSRC collision resolution in each application's RTP ses | |||
<t>Handling SSRC collision resolution in each application's RTP se | sions.</li> | |||
ssions.</t> | <li>Signaling, choosing, and policing appropriate bitrates for each | |||
<t>Signalling, choosing, and policing appropriate bit-rates for ea | session.</li> | |||
ch | </ul> | |||
session.</t> | ||||
</list> | ||||
</t> | ||||
<t>For applications that use any security mechanism, e.g., in the form | <t>For applications that use any security mechanism, e.g., in the form | |||
of SRTP, the gateway needs to be able to decrypt and verify source | of SRTP, the gateway needs to be able to decrypt and verify source | |||
integrity of the incoming packets, and re-encrypt, integrity protect, | integrity of the incoming packets and then re-encrypt, integrity pro | |||
and sign the packets as the peer in the other application's security | tect, | |||
context. | and sign the packets as the peer in the other application's security | |||
This is necessary even if all that's needed is a simple remapping of | context. | |||
SSRC | This is necessary even if all that's needed is a simple remapping of | |||
SSRC | ||||
numbers. If this is done, the gateway also needs to be a member of t he | numbers. If this is done, the gateway also needs to be a member of t he | |||
security contexts of both sides, and thus a trusted entity.</t> | security contexts of both sides and thus a trusted entity.</t> | |||
<t>The gateway might also need to apply transcoding (for | <t>The gateway might also need to apply transcoding (for | |||
incompatible codec types), media-level adaptations that cannot be | incompatible codec types), media-level adaptations that cannot be | |||
solved through media negotiation (such as rescaling for incompatible | solved through media negotiation (such as rescaling for incompatible | |||
video size requirements), suppression of content that is known not t o | video size requirements), suppression of content that is known not t o | |||
be handled in the destination application, or the addition or remova l | be handled in the destination application, or the addition or remova l | |||
of redundancy coding or scalability layers to fit the needs of the | of redundancy coding or scalability layers to fit the needs of the | |||
destination domain.</t> | destination domain.</t> | |||
<t>From the above, we can see that the gateway needs to have an | <t>From the above, we can see that the gateway needs to have an | |||
intimate knowledge of the application requirements; a gateway is by | intimate knowledge of the application requirements; a gateway is by | |||
its nature application specific, not a commodity product.</t> | its nature application specific and not a commodity product.</t> | |||
<t>These gateways might therefore potentially block | <t>These gateways might therefore potentially block | |||
application evolution by blocking RTP and RTCP extensions that the | application evolution by blocking RTP and RTCP extensions that the | |||
applications have been extended with but that are unknown to the | applications have been extended with but that are unknown to the | |||
gateway.</t> | gateway.</t> | |||
<t>If one uses security mechanism, like SRTP, the gateway and the | <t>If one uses a security mechanism like SRTP, the gateway and the | |||
necessary trust in it by the peers is an additional risk to the | necessary trust in it by the peers pose an additional risk to | |||
communication security. The gateway also incur additional complexitie | communication security. The gateway also incurs additional | |||
s in | complexities in the | |||
form of the decrypt-encrypt cycles needed for each forwarded packet. | form of the decrypt-encrypt cycles needed for each forwarded packet. | |||
SRTP, due to its keying structure, also requires that each RTP sessi on | SRTP, due to its keying structure, also requires that each RTP sessi on | |||
needs different master keys, as use of the same key in two RTP | need different master keys, as the use of the same key in two RTP | |||
sessions can for some ciphers result in a reuse of a one-time pad th | sessions can, for some ciphers, result in a reuse of a one-time pad | |||
at | that | |||
completely breaks the confidentiality of the packets.</t> | completely breaks the confidentiality of the packets.</t> | |||
</section> | </section> | |||
<section | <section anchor="sect-4.1.4" numbered="true" toc="default"> | |||
anchor="section-4.1.4" | <name>Legacy Considerations for Multiple SSRCs</name> | |||
title="Multiple SSRC Legacy Considerations"> | ||||
<t>Historically, the most common RTP use cases have been point-to-poin t | <t>Historically, the most common RTP use cases have been point-to-poin t | |||
Voice over IP (VoIP) or streaming applications, commonly with no | Voice over IP (VoIP) or streaming applications, commonly with no | |||
more than one media source per endpoint and media type (typically | more than one media source per endpoint and media type (typically | |||
audio or video). Even in conferencing applications, especially | audio or video). Even in conferencing applications, especially | |||
voice-only, the conference focus or bridge has provided a single str | voice-only, the conference focus or bridge provides to each particip | |||
eam | ant a single stream | |||
to each participant containing a mix of the other participants. It i | containing a mix of the other participants. It is | |||
s | ||||
also common to have individual RTP sessions between each endpoint an d | also common to have individual RTP sessions between each endpoint an d | |||
the RTP mixer, meaning that the mixer functions as an RTP-terminatin g | the RTP mixer, meaning that the mixer functions as an RTP-terminatin g | |||
gateway.</t> | gateway.</t> | |||
<t>Applications and systems that aren't updated to handle multiple str eams following | <t>Applications and systems that aren't updated to handle multiple str eams following | |||
these recommendations can have issues with participating in RTP | these recommendations can have issues with participating in RTP | |||
sessions containing multiple SSRCs within a single session, such as: </t> | sessions containing multiple SSRCs within a single session, such as: </t> | |||
<t> | <ol spacing="normal" type="1"> | |||
<list style="numbers"> | <li>The need to handle more than one stream simultaneously rather th | |||
<t>Need to handle more than one stream simultaneously rather than | an | |||
replacing an already existing stream with a new one.</t> | replacing an already-existing stream with a new one.</li> | |||
<t>Be capable of decoding multiple streams simultaneously.</t> | <li>Being capable of decoding multiple streams simultaneously.</li> | |||
<t>Be capable of rendering multiple streams simultaneously.</t> | <li>Being capable of rendering multiple streams simultaneously.</li> | |||
</list> | </ol> | |||
</t> | ||||
<t>This indicates that gateways attempting to interconnect to this | <t>This indicates that gateways attempting to interconnect to this | |||
class of devices have to make sure that only one RTP stream of each | class of devices have to make sure that only one RTP stream of each | |||
media type gets delivered to the endpoint if it's expecting only one , and | media type gets delivered to the endpoint if it's expecting only one and | |||
that the multiplexing format is what the device expects. It is highl y | that the multiplexing format is what the device expects. It is highl y | |||
unlikely that RTP translator-based interworking can be made to | unlikely that RTP translator-based interworking can be made to | |||
function successfully in such a context.</t> | function successfully in such a context.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="section-4.2" title="Network Considerations"> | <section anchor="sect-4.2" numbered="true" toc="default"> | |||
<name>Network Considerations</name> | ||||
<t>The RTP implementer needs to consider that the RTP multiplexing choic e | <t>The RTP implementer needs to consider that the RTP multiplexing choic e | |||
also impacts network level mechanisms.</t> | also impacts network-level mechanisms.</t> | |||
<section anchor="section-4.2.1" title="Quality of Service"> | <section anchor="sect-4.2.1" numbered="true" toc="default"> | |||
<t>Quality of Service mechanisms are either flow based or packet marki | <name>Quality of Service</name> | |||
ng | <t>QoS mechanisms are either flow based or packet marking | |||
based. RSVP | based. RSVP | |||
<xref target="RFC2205"/> | <xref target="RFC2205" format="default"/> | |||
is an example of a flow based mechanism, while Diff-Serv | is an example of a flow-based mechanism, while Diffserv | |||
<xref target="RFC2474"/> | <xref target="RFC2474" format="default"/> | |||
is an example of a packet marking based one.</t> | is an example of a packet-marking-based mechanism.</t> | |||
<t>For a flow based scheme, additional SSRC will receive the | <t>For a flow-based scheme, additional SSRCs will receive the | |||
same QoS as all other RTP streams being part of the same 5-tuple | same QoS as all other RTP streams being part of the same 5-tuple | |||
(protocol, source address, destination address, source port, | (protocol, source address, destination address, source port, | |||
destination port), which is the most common selector for flow based | destination port), which is the most common selector for flow-based | |||
QoS.</t> | QoS.</t> | |||
<t>For a packet marking based scheme, the method of multiplexing will | <t>For a packet-marking-based scheme, the method of multiplexing will | |||
not affect the possibility to use QoS. Different | not affect the possibility of using QoS. Different | |||
Differentiated Services Code Points (DSCP) can be assigned to | Differentiated Services Code Points (DSCPs) can be assigned to | |||
different packets within a transport flow (5-Tuple) as well as withi | different packets within a transport flow (5-tuple) as well as withi | |||
n an RTP stream, | n an RTP stream, | |||
assuming usage of UDP or other transport protocol that do not have is | assuming the usage of UDP or other transport protocols that do not h | |||
sues | ave issues | |||
with packet reordering within the transport flow (5-tuple). | with packet reordering within the transport flow (5-tuple). | |||
To avoid packet reording issues, packets belonging to the same RTP | To avoid packet-reordering issues, packets belonging to the same RTP | |||
flow should limits its use of DSCP to those whose corresponding | flow should limit their use of DSCPs to packets whose corresponding | |||
Per Hop Behavior (PHB) that do not enable reordering. | Per-Hop Behavior (PHB) do not enable reordering. If the transport pr | |||
If the transport protocol used assumes in order delivery of packet, | otocol being used assumes in&nbhy;order | |||
such as TCP and SCTP, then a single DSCP should be used. | delivery of packets (e.g., TCP and the Stream Control Transmission | |||
For more discussion of this see <xref target="RFC7657"/>.</t> | Protocol (SCTP)), | |||
then a single DSCP should be used. | ||||
For more discussion on this topic, see <xref target="RFC7657" format | ||||
="default"/>.</t> | ||||
<t>The method for assigning marking to packets can impact what number | <t>The method for assigning marking to packets can impact what number | |||
of RTP sessions to choose. If this marking is done using a network | of RTP sessions to choose. If this marking is done using a network | |||
ingress function, it can have issues discriminating the different RT P | ingress function, it can have issues discriminating the different RT P | |||
streams. The network API on the endpoint also needs to be capable of | streams. The network API on the endpoint also needs to be capable of | |||
setting the marking on a per-packet basis to reach the full | setting the marking on a per-packet basis to reach full | |||
functionality.</t> | functionality.</t> | |||
</section> | </section> | |||
<section anchor="section-4.2.2" title="NAT and Firewall Traversal"> | <section anchor="sect-4.2.2" numbered="true" toc="default"> | |||
<t>In today's networks there exist a large number of middleboxes. The | <name>NAT and Firewall Traversal</name> | |||
ones that normally have most impact on RTP are Network Address | <t>In today's networks, there exist a large number of middleboxes. Tho | |||
Translators (NAT) and Firewalls (FW).</t> | se | |||
<t>Below we analyse and comment on the impact of requiring more | that normally have the most impact on RTP are Network Address | |||
underlying transport flows in the presence of NATs and Firewalls:</t | Translators (NATs) and Firewalls (FWs).</t> | |||
> | <t>Below, we analyze and comment on the impact of requiring more | |||
<t> | underlying transport flows in the presence of NATs and FWs:</t> | |||
<list hangIndent="3" style="hanging"> | <dl newline="true" spacing="normal"> | |||
<t hangText="End-Point Port Consumption:">A given IP address only | <dt>Endpoint Port Consumption:</dt> | |||
has 65536 | <dd>A given IP address only has 65536 | |||
<vspace blankLines="0"/> | ||||
available local ports per transport protocol for all consumers o f | available local ports per transport protocol for all consumers o f | |||
ports that exist on the machine. This is normally never an issue for | ports that exist on the machine. This is normally never an issue for | |||
an end-user machine. It can become an issue for servers that han | an end-user machine. It can become an issue for servers that | |||
dle | handle a | |||
large number of simultaneous streams. However, if the applicatio n uses | large number of simultaneous streams. However, if the applicatio n uses | |||
ICE to authenticate STUN requests, a server can serve multiple | ICE to authenticate STUN requests, a server can serve multiple | |||
endpoints from the same local port, and use the whole 5-tuple (s ource | endpoints from the same local port and use the whole 5-tuple (so urce | |||
and destination address, source and destination port, protocol) as | and destination address, source and destination port, protocol) as | |||
identifier of flows after having securely bound them to the remo te | the identifier of flows after having securely bound them to the remote | |||
endpoint address using the STUN request. In theory, the minimum number | endpoint address using the STUN request. In theory, the minimum number | |||
of media server ports needed are the maximum number of simultane | of media server ports needed is the maximum number of simultaneo | |||
ous | us | |||
RTP sessions a single endpoint can use. In practice, implementat | RTP sessions a single endpoint can use. In practice, implementat | |||
ion | ions | |||
will probably benefit from using more server ports to simplify | will probably benefit from using more server ports to simplify | |||
implementation or avoid performance bottlenecks.</t> | implementation or avoid performance bottlenecks.</dd> | |||
<t hangText="NAT State:">If an endpoint sits behind a NAT, each fl | <dt>NAT State:</dt> | |||
ow it generates | <dd>If an endpoint sits behind a NAT, each flow it generates | |||
<vspace blankLines="0"/> | ||||
to an external address will result in a state that has to be kep t in | to an external address will result in a state that has to be kep t in | |||
the NAT. That state is a limited resource. In home or Small | the NAT. That state is a limited resource. In home or Small | |||
Office/Home Office (SOHO) NATs, memory or processing are usually | Office&wj;/Home Office (SOHO) NATs, the most limited resource is | |||
the | memory or processing. For large-scale NATs serving many internal | |||
most limited resources. For large scale NATs serving many intern | ||||
al | ||||
endpoints, available external ports are likely the scarce resour ce. | endpoints, available external ports are likely the scarce resour ce. | |||
Port limitations is primarily a problem for larger centralised N | Port limitations are primarily a problem for larger centralized | |||
ATs | NATs | |||
where endpoint independent mapping requires each flow to use one | where endpoint-independent mapping requires each flow to use one | |||
port | port | |||
for the external IP address. This affects the maximum number of | for the external IP address. This affects the maximum number of | |||
internal users per external IP address. However, as a comparison , a | internal users per external IP address. However, as a comparison , a | |||
real-time video conference session with audio and video likely u ses | real-time video conference session with audio and video likely u ses | |||
less than 10 UDP flows, compared to certain web applications tha t can | less than 10 UDP flows, compared to certain web applications tha t can | |||
use 100+ TCP flows to various servers from a single browser inst | use 100+ TCP flows to various servers from a single browser | |||
ance.</t> | instance.</dd> | |||
<t hangText="NAT Traversal Extra Delay:">Performing the NAT/FW tra | <dt>Extra Delay Added by NAT Traversal:</dt> | |||
versal takes a | <dd>Performing the NAT/FW traversal takes a | |||
<vspace blankLines="0"/> | certain amount of time for each flow. The best-case scenario for | |||
certain amount of time for each flow. It also takes time in a ph | ||||
ase of | ||||
communication between accepting to communicate and the media pat | ||||
h | ||||
being established, which is fairly critical. The best case scena | ||||
rio for | ||||
additional NAT/FW traversal time after finding the first valid c andidate | additional NAT/FW traversal time after finding the first valid c andidate | |||
pair following the specified ICE procedures is 1.5*RTT + | pair following the specified ICE procedures is 1.5*RTT + | |||
Ta*(Additional_Flows-1), where Ta is the pacing timer. That assu mes a | Ta*(Additional_Flows-1), where Ta is the pacing timer. That assu mes a | |||
message in one direction, immediately followed by a check back. | message in one direction, immediately followed by a | |||
The reason it isn't more, is that ICE first finds one candidate | return message in the opposite direction to confirm reachability. | |||
pair | It isn't more, because ICE first finds one candidate pair | |||
that works prior to attempting to establish multiple flows. Thus | that works, prior to attempting to establish multiple flows. Thu | |||
, | s, | |||
there is no extra time until one has found a working candidate p air. | there is no extra time until one has found a working candidate p air. | |||
Based on that working pair, the extra time is needed to in paral | Based on that working pair, the extra time is needed to | |||
lel | establish the additional flows (two or three, in most cases) | |||
establish the, in most cases 2-3, additional flows. However, pac | in parallel. However, packet | |||
ket | loss causes extra delays of at least 500 ms (the minimal | |||
loss causes extra delays, at least 500 ms, which is the minimal | retransmission timer for ICE).</dd> | |||
retransmission timer for ICE.</t> | <dt>NAT Traversal Failure Rate:</dt> | |||
<t hangText="NAT Traversal Failure Rate:">Due to the need to estab | <dd>Due to the need to establish more than a | |||
lish more than a | ||||
<vspace blankLines="0"/> | ||||
single flow through the NAT, there is some risk that establishin g the | single flow through the NAT, there is some risk that establishin g the | |||
first flow succeeds but that one or more of the additional flows | first flow will succeed but one or more of the additional | |||
fail. | flows will fail. | |||
The risk that this happens is hard to quantify, but ought to be | The risk of this happening is hard to quantify but should be fai | |||
fairly | rly | |||
low as one flow from the same interfaces has just been successfu | low, as one flow from the same interfaces has just been successf | |||
lly | ully | |||
established. Thus only rare events such as NAT resource overload | established. Thus, only such rare events as NAT resource overloa | |||
, or | d, | |||
selecting particular port numbers that are filtered etc., ought | selecting particular port numbers that are filtered, etc., ought | |||
to be | to be | |||
reasons for failure.</t> | reasons for failure.</dd> | |||
<t hangText="Deep Packet Inspection and Multiple Streams:">Firewal | <dt>Deep Packet Inspection and Multiple Streams:</dt> | |||
ls differ in how | <dd>FWs differ in how | |||
<vspace blankLines="0"/> | deeply they inspect packets. | |||
deeply they inspect packets. Due to all previous issues with fir | Previous experience using FWs and Session Border Gateways | |||
ewall and | (SBGs) with RTP shows that there is a significant risk that | |||
Session Boarder Gateways (SBG) with RTP transport media e.g. in V | the FWs and SBGs will reject RTP sessions that use multiple SSRC | |||
oice over | s.</dd> | |||
IP (VoIP) systems, there exists a significant risk that deeply | </dl> | |||
inspecting firewalls will have similar legacy issues with multip | ||||
le | ||||
SSRCs as some RTP stack implementations.</t> | ||||
</list> | ||||
</t> | ||||
<t>Using additional RTP streams in the same RTP session and transport | <t>Using additional RTP streams in the same RTP session and transport | |||
flow does not introduce any additional NAT traversal complexities pe r | flow does not introduce any additional NAT traversal complexities pe r | |||
RTP stream. This can be compared with normally one or two additional | RTP stream. This can be compared with (normally) one or two addition al | |||
transport flows per RTP session when using multiple RTP sessions. | transport flows per RTP session when using multiple RTP sessions. | |||
Additional lower layer transport flows will be needed, unless an | Additional lower-layer transport flows will be needed, unless an | |||
explicit de-multiplexing layer is added between RTP and the transpor | explicit demultiplexing layer is added between RTP and the transport | |||
t | protocol. At the time of this writing, no such mechanism was defined | |||
protocol. At time of writing no such mechanism was defined.</t> | .</t> | |||
</section> | </section> | |||
<section anchor="section-4.2.3" title="Multicast"> | <section anchor="sect-4.2.3" numbered="true" toc="default"> | |||
<t>Multicast groups provides a powerful tool for a number of real-time | <name>Multicast</name> | |||
applications, especially the ones that desire broadcast-like | <t>Multicast groups provide a powerful tool for a number of real-time | |||
behaviours with one endpoint transmitting to a large number of | applications, especially those that desire broadcast-like | |||
receivers, like in IPTV. There is also the RTP/RTCP extension to | behaviors with one endpoint transmitting to a large number of | |||
better support Source Specific Multicast (SSM) | receivers, like in IPTV. An RTP/RTCP extension to | |||
<xref target="RFC5760"/>. Many-to-many communication, which RTP | better support Source-Specific Multicast (SSM) | |||
<xref target="RFC3550"/> | <xref target="RFC5760" format="default"/> is also available. Many-to | |||
-many communication, which RTP | ||||
<xref target="RFC3550" format="default"/> | ||||
was originally built to support, has several limitations in common w ith | was originally built to support, has several limitations in common w ith | |||
multicast.</t> | multicast.</t> | |||
<t>One limitation is that, for any group, sender side adaptation with the | <t>One limitation is that, for any group, sender-side adaptations with the | |||
intent to suit all receivers would have to adapt to the most limited | intent to suit all receivers would have to adapt to the most limited | |||
receiver experiencing the worst conditions among the group participa nts, | receiver experiencing the worst conditions among the group participa nts, | |||
which imposes degradation for all participants. For broadcast-type | which imposes degradation for all participants. For broadcast-type | |||
applications with a large number of receivers, this is not | applications with a large number of receivers, this is not | |||
acceptable. Instead, various receiver-based solutions are employed t o | acceptable. Instead, various receiver-based solutions are employed t o | |||
ensure that the receivers achieve best possible performance. By usin g | ensure that the receivers achieve the best possible performance. By using | |||
scalable encoding and placing each scalability layer in a different | scalable encoding and placing each scalability layer in a different | |||
multicast group, the receiver can control the amount of traffic it | multicast group, the receiver can control the amount of traffic it | |||
receives. To have each scalability layer on a different multicast | receives. To have each scalability layer in a different multicast | |||
group, one RTP session per multicast group is used.</t> | group, one RTP session per multicast group is used.</t> | |||
<t>In addition, the transport flow considerations in multicast are a | <t>In addition, the transport flow considerations in multicast are a | |||
bit different from unicast; NATs with port translation are not usefu l | bit different from unicast; NATs with port translation are not usefu l | |||
in the multicast environment, meaning that the entire port range of | in the multicast environment, meaning that the entire port range of | |||
each multicast address is available for distinguishing between RTP | each multicast address is available for distinguishing between RTP | |||
sessions.</t> | sessions.</t> | |||
<t>Thus, when using broadcast applications it appears easiest and most | <t>Thus, when using broadcast applications it appears easiest and most | |||
straightforward to use multiple RTP sessions for sending different | straightforward to use multiple RTP sessions for sending different | |||
media flows used for adapting to network conditions. It is also comm on | media flows used for adapting to network conditions. It is also comm on | |||
that streams improving transport robustness are sent in their own | that streams improving transport robustness are sent in their own | |||
multicast group to allow for interworking with legacy or to support | multicast group to allow for interworking with legacy applications o r to support | |||
different levels of protection.</t> | different levels of protection.</t> | |||
<t>Many-to-many applications have different needs and the most | <t>Many-to-many applications have different needs, and the most | |||
appropriate multiplexing choice will depend on how the actual applic ation is | appropriate multiplexing choice will depend on how the actual applic ation is | |||
realized. Multicast applications that are capable of using sender si de | realized. Multicast applications that are capable of using sender-si de | |||
congestion control can avoid the use of multiple multicast sessions and RTP | congestion control can avoid the use of multiple multicast sessions and RTP | |||
sessions that result from use of receiver side congestion control.</ | sessions that result from the use of receiver-side congestion contro | |||
t> | l.</t> | |||
<t>The properties of a broadcast application using RTP multicast:</t> | <t>The properties of a broadcast application using RTP multicast are | |||
<t> | as follows:</t> | |||
<list style="numbers"> | <ol spacing="normal" type="1"> | |||
<t>Uses a group of RTP sessions, not just one. Each endpoint will | <li>The application uses a group of RTP sessions -- not just one. Ea | |||
need to | ch endpoint will need to | |||
be a member of a number of RTP sessions in order to perform well | be a member of a number of RTP sessions in order to perform well | |||
.</t> | .</li> | |||
<t>Within each RTP session, the number of RTP receivers is likely | <li>Within each RTP session, the number of RTP receivers is likely t | |||
to | o | |||
be much larger than the number of RTP senders.</t> | be much larger than the number of RTP senders.</li> | |||
<t>The applications need signalling functions to identify the | <li>The application needs signaling functions to identify the | |||
relationships between RTP sessions.</t> | relationships between RTP sessions.</li> | |||
<t>The applications need signalling or RTP/RTCP functions to ident | <li>The application needs signaling or RTP/RTCP functions to identif | |||
ify | y | |||
the relationships between SSRCs in different RTP sessions when n | the relationships between SSRCs in different RTP sessions when | |||
eeds | more complex relations than those that can be expressed by the CNAME exist.</li> | |||
beyond CNAME exist.</t> | </ol> | |||
</list> | ||||
</t> | ||||
<t>Both broadcast and many-to-many multicast applications share a | <t>Both broadcast and many-to-many multicast applications share a | |||
signalling requirement; all of the participants need the | signaling requirement; all of the participants need the | |||
same RTP and payload type configuration. Otherwise, A could for | same RTP and payload type configuration. Otherwise, A could, for | |||
example be using payload type 97 as the video codec H.264 while B | example, be using payload type 97 as the video codec H.264 while B | |||
thinks it is MPEG-2. SDP offer/answer | thinks it is MPEG-2. SDP offer/answer | |||
<xref target="RFC3264"/> | <xref target="RFC3264" format="default"/> | |||
is not appropriate for ensuring this property in broadcast/multicast | is not appropriate for ensuring this property in a broadcast/multica | |||
context. The signalling aspects of broadcast/multicast are not | st | |||
context. The signaling aspects of broadcast/multicast are not | ||||
explored further in this memo.</t> | explored further in this memo.</t> | |||
<t>Security solutions for this type of group communication are also | <t>Security solutions for this type of group communication are also | |||
challenging. First, the key-management and the security protocol nee d | challenging. First, the key-management mechanism and the security pr otocol need | |||
to support group communication. Second, source authentication requir es | to support group communication. Second, source authentication requir es | |||
special solutions. For more discussion on this please review Options | special solutions. For more discussion on this topic, please review | |||
for Securing RTP Sessions | <xref target="RFC7201">"Options for Securing RTP Sessions"</xref>.</t> | |||
<xref target="RFC7201"/>.</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section | <section anchor="sect-4.3" numbered="true" toc="default"> | |||
anchor="section-4.3" | <name>Security and Key-Management Considerations</name> | |||
title="Security and Key Management Considerations"> | <t>When dealing with point-to-point two-member RTP sessions only, there | |||
<t>When dealing with point-to-point, 2-member RTP sessions only, there | ||||
are few security issues that are relevant to the choice of having one | are few security issues that are relevant to the choice of having one | |||
RTP session or multiple RTP sessions. However, there are a few aspects | RTP session or multiple RTP sessions. However, there are a few aspects | |||
of multiparty sessions that might warrant consideration. For general | of multi-party sessions that might warrant consideration. For general | |||
information of possible methods of securing RTP, please review RTP | information regarding possible methods of securing RTP, please review | |||
Security Options | ||||
<xref target="RFC7201"/>.</t> | <xref target="RFC7201"/>.</t> | |||
<section anchor="section-4.3.1" title="Security Context Scope"> | <section anchor="sect-4.3.1" numbered="true" toc="default"> | |||
<name>Security Context Scope</name> | ||||
<t>When using SRTP | <t>When using SRTP | |||
<xref target="RFC3711"/>, | <xref target="RFC3711" format="default"/>, | |||
the security context scope is important and can be a necessary | the security context scope is important and can be a necessary | |||
differentiation in some applications. As SRTP's crypto suites are (s o | differentiation in some applications. As SRTP's crypto suites are (s o | |||
far) built around symmetric keys, the receiver will need to have the | far) built around symmetric keys, the receiver will need to have the | |||
same key as the sender. This results in that no one in a multi-party | same key as the sender. As a result, no one in a multi-party | |||
session can be certain that a received packet really was sent by the | session can be certain that a received packet was really sent by the | |||
claimed sender and not by another party having access to the key. Th e | claimed sender and not by another party having access to the key. Th e | |||
single SRTP algorithm not having this propery is the TESLA source | single SRTP algorithm not having this property is Timed | |||
authentication <xref target="RFC4383"/>. However, TESLA adds delay | Efficient Stream Loss-Tolerant Authentication (TESLA) source | |||
to achieve source authentication. In most cases, symmetric ciphers | authentication <xref target="RFC4383" format="default"/>. However, T | |||
provide sufficient security properties but create issues in a few cas | ESLA adds delay | |||
es.</t> | to achieve source authentication. In most cases, symmetric ciphers | |||
provide sufficient security properties, but in a few cases they can | ||||
create issues.</t> | ||||
<t>The first case is when someone leaves a multi-party session and one | <t>The first case is when someone leaves a multi-party session and one | |||
wants to ensure that the party that left can no longer access the RT P | wants to ensure that the party that left can no longer access the RT P | |||
streams. This requires that everyone re-keys without disclosing the | streams. This requires that everyone rekey without disclosing the | |||
new keys to the excluded party.</t> | new keys to the excluded party.</t> | |||
<t>A second case is when using security as an enforcing mechanism for | <t>A second case is when security is used as an enforcing mechanism fo | |||
stream access differentiation between different receivers. Take for | r | |||
example a scalable layer or a high quality simulcast version that on | stream access differentiation between different receivers. Take, for | |||
ly | example, a scalable layer or a high-quality simulcast version that o | |||
nly | ||||
users paying a premium are allowed to access. The mechanism preventi ng a receiver | users paying a premium are allowed to access. The mechanism preventi ng a receiver | |||
from getting the high quality stream can be based on the stream bein | from getting the high-quality stream can be based on the stream bein | |||
g | g | |||
encrypted with a key that user can't access without paying premium, | encrypted with a key that users can't access without paying a premiu | |||
using the key-management to limit access to the key.</t> | m, | |||
<t>SRTP <xref target="RFC3711"/> as specified uses per SSRC unique k | using the key-management mechanism to limit access to the key.</t> | |||
eys, | <t>As specified in <xref target="RFC3711" format="default"/>, SRTP use | |||
however the original assumption was a single session master key from | s | |||
which SSRC specific RTP and RTCP keys where derived. However, that | unique keys per SSRC; | |||
assumption was proven incorrect, as the application usage and | however, the original assumption was a single-session master key fro | |||
the developed key-mamangement mechanisms have chosen many different | m | |||
methods for ensuring SSRC unique keys. The key-management functions h | which SSRC-specific RTP and RTCP keys were derived. However, that | |||
ave different | assumption was proven incorrect, as the application usage and | |||
capabilities to establish different sets of keys, normally on a | the developed key-management mechanisms have chosen many different | |||
methods for ensuring unique keys per SSRC. The key-management functi | ||||
ons have different | ||||
abilities to establish different sets of keys, normally on a | ||||
per-endpoint basis. For example, DTLS-SRTP | per-endpoint basis. For example, DTLS-SRTP | |||
<xref target="RFC5764"/> | <xref target="RFC5764" format="default"/> | |||
and Security Descriptions | and Security Descriptions | |||
<xref target="RFC4568"/> | <xref target="RFC4568" format="default"/> | |||
establish different keys for outgoing and incoming traffic from an | establish different keys for outgoing and incoming traffic from an | |||
endpoint. This key usage has to be written into the cryptographic | endpoint. This key usage has to be written into the cryptographic | |||
context, possibly associated with different SSRCs. Thus, limitations | context, possibly associated with different SSRCs. Thus, limitations | |||
do exist depending on chosen key-management method and due to integra | do exist, depending on the chosen key-management method and due to | |||
tion | the integration | |||
of particular implementations of the key-management and SRTP.</t> | of particular implementations of the key-management method and SRTP. | |||
</t> | ||||
</section> | </section> | |||
<section | <section anchor="sect-4.3.2" numbered="true" toc="default"> | |||
anchor="section-4.3.2" | <name>Key Management for Multi-party Sessions</name> | |||
title="Key Management for Multi-party Sessions"> | <t>The capabilities of the key-management method combined with the RTP | |||
<t>The capabilities of the key-management combined with the RTP multip | multiplexing | |||
lexing | choices affect the resulting security properties, control over the | |||
choices affects the resulting security properties, control over the | secured media, and who has access to it.</t> | |||
secured media, and who have access to it.</t> | ||||
<t>Multi-party sessions contain at least one RTP stream from each acti ve | <t>Multi-party sessions contain at least one RTP stream from each acti ve | |||
participant. Depending on the multi-party topology | participant. Depending on the multi-party topology | |||
<xref target="RFC7667"/>, | <xref target="RFC7667" format="default"/>, | |||
each participant can both send and receive multiple RTP streams. | each participant can both send and receive multiple RTP streams. | |||
Transport translator-based sessions (Topo-Trn-Translator) and multic ast | Transport translator-based sessions (Topo-Trn-Translator) and multic ast | |||
sessions (Topo-ASM), can neither use Security Description | sessions (Topo-ASM) can use neither Security Descriptions | |||
<xref target="RFC4568"/> | <xref target="RFC4568" format="default"/> | |||
nor DTLS-SRTP | nor DTLS-SRTP | |||
<xref target="RFC5764"/> | <xref target="RFC5764" format="default"/> | |||
without an extension as each endpoint provides its set of keys. In | without an extension, because each endpoint provides its own set of | |||
centralised conferences, the signalling counterpart is a conference | keys. In | |||
server, and the transport translator is the media plane unicast | centralized conferences, the signaling counterpart is a conference | |||
counterpart (to which DTLS messages would be sent). Thus, an extensio | server, and the transport translator is the media-plane unicast | |||
n | counterpart (to which DTLS messages would be sent). Thus, an extensi | |||
like Encrypted Key Transport <xref target="I-D.ietf-perc-srtp-ekt-die | on | |||
t"/> | like Encrypted Key Transport <xref target="RFC8870" format="default" | |||
or a MIKEY <xref target="RFC3830"/> based solution that allows for | /> | |||
keying all session participants with the same master key is needed.</ | or a solution based on Multimedia Internet KEYing (MIKEY) <xref targ | |||
t> | et="RFC3830" format="default"/> that allows for | |||
<t>Privacy Enchanced RTP Conferencing (PERC) also enables a different | keying all session participants with the same master key is needed.< | |||
trust model with semi-trusted media switching RTP middleboxes | /t> | |||
<xref target="I-D.ietf-perc-private-media-framework"/>.</t> | <t>Privacy-Enhanced RTP Conferencing (PERC) also enables a different | |||
trust model with semi-trusted media-switching RTP middleboxes | ||||
<xref target="RFC8871" format="default"/>.</t> | ||||
</section> | </section> | |||
<section anchor="section-4.3.3" title="Complexity Implications"> | <section anchor="sect-4.3.3" numbered="true" toc="default"> | |||
<t>The usage of security functions can surface complexity implications | <name>Complexity Implications</name> | |||
from the choice of multiplexing and topology. This becomes especiall | <t>There can be complex interactions between the choice of | |||
y | multiplexing and topology and the security functions. This becomes esp | |||
ecially | ||||
evident in RTP topologies having any type of middlebox that processe s | evident in RTP topologies having any type of middlebox that processe s | |||
or modifies RTP/RTCP packets. While there is very small overhead for | or modifies RTP/RTCP packets. While the overhead of | |||
an RTP translator or mixer to rewrite an SSRC value in the RTP packe | an RTP translator or mixer rewriting an SSRC value in the RTP packet | |||
t | of an unencrypted session is low, the cost is higher when using cryp | |||
of an unencrypted session, the cost is higher when using cryptograph | tographic | |||
ic | ||||
security functions. For example, if using SRTP | security functions. For example, if using SRTP | |||
<xref target="RFC3711"/>, the actual security context and exact cryp | <xref target="RFC3711" format="default"/>, the actual security conte | |||
to | xt and exact crypto | |||
key are determined by the SSRC field value. If one changes SSRC, the | key are determined by the SSRC field value. If one changes the | |||
SSRC value, the | ||||
encryption and authentication must use another key. Thus, changing t he | encryption and authentication must use another key. Thus, changing t he | |||
SSRC value implies a decryption using the old SSRC and its security | SSRC value implies a decryption using the old SSRC and its security | |||
context, followed by an encryption using the new one.</t> | context, followed by an encryption using the new one.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="section-5" title="RTP Multiplexing Design Choices"> | <section anchor="sect-5" numbered="true" toc="default"> | |||
<name>RTP Multiplexing Design Choices</name> | ||||
<t>This section discusses how some RTP multiplexing design choices can | <t>This section discusses how some RTP multiplexing design choices can | |||
be used in applications to achieve certain goals, and a summary of the | be used in applications to achieve certain goals and summarizes the | |||
implications of such choices. For each design there is discussion of | implications of such choices. The benefits and downsides of each | |||
benefits and downsides.</t> | design are also discussed.</t> | |||
<section | <section anchor="sect-5.1" numbered="true" toc="default"> | |||
anchor="section-5.1" | <name>Multiple Media Types in One Session</name> | |||
title="Multiple Media Types in One Session"> | ||||
<t>This design uses a single RTP session for multiple different media | <t>This design uses a single RTP session for multiple different media | |||
types, like audio and video, and possibly also transport robustness | types, like audio and video, and possibly also transport robustness | |||
mechanisms like FEC or retransmission. An endpoint can send zero, one | mechanisms like FEC or retransmission. An endpoint can send zero, | |||
or more media sources per media type, resulting in a number of RTP | one, or multiple media sources per media type, resulting in a number o | |||
f RTP | ||||
streams of various media types for both source and redundancy streams. </t> | streams of various media types for both source and redundancy streams. </t> | |||
<t>The Advantages:</t> | <t>Advantages:</t> | |||
<t> | <ol spacing="normal" type="1"> | |||
<list style="numbers"> | <li> | |||
<t>Only a single RTP session is used, which implies:<list style="sym | <t>Only a single RTP session is used, which implies:</t> | |||
bols"> | <ul spacing="normal"> | |||
<t>Minimal need to keep NAT/FW state.</t> | <li>Minimal need to keep NAT/FW state.</li> | |||
<t>Minimal NAT/FW-traversal cost.</t> | <li>Minimal NAT/FW traversal cost.</li> | |||
<t>Fate-sharing for all media flows.</t> | <li>Fate-sharing for all media flows.</li> | |||
<t>Minimal overhead for security association establishment.</t> | <li>Minimal overhead for security association establishment.</li> | |||
</list> | </ul> | |||
</t> | </li> | |||
<t>Dynamic allocation of RTP streams can be handled almost entirely | <li>Dynamic allocation of RTP streams can be handled almost entirely | |||
at RTP level. | at the RTP level. | |||
How localized this can be kept to RTP level depends on the applica | The extent to which this allocation can be kept at the RTP level depen | |||
tion's needs | ds on the application's needs | |||
for explicit indication of the stream usage and how timely that ca | for an explicit indication of stream usage and in how timely a | |||
n be signalled.</t> | fashion that information can be signaled.</li> | |||
</list> | </ol> | |||
</t> | <t>Disadvantages:</t> | |||
<t>The Disadvantages:</t> | <ol spacing="normal" type="1"> | |||
<t> | <li>It is less suitable for interworking with other applications that | |||
<list style="letters"> | use | |||
<t>It is less suitable for interworking with other applications that | ||||
use | ||||
individual RTP sessions per media type or multiple sessions for a | individual RTP sessions per media type or multiple sessions for a | |||
single media type, due to the risk of SSRC collision and thus pote | single media type, due to the risk of SSRC collisions and thus a p | |||
ntial | otential | |||
need for SSRC translation.</t> | need for SSRC translation.</li> | |||
<t>Negotiation of individual bandwidths for the different media type | <li>Negotiation of individual bandwidths for the different media types | |||
s is | is | |||
currently only possible in SDP when using RID | currently only possible in SDP when using RID | |||
<xref target="I-D.ietf-mmusic-rid"/>.</t> | <xref target="RFC8851" format="default"/>.</li> | |||
<t>It is not suitable for Split Component Terminal (see Section 3.10 | <li>It is not suitable for split component terminals (see | |||
of | <xref target="RFC7667" sectionFormat="of" section="3.10"/>).</li> | |||
<xref target="RFC7667"/>).</t> | <li>Flow-based QoS cannot be used to provide separate treatment of RTP | |||
<t>Flow-based QoS cannot be used to provide separate treatment of RT | streams compared to others in the single RTP session.</li> | |||
P | <li>If there is significant asymmetry between the RTP streams' RTCP | |||
streams compared to others in the single RTP session.</t> | reporting needs, there are some challenges related to configuratio | |||
<t>If there is significant asymmetry between the RTP streams' RTCP | n and usage | |||
reporting needs, there are some challenges in configuration and us | ||||
age | ||||
to avoid wasting RTCP reporting on the RTP stream that does not ne ed | to avoid wasting RTCP reporting on the RTP stream that does not ne ed | |||
that frequent reporting.</t> | such frequent reporting.</li> | |||
<t>It is not suitable for applications where some receivers like to | <li>It is not suitable for applications where some receivers like to r | |||
receive | eceive | |||
only a subset of the RTP streams, especially if multicast or trans | only a subset of the RTP streams, especially if multicast or a tra | |||
port | nsport | |||
translator is being used.</t> | translator is being used.</li> | |||
<t>There is some additional concern with legacy implementations that | <li>There are some additional concerns regarding legacy implementation | |||
do | s that do | |||
not support the RTP specification fully when it comes to handling multiple | not support the RTP specification fully when it comes to handling multiple | |||
SSRC per endpoint, as multiple simultaneous media types are sent a | SSRCs per endpoint, as multiple simultaneous media types are sent | |||
s | as | |||
separate SSRC in the same RTP session.</t> | separate SSRCs in the same RTP session.</li> | |||
<t>If the applications need finer control over which session | <li>If the applications need finer control over which session | |||
participants are included in different sets of security | participants are included in different sets of security | |||
associations, most key-management mechanisms will have difficultie s establishing | associations, most key-management mechanisms will have difficultie s establishing | |||
such a session.</t> | such a session.</li> | |||
</list> | </ol> | |||
</t> | ||||
</section> | </section> | |||
<section | <section anchor="sect-5.2" numbered="true" toc="default"> | |||
anchor="section-5.2" | <name>Multiple SSRCs of the Same Media Type</name> | |||
title="Multiple SSRCs of the Same Media Type"> | ||||
<t>In this design, each RTP session serves only a single media type. | <t>In this design, each RTP session serves only a single media type. | |||
The RTP session can contain multiple RTP streams, either from a single | The RTP session can contain multiple RTP streams, from either a single | |||
endpoint or from multiple endpoints. This commonly creates a low | endpoint or multiple endpoints. This commonly creates a low | |||
number of RTP sessions, typically only one for audio and one for | number of RTP sessions, typically only one for audio and one for | |||
video, with a corresponding need for two listening ports when using | video, with a corresponding need for two listening ports when using | |||
RTP/RTCP multiplexing | RTP/RTCP multiplexing | |||
<xref target="RFC5761"/>.</t> | <xref target="RFC5761" format="default"/>.</t> | |||
<t>The Advantages</t> | <t>Advantages:</t> | |||
<t> | <ol spacing="normal" type="1"> | |||
<list style="numbers"> | <li>It works well with split component terminals (see <xref | |||
<t>It works well with Split Component Terminal (see Section 3.10 of | target="RFC7667" sectionFormat="of" section="3.10"/>) where the | |||
<xref target="RFC7667"/>) where the split is per media type.</t> | split is per media type.</li> | |||
<t>It enables flow-based QoS with different prioritisation between m | <li>It enables flow-based QoS with different prioritization levels bet | |||
edia | ween media | |||
types.</t> | types.</li> | |||
<t>For applications with dynamic usage of RTP streams, i.e. frequent | <li>For applications with dynamic usage of RTP streams (i.e., | |||
ly | streams are frequently | |||
added and removed, having much of the state associated with the RT | added and removed), having much of the state associated with the R | |||
P | TP | |||
session rather than per individual SSRC can avoid the need for | session rather than per individual SSRC can avoid the need for | |||
in-session signalling of meta-information about each SSRC. In the | in-session signaling of meta-information about each SSRC. In simpl | |||
simple | e | |||
cases this allows for unsignalled RTP streams where ses | cases, this allows for unsignaled RTP streams where se | |||
sion level | ssion-level | |||
information and RTCP SDES item (e.g. CNAME) are suffien | information and an RTCP SDES item (e.g., CNAME) are | |||
t. In the more | sufficient. In the more complex cases where more sourc | |||
complex cases where more source-specific metadata needs | e-specific metadata needs to be | |||
to be | signaled, the SSRC can be associated with an intermedi | |||
signalled the SSRC can be associated with an intermedia | ate identifier, | |||
te identifier, | e.g., the MID conveyed as an SDES item as defined in | |||
e.g. the MID conveyed as an SDES item as defined in Sec | <xref target="RFC8843" sectionFormat="of" section="15" | |||
tion 15 of | />.</li> | |||
<xref target="I-D.ietf-mmusic-sdp-bundle-negotiation"/> | <li>The overhead of security association establishment is low.</li> | |||
.</t> | </ol> | |||
<t>There is low overhead for security association establishment.</t> | <t>Disadvantages:</t> | |||
</list> | <ol spacing="normal" type="1"> | |||
</t> | <li> | |||
<t>The Disadvantages</t> | <t>A slightly higher number of RTP sessions are needed, compared | |||
<t> | to multiple media types in one session | |||
<list style="letters"> | (<xref target="sect-5.1" format="default"/>). This implies the fol | |||
<t>There are a slightly higher number of RTP sessions needed compare | lowing: | |||
d | ||||
to Multiple Media Types in one Session | ||||
<xref target="section-5.1"/>. This implies: | ||||
<list style="symbols"> | ||||
<t>More NAT/FW state is needed.</t> | ||||
<t>There is increased NAT/FW-traversal cost in both processing a | ||||
nd delay.</t> | ||||
</list> | ||||
</t> | </t> | |||
<t>There is some potential for concern with legacy implementations t | <ul spacing="normal"> | |||
hat don't | <li>More NAT/FW state is needed.</li> | |||
<li>The cost of NAT/FW traversal is increased in terms of both pro | ||||
cessing and delay.</li> | ||||
</ul> | ||||
</li> | ||||
<li>There is some potential for concern regarding legacy implementatio | ||||
ns that don't | ||||
support the RTP specification fully when it comes to handling mult iple | support the RTP specification fully when it comes to handling mult iple | |||
SSRC per endpoint.</t> | SSRCs per endpoint.</li> | |||
<t>It is not possible to control security association for sets of RT | <li>It is not possible to control security associations for sets of RT | |||
P | P | |||
streams within the same media type with today's key-management | streams within the same media type with today's key-management | |||
mechanisms, unless these are split into different RTP sessions | mechanisms, unless these are split into different RTP sessions | |||
(<xref target="section-5.3"/>).</t> | (<xref target="sect-5.3" format="default"/>).</li> | |||
</list> | </ol> | |||
</t> | ||||
<t>For RTP applications where all RTP streams of the same media type | <t>For RTP applications where all RTP streams of the same media type | |||
share same usage, this structure provides efficiency gains in amount | share the same usage, this structure provides efficiency gains in | |||
of network state used and provides more fate sharing with other media | the amount | |||
flows of the same type. At the same time, it is still maintaining | of network state used and provides more fate-sharing with other media | |||
flows of the same type. At the same time, it still maintains | ||||
almost all functionalities for the negotiation signaling of properties per | almost all functionalities for the negotiation signaling of properties per | |||
individual media type, and also | individual media type and also | |||
enables flow based QoS prioritisation between media types. It handles | enables flow-based QoS prioritization between media types. It handles | |||
multi-party sessions well, independently of multicast or centralised | multi-party sessions well, independently of multicast or centralized | |||
transport distribution, as additional sources can dynamically enter | transport distribution, as additional sources can dynamically enter | |||
and leave the session.</t> | and leave the session.</t> | |||
</section> | </section> | |||
<section | <section anchor="sect-5.3" numbered="true" toc="default"> | |||
anchor="section-5.3" | <name>Multiple Sessions for One Media Type</name> | |||
title="Multiple Sessions for One Media Type"> | <t>This design goes one step further than the design discussed in <xref | |||
<t>This design goes one step further than above (<xref target="section-5 | target="sect-5.2" format="default"/> | |||
.2"/>) | by also using multiple RTP sessions for a single media type. The main | |||
by using multiple RTP sessions also for a single media type. The main | ||||
reason for going in this direction is that the RTP application needs | reason for going in this direction is that the RTP application needs | |||
separation of the RTP streams due to their usage, such as e.g. scalabi | separation of the RTP streams according to their usage, such as, for e | |||
lity | xample, scalability | |||
over multicast, simulcast, need for extended QoS prioritisation, or th | over multicast, simulcast, the need for extended QoS prioritization, o | |||
e need | r the need | |||
for fine-grained signalling using RTP session-focused signalling tools | for fine-grained signaling using RTP session-focused signaling tools.< | |||
.</t> | /t> | |||
<t>The Advantages:</t> | <t>Advantages:</t> | |||
<t> | <ol spacing="normal" type="1"> | |||
<list style="numbers"> | <li>This design is more suitable for multicast usage where receivers c | |||
<t>This is more suitable for multicast usage where receivers can ind | an individually | |||
ividually | select which RTP sessions they want to participate in, assuming | |||
select which RTP sessions they want to participate in, assuming ea | that each | |||
ch | RTP session has its own multicast group.</li> | |||
RTP session has its own multicast group.</t> | <li>When multiple different usages exist, the application can | |||
<t>The application can indicate its usage of the RTP streams on RTP | indicate its usage of the RTP streams at the RTP | |||
session level, when multiple different usages exist.</t> | session level.</li> | |||
<t>There is less need for SSRC-specific explicit signalling for each | <li>There is less need for SSRC-specific explicit signaling for each m | |||
media | edia | |||
stream and thus reduced need for explicit and timely signalling wh | stream and thus a reduced need for explicit and timely signaling w | |||
en | hen | |||
RTP streams are added or removed.</t> | RTP streams are added or removed.</li> | |||
<t>It enables detailed QoS prioritisation for flow-based mechanisms. | <li>It enables detailed QoS prioritization for flow-based mechanisms.< | |||
</t> | /li> | |||
<t>It works well with Split Component Terminal (see Section 3.10 of | <li>It works well with split component terminals (see | |||
<xref target="RFC7667"/>).</t> | <xref target="RFC7667" sectionFormat="of" section="3.10"/>).</li> | |||
<t>The scope for who is included in a security association can be | <li>The scope for who is included in a security association can be | |||
structured around the different RTP sessions, thus enabling such | structured around the different RTP sessions, thus enabling such | |||
functionality with existing key-management.</t> | functionality with existing key-management mechanisms.</li> | |||
</list> | </ol> | |||
</t> | <t>Disadvantages:</t> | |||
<t>The Disadvantages:</t> | <ol spacing="normal" type="1"> | |||
<t> | <li>There is an increased amount of session configuration state compar | |||
<list style="letters"> | ed | |||
<t>There is an increased amount of session configuration state compa | to multiple SSRCs of the same media type (<xref target="sect-5.2"/ | |||
red | >), due to the increased amount | |||
to Multiple SSRCs of the Same Media Type, due to the increased amo | of RTP sessions.</li> | |||
unt | <li>For RTP streams that are part of scalability, simulcast, or | |||
of RTP sessions.</t> | transport robustness, a method for binding sources across multiple | |||
<t>For RTP streams that are part of scalability, simulcast or | RTP | |||
transport robustness, a method to bind sources across multiple RTP | sessions is needed.</li> | |||
sessions is needed.</t> | <li>There is some potential for concern regarding legacy implementatio | |||
<t>There is some potential for concern with legacy implementations t | ns that | |||
hat | ||||
don't support the RTP specification fully when it comes to handlin g | don't support the RTP specification fully when it comes to handlin g | |||
multiple SSRC per endpoint.</t> | multiple SSRCs per endpoint.</li> | |||
<t>There is higher overhead for security association establishment, | <li>The overhead of security association establishment is higher, due | |||
due | to the increased number of RTP sessions.</li> | |||
to the increased number of RTP sessions.</t> | <li>If the applications need finer control over which participants | |||
<t>If the applications need more fine-grained control than per RTP s | in a given RTP session are included in different sets of | |||
ession | security associations, most of today's key-management mechanisms | |||
over which participants that are included in different sets of sec | will have difficulties establishing such a session.</li> | |||
urity | </ol> | |||
associations, most of today's key-management will have difficultie | <t>For more-complex RTP applications that have several different | |||
s | usages for RTP streams of the same media type or that use scalability | |||
establishing such a session.</t> | or | |||
</list> | simulcast, this solution can enable those functions, at the cost of | |||
</t> | ||||
<t>For more complex RTP applications that have several different | ||||
usages for RTP streams of the same media type, or uses scalability or | ||||
simulcast, this solution can enable those functions at the cost of | ||||
increased overhead associated with the additional sessions. This type | increased overhead associated with the additional sessions. This type | |||
of structure is suitable for more advanced applications as well as | of structure is suitable for more-advanced applications as well as | |||
multicast-based applications requiring differentiation to different | multicast-based applications requiring differentiation to different | |||
participants.</t> | participants.</t> | |||
</section> | </section> | |||
<section anchor="section-5.4" title="Single SSRC per Endpoint"> | <section anchor="sect-5.4" numbered="true" toc="default"> | |||
<t>In this design each endpoint in a point-to-point session has only a | <name>Single SSRC per Endpoint</name> | |||
single SSRC, thus the RTP session contains only two SSRCs, one local | <t>In this design, each endpoint in a point-to-point session has only a | |||
and one remote. This session can be used both unidirectional, i.e. | single SSRC; thus, the RTP session contains only two SSRCs -- one loca | |||
only a single RTP stream, or bi-directional, i.e. both endpoints have | l | |||
one RTP stream each. If the application needs additional media flows | and one remote. This session can be used either unidirectionally | |||
(i.e., one SSRC sends an RTP stream that is received by the other | ||||
SSRC) or bidirectionally (i.e., the two SSRCs both send an RTP | ||||
stream and receive the RTP stream sent by the other endpoint). | ||||
If the application needs additional media flows | ||||
between the endpoints, it will have to establish additional RTP | between the endpoints, it will have to establish additional RTP | |||
sessions.</t> | sessions.</t> | |||
<t>The Advantages:</t> | <t>Advantages:</t> | |||
<t> | <ol spacing="normal" type="1"> | |||
<list style="numbers"> | <li>This design has great potential for interoperability with legacy | |||
<t>This design has great legacy interoperability potential as it wil | applications, as it will | |||
l | not tax any RTP stack implementations.</li> | |||
not tax any RTP stack implementations.</t> | <li>The signaling system makes it possible to negotiate and describe | |||
<t>The signalling has good possibilities to negotiate and describe t | the exact formats and bitrates for each RTP stream, especially | |||
he | using today's tools in SDP.</li> | |||
exact formats and bitrates for each RTP stream, especially using | <li>It is possible to control security associations per RTP stream wit | |||
today's tools in SDP.</t> | h | |||
<t>It is possible to control security association per RTP stream wit | current key-management functions, since each RTP stream is directl | |||
h | y related to | |||
current key-management, since each RTP stream is directly related | an RTP session and the most commonly used keying mechanisms operat | |||
to | e on a | |||
an RTP session, and the most used keying mechanisms operates on a | per-session basis.</li> | |||
per-session basis.</t> | </ol> | |||
</list> | <t>Disadvantages:</t> | |||
</t> | <ol spacing="normal" type="1"> | |||
<t>The Disadvantages:</t> | <li>The amount of NAT/FW state grows linearly with the number | |||
<t> | of RTP streams.</li> | |||
<list style="letters"> | <li>NAT/FW traversal increases delay and resource consumption.</li> | |||
<t>There is a linear growth of the amount of NAT/FW state with numbe | <li>There are likely more signaling message and signaling processing | |||
r | requirements due to the increased amount of session-related inform | |||
of RTP streams.</t> | ation.</li> | |||
<t>There is increased delay and resource consumption from | <li>There is higher potential for a single RTP stream to fail during | |||
NAT/FW-traversal.</t> | transport between the endpoints, due to the need for a separate | |||
<t>There are likely larger signalling message and signalling process | NAT/FW traversal for every RTP stream, since there is only one str | |||
ing | eam per session.</li> | |||
requirements due to the increased amount of session-related inform | <li>The amount of explicit state for relating RTP streams grows, depen | |||
ation.</t> | ding | |||
<t>There is higher potential for a single RTP stream to fail during | on how the application relates RTP streams.</li> | |||
transport between the endpoints, due to the need for separate NAT/ | <li>Port consumption might become a problem for centralized | |||
FW- | ||||
traversal for every RTP stream since there is only one stream per | ||||
session.</t> | ||||
<t>The amount of explicit state for relating RTP streams grows, depe | ||||
nding | ||||
on how the application relates RTP streams.</t> | ||||
<t>The port consumption might become a problem for centralised | ||||
services, where the central node's port or 5-tuple filter consumpt ion | services, where the central node's port or 5-tuple filter consumpt ion | |||
grows rapidly with the number of sessions.</t> | grows rapidly with the number of sessions.</li> | |||
<t>For applications where the RTP stream usage is highly dynamic, i. | <li>For applications where RTP stream usage is highly dynamic, | |||
e. | i.e., entities frequently enter and leave sessions, the amount of sign | |||
entering and leaving, the amount of signalling can become high. Is | aling can become high. Issues | |||
sues | ||||
can also arise from the need for timely establishment of additiona l RTP | can also arise from the need for timely establishment of additiona l RTP | |||
sessions.</t> | sessions.</li> | |||
<t>If, against the recommendation, the same SSRC value is reused in | <li>If, against the recommendation in <xref target="RFC3550"/>, the sa | |||
me SSRC value is reused in | ||||
multiple RTP sessions rather than being randomly chosen, interwork ing | multiple RTP sessions rather than being randomly chosen, interwork ing | |||
with applications that use a different multiplexing structure will | with applications that use a different multiplexing structure will | |||
require SSRC translation.</t> | require SSRC translation.</li> | |||
</list> | </ol> | |||
</t> | ||||
<t>RTP applications with a strong need to interwork with legacy RTP | <t>RTP applications with a strong need to interwork with legacy RTP | |||
applications can potentially benefit from this structure. However, a | applications can potentially benefit from this structure. However, a | |||
large number of media descriptions in SDP can also run into issues | large number of media descriptions in SDP can also run into issues | |||
with existing implementations. For any application needing a larger | with existing implementations. For any application needing a larger | |||
number of media flows, the overhead can become very significant. This | number of media flows, the overhead can become very significant. This | |||
structure is also not suitable for non-mixed multi-party sessions, as any given | structure is also not suitable for non-mixed multi-party sessions, as any given | |||
RTP stream from each participant, although having same usage in the | RTP stream from each participant, although having the same usage in th e | |||
application, needs its own RTP session. In addition, the dynamic | application, needs its own RTP session. In addition, the dynamic | |||
behaviour that can arise in multi-party applications can tax the | behavior that can arise in multi-party applications can tax the | |||
signalling system and make timely media establishment more difficult.< | signaling system and make timely media establishment more difficult.</ | |||
/t> | t> | |||
</section> | </section> | |||
<section anchor="section-5.5" title="Summary"> | <section anchor="sect-5.5" numbered="true" toc="default"> | |||
<t>Both the | <name>Summary</name> | |||
"Single SSRC per Endpoint" and the "Multiple Media Types in One | <t>Both the "single SSRC per endpoint" (<xref | |||
Session" are cases that require full explicit signalling of the media | target="sect-5.4"/>) and "multiple media types in one | |||
stream relations. However, they operate on two different levels where | session" (<xref target="sect-5.1"/>) cases require full explicit signa | |||
the first primarily enables session level binding, and the second | ling of the media | |||
needs SSRC level binding. From another perspective, the two solutions | stream relationships. However, they operate on two different levels, w | |||
are the two extreme points when it comes to number of RTP sessions | here | |||
the first primarily enables session-level binding and the second | ||||
needs SSRC-level binding. From another perspective, the two solutions | ||||
are the two extremes when it comes to the number of RTP sessions | ||||
needed.</t> | needed.</t> | |||
<t>The two other designs, "Multiple SSRCs of the Same Media Type" and | <t>The two other designs -- multiple SSRCs of the same media type | |||
"Multiple Sessions for One Media Type", are two examples that primaril | (<xref target="sect-5.2"/>) and | |||
y | multiple sessions for one media type (<xref target="sect-5.3"/>) -- ar | |||
allows for some implicit mapping of the role or usage of the RTP | e two examples that primarily | |||
streams based on which RTP session they appear in. It thus potentially | allow for some implicit mapping of the role or usage of the RTP | |||
allows for less signalling and in particular reduces the need for | streams based on which RTP session they appear in. Thus, they potentia | |||
real-time signalling in sessions with dynamically changing number | lly | |||
allow for less signaling and, in particular, reduce the need for | ||||
real-time signaling in sessions with a dynamically changing number | ||||
of RTP streams. They also represent points | of RTP streams. They also represent points | |||
in-between the first two designs when it comes to amount of RTP | between the first two designs when it comes to the amount of RTP | |||
sessions established, i.e. representing an attempt to balance the | sessions established, i.e., they represent an attempt to balance the | |||
amount of RTP sessions with the functionality the communication | amount of RTP sessions with the functionality the communication | |||
session provides both on network level and on signalling level.</t> | session provides at both the network level and the signaling level.</t > | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="section-6" title="Guidelines"> | <section anchor="sect-6" numbered="true" toc="default"> | |||
<name>Guidelines</name> | ||||
<t>This section contains a number of multi-stream guidelines for | <t>This section contains a number of multi-stream guidelines for | |||
implementers, system designers, or specification writers.</t> | implementers, system designers, and specification writers.</t> | |||
<t> | <dl newline="true" spacing="normal"> | |||
<list hangIndent="3" style="hanging"> | <dt>Do not require the use of the same SSRC value across RTP sessions:</ | |||
<t hangText="Do not require use of the same SSRC value across RTP sess | dt> | |||
ions:"> | <dd> | |||
<vspace blankLines="0"/> | As discussed in <xref target="sect-3.4.3" format="default"/>, | |||
As discussed in <xref target="section-3.4.3"/> | there are downsides to using the same SSRC in multiple RTP sessions | |||
there exist drawbacks in using the same SSRC in multiple RTP session | ||||
s | ||||
as a mechanism to bind related RTP streams together. It is instead | as a mechanism to bind related RTP streams together. It is instead | |||
recommended to use a mechanism to explicitly signal the relation, | recommended to use a mechanism to explicitly signal the relationship | |||
either in RTP/RTCP or in the signalling mechanism used to establish | , | |||
the RTP session(s).</t> | in either RTP&wj;/RTCP or the signaling mechanism used to establish | |||
<t hangText="Use additional RTP streams for additional media sources:" | the RTP session(s).</dd> | |||
>In | <dt>Use additional RTP streams for additional media sources:</dt> | |||
the cases where an RTP endpoint needs to transmit additional RTP | <dd>In | |||
the cases where an RTP endpoint needs to transmit additional RTP | ||||
streams of the same media type in the application, with the same | streams of the same media type in the application, with the same | |||
processing requirements at the network and RTP layers, it is suggest ed | processing requirements at the network and RTP layers, it is suggest ed | |||
to send them in the same RTP session. For example a telepresence roo | to send them in the same RTP session. For example, in the case of a | |||
m | telepresence room | |||
where there are three cameras, and each camera captures 2 persons | where there are three cameras and each camera captures two persons | |||
sitting at the table, sending each camera as its own RTP stream with | sitting at the table, we suggest that each camera send its own RTP s | |||
in | tream within | |||
a single RTP session is suggested.</t> | a single RTP session.</dd> | |||
<t hangText="Use additional RTP sessions for streams with different re | <dt>Use additional RTP sessions for streams with different requirements: | |||
quirements:"> | </dt> | |||
When RTP streams have different processing requirements from the netw | <dd> | |||
ork or | When RTP streams have different processing requirements from the net | |||
work or | ||||
the RTP layer at the endpoints, it is suggested that the different | the RTP layer at the endpoints, it is suggested that the different | |||
types of streams are put in different RTP sessions. This includes th e | types of streams be put in different RTP sessions. This includes the | |||
case where different participants want different subsets of the set of | case where different participants want different subsets of the set of | |||
RTP streams.</t> | RTP streams.</dd> | |||
<t hangText="When using multiple RTP sessions, use grouping:"> When | <dt>Use grouping when using multiple RTP sessions:</dt> | |||
<dd> When | ||||
using multiple RTP session solutions, it is suggested to explicitly | using multiple RTP session solutions, it is suggested to explicitly | |||
group the involved RTP sessions when needed using a signalling | group the involved RTP sessions when needed using a signaling | |||
mechanism, for example The Session Description Protocol (SDP) Groupi | mechanism -- for example, see <xref target="RFC5888">"The Session | |||
ng | Description Protocol (SDP) Grouping Framework"</xref> -- using some | |||
Framework | appropriate grouping semantics.</dd> | |||
<xref target="RFC5888"/>, using some appropriate grouping semantics. | <dt>Ensure that RTP/RTCP extensions support multiple RTP streams as well | |||
</t> | as multiple RTP sessions:</dt> | |||
<t | <dd>When | |||
hangText="RTP/RTCP Extensions Support Multiple RTP Streams as Well a | ||||
s Multiple RTP Sessions:">When | ||||
defining an RTP or RTCP extension, the creator needs to consider if | defining an RTP or RTCP extension, the creator needs to consider if | |||
this extension is applicable to use with additional SSRCs and multip le | this extension is applicable for use with additional SSRCs and multi ple | |||
RTP sessions. Any extension intended to be generic must support both . | RTP sessions. Any extension intended to be generic must support both . | |||
Extensions that are not as generally applicable will have to conside r | Extensions that are not as generally applicable will have to conside r | |||
if interoperability is better served by defining a single solution o | whether interoperability is better served by defining a single solut | |||
r | ion or | |||
providing both options.</t> | providing both options.</dd> | |||
<t hangText="Extensions for Transport Support:">When defining new RTP/ | <dt>Provide adequate extensions for transport support:</dt> | |||
RTCP | <dd>When defining new RTP/RTCP | |||
extensions intended for transport support, like the retransmission o r | extensions intended for transport support, like the retransmission o r | |||
FEC mechanisms, they must include support for both multiple RTP | FEC mechanisms, they must include support for both multiple RTP | |||
streams in the same RTP session and multiple RTP sessions, such that | streams in the same RTP session and multiple RTP sessions, such that | |||
application developers can choose freely from the set of mechanisms | application developers can choose freely from the set of mechanisms | |||
without concerning themselves with which of the multiplexing choices a | without concerning themselves with which of the multiplexing choices a | |||
particular solution supports.</t> | particular solution supports.</dd> | |||
</list> | </dl> | |||
</t> | ||||
</section> | </section> | |||
<section anchor="section-8" title="IANA Considerations"> | <section anchor="sect-8" numbered="true" toc="default"> | |||
<t>This document makes no request of IANA.</t> | <name>IANA Considerations</name> | |||
<t>Note to RFC Editor: this section can be removed on publication as | <t>This document has no IANA actions.</t> | |||
an RFC.</t> | ||||
</section> | </section> | |||
<section anchor="section-9" title="Security Considerations"> | <section anchor="sect-9" numbered="true" toc="default"> | |||
<t>The security considerations of the RTP specification | <name>Security Considerations</name> | |||
<xref target="RFC3550"/>, | <t>The security considerations discussed in the RTP specification | |||
<xref target="RFC3550" format="default"/>; | ||||
any applicable RTP profile | any applicable RTP profile | |||
<xref target="RFC3551"/>,<xref target="RFC4585"/>,<xref target="RFC3711" | <xref target="RFC3551" format="default"/> <xref target="RFC4585" | |||
/>, | format="default"/> <xref target="RFC3711" format="default"/>; | |||
and the extensions for sending multiple media types in a single RTP | and the extensions for sending multiple media types in a single RTP | |||
session | session | |||
<xref target="I-D.ietf-avtcore-multi-media-rtp-session"/>, RID | <xref target="RFC8860" format="default"/>, RID | |||
<xref target="I-D.ietf-mmusic-rid"/>, BUNDLE | <xref target="RFC8851" format="default"/>, BUNDLE | |||
<xref target="I-D.ietf-mmusic-sdp-bundle-negotiation"/>, | <xref target="RFC8843" format="default"/>, | |||
<xref target="RFC5760"/>, | <xref target="RFC5760" format="default"/>, and | |||
<xref target="RFC5761"/>, apply if selected and thus need to be consider | <xref target="RFC5761" format="default"/> apply if selected and thus nee | |||
ed in the evaluation.</t> | d to be considered in the evaluation.</t> | |||
<t><xref target="sect-4.3" format="default"/> discusses the security impli | ||||
<t>There is discussion of the security implications of choosing | cations of choosing | |||
multiple SSRC vs multiple RTP sessions in | multiple SSRCs vs. multiple RTP sessions.</t> | |||
<xref target="section-4.3"/>.</t> | ||||
</section> | ||||
<section title="Contributors"> | ||||
<t>Hui Zheng (Marvin) contributed to WG draft versions -04 | ||||
and -05 of the document. | ||||
</t> | ||||
</section> | ||||
<section title="Acknowledgments"> | ||||
<t>The Authors like to acknowledge and thank Cullen Jennings, Dale R Worle | ||||
y, Huang Yihong (Rachel), Benjamin Kaduk, Mirja Kuehlewind, and Vijay Gurbani | ||||
for review and comments. | ||||
</t> | ||||
</section> | </section> | |||
</middle> | </middle> | |||
<back> | <back> | |||
<references title="Normative References"> | <references> | |||
&RFC3550; &RFC3551; &RFC3711; &RFC4585; &RFC5576; | <name>References</name> | |||
&RFC5760; &RFC5761; &RFC7656; &RFC7667; | <references> | |||
&I-D.ietf-avtcore-multi-media-rtp-session; &I-D.ietf-mmusic-rid; | <name>Normative References</name> | |||
&I-D.ietf-mmusic-sdp-bundle-negotiation; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3550. | |||
&I-D.ietf-perc-srtp-ekt-diet; | xml"/> | |||
</references> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3551. | |||
<references title="Informative References"> | xml"/> | |||
&RFC2198; &RFC2205; &RFC2474; &RFC2974; &RFC3261; &RFC3264; &RFC3389; &RFC | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3711. | |||
3830; | xml"/> | |||
&RFC4103; &RFC4383; &RFC4566; &RFC4568; &RFC4588; &RFC5104; &RFC5109; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4585. | |||
&RFC5389; &RFC5764; &RFC5888; &RFC6465; &RFC7201; &RFC7657; &RFC7826; | xml"/> | |||
&RFC7983; &RFC8088; &RFC8108; &RFC8445; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5576. | |||
&I-D.ietf-avtext-rid; &I-D.ietf-perc-private-media-framework; | xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5760. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5761. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7656. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7667. | ||||
xml"/> | ||||
<reference anchor="JINGLE"> | <!-- draft-ietf-avtcore-multi-media-rtp-session (RFC 8860) --> | |||
<front> | <reference anchor="RFC8860" target="https://www.rfc-editor.org/info/rfc8860"> | |||
<title>XEP-0166: Jingle</title> | <front> | |||
<author initials="S." surname="Ludwig"> | <title>Sending Multiple Types of Media in a Single RTP Session</title> | |||
<author initials="M." surname="Westerlund" fullname="Magnus Westerlund"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="C." surname="Perkins" fullname="Colin Perkins"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="J." surname="Lennox" fullname="Jonathan Lennox"> | ||||
<organization/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8860"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8860"/> | ||||
</reference> | ||||
<!-- draft-ietf-mmusic-rid (RFC 8851) --> | ||||
<reference anchor='RFC8851' target="https://www.rfc-editor.org/info/rfc8851"> | ||||
<front> | ||||
<title>RTP Payload Format Restrictions</title> | ||||
<author initials='A.B.' surname='Roach' fullname='Adam Roach' role="editor"> | ||||
<organization /> | ||||
</author> | ||||
<date month='January' year='2021' /> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8851"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8851"/> | ||||
</reference> | ||||
<!-- 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> | ||||
<!-- draft-ietf-avtext-rid (RFC 8852) --> | ||||
<reference anchor='RFC8852' target="https://www.rfc-editor.org/info/rfc8852"> | ||||
<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='January' year='2021' /> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8852"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8852"/> | ||||
</reference> | ||||
<!-- draft-ietf-perc-srtp-ekt-diet (RFC 8870) --> | ||||
<reference anchor="RFC8870" target="https://www.rfc-editor.org/info/rfc8870"> | ||||
<front> | ||||
<title>Encrypted Key Transport for DTLS and Secure RTP</title> | ||||
<author initials="C" surname="Jennings" fullname="Cullen Jennings"> | ||||
<organization>company</organization> | ||||
</author> | ||||
<author initials="J" surname="Mattsson" fullname="John Mattsson"> | ||||
<organization>company</organization> | ||||
</author> | ||||
<author initials="D" surname="McGrew" fullname="David A. McGrew"> | ||||
<organization>company</organization> | ||||
</author> | ||||
<author initials="D" surname="Wing" fullname="Dan Wing"> | ||||
<organization>company</organization> | ||||
</author> | ||||
<author initials="F" surname="Andreasen" fullname="Flemming Andreasen"> | ||||
<organization>company</organization> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8870"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8870"/> | ||||
</reference> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2198. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2205. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2474. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2974. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3261. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3264. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3389. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3830. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4103. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4383. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4566. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4568. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4588. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5104. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5109. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5389. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5764. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5888. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6465. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7201. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7657. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7826. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7983. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8088. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8108. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8445. | ||||
xml"/> | ||||
<!-- draft-ietf-perc-private-media-framework (RFC 8871) --> | ||||
<reference anchor='RFC8871' target="https://www.rfc-editor.org/info/rfc8871"> | ||||
<front> | ||||
<title>A Solution Framework for Private Media in Privacy-Enhanced RTP Conferenci | ||||
ng (PERC)</title> | ||||
<author initials='P' surname='Jones' fullname='Paul Jones'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='D' surname='Benham' fullname='David Benham'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='C' surname='Groves' fullname='Christian Groves'> | ||||
<organization /> | ||||
</author> | ||||
<date month='January' year='2021'/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8871"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8871"/> | ||||
</reference> | ||||
<reference anchor="JINGLE" target="https://xmpp.org/extensions/xep-0166. | ||||
html"> | ||||
<front> | ||||
<title>XEP-0166: Jingle</title> | ||||
<author initials="S." surname="Ludwig"> | ||||
</author> | </author> | |||
<author initials="J." surname="Beda"> | <author initials="J." surname="Beda"> | |||
</author> | </author> | |||
<author initials="P." surname="Saint-Andre"> | <author initials="P." surname="Saint-Andre"> | |||
</author> | </author> | |||
<author initials="R." surname="McQueen"> | <author initials="R." surname="McQueen"> | |||
</author> | </author> | |||
<author initials="S." surname="Egan"> | <author initials="S." surname="Egan"> | |||
</author> | </author> | |||
<author initials="J." surname="Hildebrand"> | <author initials="J." surname="Hildebrand"> | |||
</author> | </author> | |||
<date month="September" year="2018"/> | <date month="September" year="2018"/> | |||
</front> | </front> | |||
<seriesInfo | </reference> | |||
name="XMPP.org" | </references> | |||
value="https://xmpp.org/extensions/xep-0166.html"/> | ||||
</reference> | ||||
</references> | </references> | |||
<section | <section anchor="sect-a" numbered="true" toc="default"> | |||
anchor="section-a" | <name>Dismissing Payload Type Multiplexing</name> | |||
title="Dismissing Payload Type Multiplexing"> | ||||
<t>This section documents a number of reasons why using the payload | <t>This section documents a number of reasons why using the payload | |||
type as a multiplexing point is unsuitable for most issues related to | type as a multiplexing point is unsuitable for most issues related to | |||
multiple RTP streams. Attempting to use Payload type multiplexing | multiple RTP streams. Attempting to use payload type multiplexing | |||
beyond its defined usage has well known negative effects on RTP | beyond its defined usage has well-known negative effects on RTP, as | |||
discussed below. | discussed below. | |||
To use payload type as the single discriminator for multiple streams | To use the payload type as the single discriminator for multiple streams | |||
implies that all the different RTP streams are being sent with the | implies that all the different RTP streams are being sent with the | |||
same SSRC, thus using the same timestamp and sequence number space. | same SSRC, thus using the same timestamp and sequence number space. | |||
This has many effects:</t> | The many effects of using payload type multiplexing are as follows:</t> | |||
<t> | <ol spacing="normal" type="1"> | |||
<list style="numbers"> | <li>Constraints are placed on the RTP timestamp rate for the multiplexed | |||
<t>Putting constraints on RTP timestamp rate for the multiplexed media | media. | |||
. | ||||
For example, RTP streams that use different RTP timestamp rates cann ot | For example, RTP streams that use different RTP timestamp rates cann ot | |||
be combined, as the timestamp values need to be consistent across al l | be combined, as the timestamp values need to be consistent across al l | |||
multiplexed media frames. Thus streams are forced to use the same RT P | multiplexed media frames. Thus, streams are forced to use the same R TP | |||
timestamp rate. When this is not possible, payload type multiplexing | timestamp rate. When this is not possible, payload type multiplexing | |||
cannot be used.</t> | cannot be used.</li> | |||
<t>Many RTP payload formats can fragment a media object over multiple | <li>Many RTP payload formats can fragment a media object over multiple | |||
RTP packets, like parts of a video frame. These payload formats need | RTP packets, like parts of a video frame. These payload formats need | |||
to determine the order of the fragments to correctly decode them. | to determine the order of the fragments to correctly decode them. | |||
Thus, it is important to ensure that all fragments related to a fram e | Thus, it is important to ensure that all fragments related to a fram e | |||
or a similar media object are transmitted in sequence and without | or a similar media object are transmitted in sequence and without | |||
interruptions within the object. This can relatively simple be solve d | interruptions within the object. This can be done relatively easily | |||
on the sender side by ensuring that the fragments of each RTP stream | on the sender side by ensuring that the fragments of each RTP stream | |||
are sent in sequence.</t> | are sent in sequence.</li> | |||
<t>Some media formats require uninterrupted sequence number space | <li>Some media formats require uninterrupted sequence number space | |||
between media parts. These are media formats where any missing RTP | between media parts. These are media formats where any missing RTP | |||
sequence number will result in decoding failure or invoking a repair | sequence number will result in decoding failure or invoking a repair | |||
mechanism within a single media context. The text/ T140 payload form | mechanism within a single media context. The text&wj;/t140 payload f | |||
at | ormat | |||
<xref target="RFC4103"/> | <xref target="RFC4103" format="default"/> | |||
is an example of such a format. These formats will need a sequence | is an example of such a format. These formats will need a sequence | |||
numbering abstraction function between RTP and the individual RTP | numbering abstraction function between RTP and the individual RTP | |||
stream before being used with payload type multiplexing.</t> | stream before being used with payload type multiplexing.</li> | |||
<t>Sending multiple media streams in the same sequence number space ma | <li>Sending multiple media streams in the same sequence number space | |||
kes it | makes it | |||
impossible to determine which media stream lost a packet. This as th | impossible to determine which media stream lost a packet. | |||
e | Such a scenario causes difficulties, since the receiver cannot deter | |||
payload type that is used for demultiplex the media stream is not rec | mine to which stream it should | |||
eived. | apply packet-loss concealment or other stream-specific | |||
Thus, causing the receiver difficulties in determining which stream | loss-mitigation mechanisms.</li> | |||
to | <li>If RTP retransmission | |||
apply packet loss concealment or other stream-specific loss mitigatio | <xref target="RFC4588" format="default"/> | |||
n | is used and packet loss occurs, it is possible to ask for the missin | |||
mechanisms.</t> | g | |||
<t>If RTP Retransmission | packet(s) by SSRC and sequence number -- not by payload type. If onl | |||
<xref target="RFC4588"/> | y | |||
is used and there is a loss, it is possible to ask for the missing | ||||
packet(s) by SSRC and sequence number, not by payload type. If only | ||||
some of the payload type multiplexed streams are of interest, there is | some of the payload type multiplexed streams are of interest, there is | |||
no way of telling which missing packet(s) belong to the interesting | no way to tell which missing packet or packets belong to the | |||
stream(s) and all lost packets need be requested, wasting bandwidth. | stream or streams of interest, and all lost packets need to be reque | |||
</t> | sted, wasting bandwidth.</li> | |||
<t>The current RTCP feedback mechanisms are built around providing | <li>The current RTCP feedback mechanisms are built around providing | |||
feedback on RTP streams based on stream ID (SSRC), packet (sequence | feedback on RTP streams based on stream ID (SSRC), packet (sequence | |||
numbers) and time interval (RTP timestamps). There is almost never a | numbers), and time interval (RTP timestamps). There is almost never a | |||
field to indicate which payload type is reported, so sending feedbac k | field to indicate which payload type is reported, so sending feedbac k | |||
for a specific RTP payload type is difficult without extending | for a specific RTP payload type is difficult without extending | |||
existing RTCP reporting.</t> | existing RTCP reporting.</li> | |||
<t>The current RTCP media control messages | <li>The current RTCP media control messages specification | |||
<xref target="RFC5104"/> | <xref target="RFC5104" format="default"/> | |||
specification is oriented around controlling particular media flows, | is oriented around controlling particular media flows, | |||
i.e. requests are done addressing a particular SSRC. Such mechanisms | i.e., requests are done by addressing a particular SSRC. Such mechan | |||
would need to be redefined to support payload type multiplexing.</t> | isms | |||
<t>The number of payload types are inherently limited. Accordingly, | would need to be redefined to support payload type multiplexing.</li | |||
> | ||||
<li>The number of payload types is inherently limited. Accordingly, | ||||
using payload type multiplexing limits the number of streams that ca n | using payload type multiplexing limits the number of streams that ca n | |||
be multiplexed and does not scale. This limitation is exacerbated if | be multiplexed and does not scale. This limitation is exacerbated if | |||
one uses solutions like RTP and RTCP multiplexing | one uses solutions like RTP and RTCP multiplexing | |||
<xref target="RFC5761"/> | <xref target="RFC5761" format="default"/> | |||
where a number of payload types are blocked due to the overlap betwe en | where a number of payload types are blocked due to the overlap betwe en | |||
RTP and RTCP.</t> | RTP and RTCP.</li> | |||
<t>At times, there is a need to group multiplexed streams and this is | <li>At times, there is a need to group multiplexed streams. This is | |||
currently possible for RTP sessions and for SSRC, but there is no | currently possible for RTP sessions and SSRCs, but there is no | |||
defined way to group payload types.</t> | defined way to group payload types.</li> | |||
<t>It is currently not possible to signal bandwidth requirements per | <li>It is currently not possible to signal bandwidth requirements per | |||
RTP stream when using payload type multiplexing.</t> | RTP stream when using payload type multiplexing.</li> | |||
<t>Most existing SDP media level attributes cannot be applied on a per | <li>Most existing SDP media-level attributes cannot be applied on a | |||
payload type level and would require re-definition in that context.< | per-payload-type basis and would require redefinition in that contex | |||
/t> | t.</li> | |||
<t>A legacy endpoint that does not understand the indication that | <li>A legacy endpoint that does not understand the indication that | |||
different RTP payload types are different RTP streams might be | different RTP payload types are different RTP streams might be | |||
slightly confused by the large amount of possibly overlapping or | slightly confused by the large amount of possibly overlapping or | |||
identically defined RTP payload types.</t> | identically defined RTP payload types.</li> | |||
</list> | </ol> | |||
</t> | ||||
</section> | </section> | |||
<section anchor="section-b" title="Signalling Considerations"> | <section anchor="sect-b" numbered="true" toc="default"> | |||
<t>Signalling is not an architectural consideration for RTP itself, so | <name>Signaling Considerations</name> | |||
<t>Signaling is not an architectural consideration for RTP itself, so | ||||
this discussion has been moved to an appendix. However, it is extremely | this discussion has been moved to an appendix. However, it is extremely | |||
important for anyone building complete applications, so it is | important for anyone building complete applications, so it is | |||
deserving of discussion.</t> | deserving of discussion.</t> | |||
<t>We document salient issues here that need to be addressed by the WGs | <t>We document some issues here that need to be addressed when using some | |||
that use some form of signaling to establish RTP sessions. These | form of signaling to establish RTP sessions. These | |||
issues cannot simply be addressed by tweaking, extending, or profilin | issues cannot be addressed by simply tweaking, extending, or profilin | |||
g | g | |||
RTP, but require a dedicated and indepth look at the signaling | RTP; rather, they require a dedicated and in-depth look at the signal | |||
ing | ||||
primitives that set up the RTP sessions.</t> | primitives that set up the RTP sessions.</t> | |||
<t>There exist various signalling solutions for establishing RTP | <t>There exist various signaling solutions for establishing RTP | |||
sessions. Many are SDP | sessions. Many are based on SDP | |||
<xref target="RFC4566"/> | <xref target="RFC4566" format="default"/>; | |||
based, however SDP functionality is also dependent on the signalling | however, SDP functionality is also dependent on the signaling | |||
protocols carrying the SDP. RTSP | protocols carrying the SDP. The Real-Time Streaming Protocol (RTSP) | |||
<xref target="RFC7826"/> | <xref target="RFC7826" format="default"/> | |||
and SAP | and the Session Announcement Protocol (SAP) | |||
<xref target="RFC2974"/> | <xref target="RFC2974" format="default"/> | |||
both use SDP in a declarative fashion, while SIP | both use SDP in a declarative fashion, while SIP | |||
<xref target="RFC3261"/> | <xref target="RFC3261" format="default"/> | |||
uses SDP with the additional definition of Offer/Answer | uses SDP with the additional definition of offer/answer | |||
<xref target="RFC3264"/>. The impact on signalling and especially SDP | <xref target="RFC3264" format="default"/>. The impact on signaling, | |||
needs to be considered as it can greatly affect how to deploy a | and especially on SDP, | |||
needs to be considered, as it can greatly affect how to deploy a | ||||
certain multiplexing point choice.</t> | certain multiplexing point choice.</t> | |||
<section anchor="section-b.1" title="Session Oriented Properties"> | <section anchor="sect-b.1" numbered="true" toc="default"> | |||
<t>One aspect of the existing signalling is that it is focused on | <name>Session-Oriented Properties</name> | |||
RTP sessions, or in the case of SDP, the media description concept. | <t>One aspect of existing signaling protocols is that they are focused o | |||
There are a number of things that are signalled on media description | n | |||
level but those are not necessarily strictly bound to an RTP session | RTP sessions or, in the case of SDP, the concept of media | |||
and could be of interest to signal specifically for a particular RTP | descriptions. A number of things are signaled at the media | |||
stream (SSRC) within the session. The following properties have been | description level, but those are not necessarily strictly bound to | |||
identified as being potentially useful to signal not only on RTP | an RTP session and could be of interest for signaling, especially | |||
session level:</t> | for a particular RTP stream (SSRC) within the session. | |||
<t> | The following properties have been | |||
<list style="symbols"> | identified as being potentially useful for signaling, and not only | |||
<t>Bitrate/Bandwidth exist today only at aggregate or as a common "a | at the RTP session level:</t> | |||
ny | <ul spacing="normal"> | |||
RTP stream" limit, unless either codec-specific bandwidth limiting | <li>Bitrate and/or bandwidth can be specified today only as an | |||
or | aggregate limit, or as a common "any RTP stream" limit, unless | |||
RTCP signalling using TMMBR <xref target="RFC5104"/> is used.</t> | either codec-specific bandwidth limiting or | |||
<t>Which SSRC that will use which RTP payload type (this will be | RTCP signaling using Temporary Maximum Media Stream Bit Rate | |||
visible from the first media packet, but is sometimes useful to kn | Request (TMMBR) messages <xref target="RFC5104" | |||
ow | format="default"/> is used. | |||
before packet arrival).</t> | </li> | |||
</list> | <li>Which SSRC will use which RTP payload type (this information will | |||
</t> | be | |||
visible in the first media packet but is sometimes useful to have | ||||
before the packet arrives).</li> | ||||
</ul> | ||||
<t>Some of these issues are clearly SDP's problem rather than RTP | <t>Some of these issues are clearly SDP's problem rather than RTP | |||
limitations. However, if the aim is to deploy an solution using | limitations. However, if the aim is to deploy a solution that uses | |||
additional SSRCs that contains several sets of RTP streams with | several SSRCs and contains several sets of RTP streams with | |||
different properties (encoding/packetization parameter, bit-rate, | different properties (encoding/packetization parameters, bitrate, | |||
etc.), putting each set in a different RTP session would directly | etc.), putting each set in a different RTP session would directly | |||
enable negotiation of the parameters for each set. If insisting on | enable negotiation of the parameters for each set. If insisting on | |||
additional SSRC only, a number of signalling extensions are needed to | additional SSRCs only, a number of signaling extensions are needed to | |||
clarify that there are multiple sets of RTP streams with different | clarify that there are multiple sets of RTP streams with different | |||
properties and that they need in fact be kept different, since a | properties and that they in fact need to be kept different, since a | |||
single set will not satisfy the application's requirements.</t> | single set will not satisfy the application's requirements.</t> | |||
<t>For some parameters, such as RTP payload type, resolution and | <t>For some parameters, such as RTP payload type, resolution, and | |||
framerate, a SSRC-linked mechanism has been proposed in | frame rate, an SSRC-linked mechanism has been proposed in | |||
<xref target="I-D.ietf-mmusic-rid"/></t> | <xref target="RFC8851" format="default"/>.</t> | |||
</section> | </section> | |||
<section | <section anchor="sect-b.2" numbered="true" toc="default"> | |||
anchor="section-b.2" | <name>SDP Prevents Multiple Media Types</name> | |||
title="SDP Prevents Multiple Media Types"> | <t>SDP uses the "m=" line to both delineate an RTP session and specify | |||
<t>SDP chose to use the m= line both to delineate an RTP session and | the top-level media type: audio, video, text, image, application. | |||
to specify the top level of the MIME media type; audio, video, text, | This media type is used as the top-level media type for identifying | |||
image, application. This media type is used as the top-level media | the actual payload format and is bound to a particular payload type | |||
type for identifying the actual payload format and is bound to a | using the "a=rtpmap:" attribute. This binding has to be loosened in | |||
particular payload type using the rtpmap attribute. This binding has | order to use SDP to describe RTP sessions containing multiple | |||
to be loosened in order to use SDP to describe RTP sessions containing | top-level media types.</t> | |||
multiple MIME top level types.</t> | <t><xref target="RFC8843" format="default"/> | |||
<t><xref target="I-D.ietf-mmusic-sdp-bundle-negotiation"/> | ||||
describes how to let multiple SDP media descriptions use a single | describes how to let multiple SDP media descriptions use a single | |||
underlying transport in SDP, which allows to define one RTP session | underlying transport in SDP, which allows the definition of one RTP se | |||
with media types having different MIME top level types.</t> | ssion | |||
with different top-level media types.</t> | ||||
</section> | </section> | |||
<section anchor="section-b.3" title="Signalling RTP Stream Usage"> | <section anchor="sect-b.3" numbered="true" toc="default"> | |||
<t>RTP streams being transported in RTP have some particular usage in | <name>Signaling RTP Stream Usage</name> | |||
an RTP application. This usage of the RTP stream is in many | <t>RTP streams being transported in RTP have a particular usage in | |||
applications so far implicitly signalled. For example, an application | an RTP application. In many applications to date, this usage of the RT | |||
might choose to take all incoming audio RTP streams, mix them and play | P | |||
them out. However, in more advanced applications that use multiple RTP | stream is implicitly signaled. For example, an application | |||
streams there will be more than a single usage or purpose among the | might choose to take all incoming audio RTP streams, mix them, and pla | |||
y | ||||
them out. However, in more-advanced applications that use multiple RTP | ||||
streams, there will be more than a single usage or purpose among the | ||||
set of RTP streams being sent or received. RTP applications will need | set of RTP streams being sent or received. RTP applications will need | |||
to signal this usage somehow. The signalling used will have to | to somehow signal this usage. The signaling that is used will have to | |||
identify the RTP streams affected by their RTP- level identifiers, | identify the RTP streams affected by their RTP-level identifiers, | |||
which means that they have to be identified either by their session or | which means that they have to be identified by either their session or | |||
by their SSRC + session.</t> | their SSRC + session.</t> | |||
<t>In some applications, the receiver cannot utilise the RTP stream at | <t>In some applications, the receiver cannot utilize the RTP stream at | |||
all before it has received the signalling message describing the RTP | all before it has received the signaling message describing the RTP | |||
stream and its usage. In other applications, there exists a default | stream and its usage. In other applications, there exists a default | |||
handling that is appropriate.</t> | handling method that is appropriate.</t> | |||
<t>If all RTP streams in an RTP session are to be treated in the same | <t>If all RTP streams in an RTP session are to be treated in the same | |||
way, identifying the session is enough. If SSRCs in a session are to | way, identifying the session is enough. If SSRCs in a session are to | |||
be treated differently, signalling needs to identify both the session | be treated differently, signaling needs to identify both the session | |||
and the SSRC.</t> | and the SSRC.</t> | |||
<t>If this signalling affects how any RTP central node, like an RTP | <t>If this signaling affects how any RTP central node, like an RTP | |||
mixer or translator that selects, mixes or processes streams, treats | mixer or translator that selects, mixes, or processes streams, treats | |||
the streams, the node will also need to receive the same signalling to | the streams, the node will also need to receive the same signaling to | |||
know how to treat RTP streams with different usage in the right | know how to treat RTP streams with different usages in the right | |||
fashion.</t> | fashion.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section numbered="false" toc="default"> | ||||
<name>Acknowledgments</name> | ||||
<t>The authors would like to acknowledge and thank <contact fullname="Cull | ||||
en | ||||
Jennings"/>, <contact fullname="Dale R. Worley"/>, <contact | ||||
fullname="Huang Yihong (Rachel)"/>, <contact fullname="Benjamin | ||||
Kaduk"/>, <contact fullname="Mirja Kühlewind"/>, and <contact | ||||
fullname="Vijay Gurbani"/> for review and comments.</t> | ||||
</section> | ||||
<section numbered="false" toc="default"> | ||||
<name>Contributors</name> | ||||
<t><contact fullname="Hui Zheng (Marvin)"/> contributed to WG draft versio | ||||
ns -04 | ||||
and -05 of the document. | ||||
</t> | ||||
</section> | ||||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 268 change blocks. | ||||
1502 lines changed or deleted | 1579 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/ |