| 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/ | ||||