| rfc8852xml2.original.xml | rfc8852.xml | |||
|---|---|---|---|---|
| <?xml version='1.0' encoding='utf-8'?> | ||||
| <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | ||||
| <rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" | ||||
| category="std" number="8852" consensus="true" ipr="trust200902" | ||||
| obsoletes="" updates="" xml:lang="en" sortRefs="true" symRefs="true" | ||||
| tocInclude="true" version="3" docName="draft-ietf-avtext-rid-09"> | ||||
| <!-- xml2rfc v2v3 conversion 2.30.0 --> | ||||
| <front> | ||||
| <title abbrev="RtpStreamId SDES">RTP Stream Identifier Source Description (S | ||||
| DES)</title> | ||||
| <seriesInfo name="RFC" value="8852"/> | ||||
| <author fullname="Adam Roach" initials="A.B." surname="Roach"> | ||||
| <organization>Mozilla</organization> | ||||
| <address> | ||||
| <email>adam@nostrum.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar"> | ||||
| <organization>Cisco Systems</organization> | ||||
| <address> | ||||
| <email>snandaku@cisco.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Peter Thatcher" initials="P." surname="Thatcher"> | ||||
| <organization>Google</organization> | ||||
| <address> | ||||
| <email>pthatcher@google.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <date month="July" year="2020"/> | ||||
| <keyword>WebRTC</keyword> | ||||
| <keyword>Multiplexing</keyword> | ||||
| <abstract> | ||||
| <t> | ||||
| This document defines and registers two new Real-time Transport Control | ||||
| Protocol (RTCP) Stream Identifier | ||||
| Source Description (SDES) items. One, named RtpStreamId, is used for | ||||
| unique identification of RTP streams. The other, | ||||
| RepairedRtpStreamId, can be used to identify which stream is to be repaired | ||||
| using a redundancy RTP stream.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <middle> | ||||
| <section anchor="intro" numbered="true" toc="default"> | ||||
| <name>Introduction</name> | ||||
| <t> | ||||
| RTP sessions frequently consist of multiple streams, each of which is | ||||
| identified at any given time by its synchronization source (SSRC); however, | ||||
| the SSRC associated with a stream is not guaranteed to be stable over its | ||||
| lifetime. Within a session, these streams can be tagged with a | ||||
| number of identifiers, including CNAMEs and MediaStream Identification | ||||
| (MSID) <xref target="RFC8830" format="default"/>. | ||||
| Unfortunately, none of these have the proper | ||||
| ordinality to refer to an individual stream; all such identifiers can | ||||
| appear in more than one stream at a time. While approaches that use | ||||
| unique payload types (PTs) per stream have been used in some | ||||
| applications, this is a semantic overloading of that field, and one | ||||
| for which its size is inadequate: in moderately complex systems that | ||||
| use PT to uniquely identify every potential combination of codec | ||||
| configuration and unique stream, it is possible to simply run out of | ||||
| values.</t> | ||||
| <t> | ||||
| To address this situation, we define a new RTCP Stream Identifier | ||||
| Source Description (SDES) identifier, RtpStreamId, that uniquely | ||||
| identifies a single RTP stream. A key motivator for defining this | ||||
| identifier is the ability to differentiate among different encodings | ||||
| of a single source stream that are sent simultaneously (i.e., | ||||
| simulcast). This need for unique identification extends to dependent | ||||
| streams (e.g., where layers used by a layered codec are transmitted | ||||
| on separate streams).</t> | ||||
| <t> | ||||
| At the same time, when redundancy RTP streams are in use, we also | ||||
| need an identifier that connects such streams to the RTP stream for | ||||
| which they are providing redundancy. For this purpose, we define an | ||||
| additional SDES identifier, RepairedRtpStreamId. This identifier can | ||||
| appear only in packets associated with a redundancy RTP stream. They | ||||
| carry the same value as the RtpStreamId of the RTP stream that the | ||||
| redundant RTP stream is correcting.</t> | ||||
| </section> | ||||
| <section anchor="terminology" numbered="true" toc="default"> | ||||
| <name>Terminology</name> | ||||
| <t> | ||||
| In this document, the terms "source stream", "RTP stream", "source RTP stream | ||||
| ", "dependent stream", "received RTP stream", and | ||||
| "redundancy RTP stream" are used as defined in <xref target="RFC7656" format= | ||||
| "default"/>.</t> | ||||
| <t> | ||||
| The following acronyms are also used:</t> | ||||
| <ul spacing="normal"> | ||||
| <li>CNAME: Canonical Endpoint Identifier, defined in <xref target="RFC35 | ||||
| 50" format="default"/></li> | ||||
| <li>MID: Media Identification, defined in | ||||
| <xref target="RFC8843" format="default"/></li> | ||||
| <li>MSID: MediaStream Identification, defined in <xref target="RFC8830" | ||||
| format="default"/></li> | ||||
| <li>RTCP: Real-time Transport Control Protocol, defined in <xref target= | ||||
| "RFC3550" format="default"/></li> | ||||
| <li>RTP: Real-time Transport Protocol, defined in <xref target="RFC3550" | ||||
| format="default"/></li> | ||||
| <li>SDES: Source Description, defined in <xref target="RFC3550" format=" | ||||
| default"/></li> | ||||
| <li>SSRC: Synchronization Source, defined in <xref target="RFC3550" form | ||||
| at="default"/></li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="StreamId" numbered="true" toc="default"> | ||||
| <name>Usage of RtpStreamId and RepairedRtpStreamId in RTP and RTCP</name> | ||||
| <t> | ||||
| The RTP fixed header includes the payload type number and the SSRC | ||||
| values of the RTP stream. RTP defines how to demultiplex streams | ||||
| within an RTP session; however, in some use cases, applications need | ||||
| further identifiers in order to effectively map the individual RTP | ||||
| streams to their equivalent payload configurations in the SDP.</t> | ||||
| <t> | ||||
| This specification defines two new RTCP SDES items <xref target="RFC3550" for | ||||
| mat="default"/>. The | ||||
| first item is "RtpStreamId", which is used to carry RTP stream | ||||
| identifiers within RTCP SDES packets. This makes it possible for a | ||||
| receiver to associate received RTP packets (identifying the RTP | ||||
| stream) with a media description having the format constraint | ||||
| specified. The second is "RepairedRtpStreamId", which can be used in | ||||
| redundancy RTP streams to indicate the RTP stream repaired by a | ||||
| redundancy RTP stream.</t> | ||||
| <t> | ||||
| To be clear: the value carried in a RepairedRtpStreamId will always | ||||
| match the RtpStreamId value from another RTP stream in the same | ||||
| session. For example, if a source RTP stream is identified by | ||||
| RtpStreamId "A", then any redundancy RTP stream that repairs that | ||||
| source RTP stream will contain a RepairedRtpStreamId of "A" (if this | ||||
| mechanism is being used to perform such correlation). These | ||||
| redundant RTP streams may also contain their own unique RtpStreamId.</t> | ||||
| <t> | ||||
| This specification also uses the RTP header extension for RTCP SDES | ||||
| items <xref target="RFC7941" format="default"/> to allow carrying RtpStreamId | ||||
| and RepairedRtpStreamId values in RTP packets. This allows | ||||
| correlation at stream startup, or after stream changes where the use | ||||
| of RTCP may not be sufficiently responsive. This speed of response | ||||
| is necessary since, in many cases, the stream cannot be properly | ||||
| processed until it can be identified.</t> | ||||
| <t> | ||||
| RtpStreamId and RepairedRtpStreamId values are scoped by source | ||||
| identifier (e.g., CNAME) and by media session. When the media is | ||||
| multiplexed using the BUNDLE extension | ||||
| <xref target="RFC8843" format="default"/>, these values are further | ||||
| scoped by their associated MID values. For example: an RtpStreamId | ||||
| of "1" may be present in the stream identified with a CNAME of | ||||
| "1234@example.com" and may also be present in a stream with a CNAME | ||||
| of "5678@example.org", and these would refer to different streams. | ||||
| Similarly, an RtpStreamId of "1" may be present with an MID of "A", | ||||
| and again with a MID of "B", and also refer to two different streams.</t> | ||||
| <t> | ||||
| Note that the RepairedRtpStreamId mechanism is limited to indicating | ||||
| one repaired stream per redundancy stream. If systems require | ||||
| correlation for schemes in which a redundancy stream contains | ||||
| information used to repair more than one stream, they will have to | ||||
| use a more complex mechanism than the one defined in this | ||||
| specification.</t> | ||||
| <t> | ||||
| As with all SDES items, RtpStreamId and RepairedRtpStreamId are | ||||
| limited to a total of 255 octets in length. RtpStreamId and | ||||
| RepairedRtpStreamId are constrained to contain only alphanumeric | ||||
| characters. For avoidance of doubt, the only allowed byte values for | ||||
| these IDs are decimal 48 through 57, 65 through 90, and 97 through | ||||
| 122.</t> | ||||
| <section anchor="RtpStreamId-ext" numbered="true" toc="default"> | ||||
| <name>RTCP "RtpStreamId" SDES Extension</name> | ||||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| |RtpStreamId=12 | length | RtpStreamId ... | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ]]></artwo | ||||
| rk> | ||||
| <t> | ||||
| The RtpStreamId payload is ASCII encoded and is not null terminated. | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="Repaired-ext" numbered="true" toc="default"> | ||||
| <name>RTCP "RepairedRtpStreamId" SDES Extension</name> | ||||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| |Repaired...=13 | length | RepairRtpStreamId ... | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ]]></artwo | ||||
| rk> | ||||
| <t> | ||||
| The RepairedRtpStreamId payload is ASCII encoded and is not null terminated. | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="Header-ext" numbered="true" toc="default"> | ||||
| <name>RTP "RtpStreamId" and "RepairedRtpStreamId" Header Extensions</nam | ||||
| e> | ||||
| <t> | ||||
| Because recipients of RTP packets will typically need to know which | ||||
| streams they correspond to immediately upon receipt, this | ||||
| specification also defines a means of carrying RtpStreamId and | ||||
| RepairedRtpStreamId identifiers in RTP extension headers, using the | ||||
| technique described in <xref target="RFC7941" format="default"/>.</t> | ||||
| <t> | ||||
| As described in that document, the header extension element can be | ||||
| encoded using either the one-byte or two-byte header, and the | ||||
| identification-tag payload is ASCII encoded.</t> | ||||
| <t> | ||||
| As the identifier is included in an RTP header extension, there | ||||
| should be some consideration given to the packet expansion caused by | ||||
| the identifier. To avoid Maximum Transmission Unit (MTU) issues for | ||||
| the RTP packets, the header extension's size needs to be taken into | ||||
| account when encoding media. Note that the set of header extensions | ||||
| included in the packet needs to be padded to the next 32-bit boundary | ||||
| <xref target="RFC8285" format="default"/>.</t> | ||||
| <t> | ||||
| In many cases, a one-byte identifier will be sufficient to | ||||
| distinguish streams in a session; implementations are strongly | ||||
| encouraged to use the shortest identifier that fits their purposes. | ||||
| Implementors are warned, in particular, not to include any | ||||
| information in the identifier that is derived from potentially user- | ||||
| identifying information, such as user ID or IP address. To avoid | ||||
| identification of specific implementations based on their pattern of | ||||
| tag generation, implementations are encouraged to use a simple scheme | ||||
| that starts with the ASCII digit "1", and increments by one for each | ||||
| subsequent identifier.</t> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="IANA" numbered="true" toc="default"> | ||||
| <name>IANA Considerations</name> | ||||
| <section anchor="New-RtpStreamId" numbered="true" toc="default"> | ||||
| <name>New RtpStreamId SDES Item</name> | ||||
| <t> | ||||
| This document adds the RtpStreamId SDES item to the IANA "RTP SDES Item | ||||
| Types" registry as follows:</t> | ||||
| <dl spacing="compact" indent="12"> | ||||
| <dt>Value:</dt> <dd>12</dd> | ||||
| <dt>Abbrev.:</dt> <dd>RtpStreamId</dd> | ||||
| <dt>Name:</dt> <dd>RTP Stream Identifier</dd> | ||||
| <dt>Reference:</dt><dd>RFC 8852</dd> | ||||
| </dl> | ||||
| </section> | ||||
| <section anchor="New-Repair" numbered="true" toc="default"> | ||||
| <name>New RepairRtpStreamId SDES Item</name> | ||||
| <t> | ||||
| This document adds the RepairedRtpStreamId SDES item to the IANA "RTP SDES | ||||
| Item Types" registry as follows:</t> | ||||
| <dl spacing="compact" indent="12"> | ||||
| <dt>Value:</dt> <dd>13</dd> | ||||
| <dt>Abbrev.:</dt> <dd>RepairedRtpStreamId</dd> | ||||
| <dt>Name:</dt> <dd>Repaired RTP Stream Identifier</dd> | ||||
| <dt>Reference:</dt><dd>RFC 8852</dd> | ||||
| </dl> | ||||
| </section> | ||||
| <section anchor="New-Str-header" numbered="true" toc="default"> | ||||
| <name>New RtpStreamId Header Extension URI</name> | ||||
| <t> | ||||
| This document defines a new extension URI in the "RTP SDES Compact | ||||
| Header Extensions" subregistry of the "RTP Compact Header Extensions" | ||||
| subregistry, as follows:</t> | ||||
| <dl spacing="compact"> | ||||
| <dt>Extension URI:</dt><dd>urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id</dd> | ||||
| <dt>Description:</dt> <dd>RTP Stream Identifier</dd> | ||||
| <dt>Contact:</dt> <dd><t><contact fullname="Adam Roach"/> <adam@nostrum. | ||||
| com></t></dd> | ||||
| <dt>Reference:</dt> <dd>RFC 8852</dd> | ||||
| </dl> | ||||
| </section> | ||||
| <section anchor="New-Repair-Header" numbered="true" toc="default"> | ||||
| <name>New RepairRtpStreamId Header Extension URI</name> | ||||
| <t> | ||||
| This document defines a new extension URI in the "RTP SDES Compact | ||||
| Header Extensions" subregistry of the "RTP Compact Header Extensions" | ||||
| subregistry, as follows:</t> | ||||
| <dl spacing="compact"> | ||||
| <dt>Extension URI:</dt><dd>urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-i | ||||
| d</dd> | ||||
| <dt>Description:</dt><dd>RTP Repaired Stream Identifier</dd> | ||||
| <dt>Contact:</dt><dd><t><contact fullname="Adam Roach"/> <adam@nostrum.com> | ||||
| ;</t></dd> | ||||
| <dt>Reference:</dt><dd>RFC 8852</dd> | ||||
| </dl> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="Security" numbered="true" toc="default"> | ||||
| <name>Security Considerations</name> | ||||
| <t> | ||||
| Although the identifiers defined in this document are limited to be | ||||
| strictly alphanumeric, SDES items have the potential to carry any | ||||
| string. As a consequence, there exists a risk that they might carry | ||||
| privacy-sensitive information. Implementations need to take care | ||||
| when generating identifiers so that they do not contain information | ||||
| that can identify the user or allow for long-term tracking of the | ||||
| device. Following the generation recommendations in <xref target="Header-ext | ||||
| " format="default"/> will | ||||
| result in non-instance-specific labels, with only minor | ||||
| fingerprinting possibilities in the total number of used RtpStreamIds | ||||
| and RepairedRtpStreamIds.</t> | ||||
| <t> | ||||
| Even if the SDES items are generated to convey as little information | ||||
| as possible, implementors are strongly encouraged to encrypt SDES | ||||
| items -- both in RTCP and RTP header extensions -- so as to preserve | ||||
| privacy against third parties.</t> | ||||
| <t> | ||||
| As the SDES items are used for identification of the RTP streams for | ||||
| different application purposes, it is important that the intended | ||||
| values are received. An attacker, either a third party or malicious | ||||
| RTP middlebox, that removes or changes the values for these SDES | ||||
| items can severely impact the application. The impact can include | ||||
| failure to decode or display the media content of the RTP stream. It | ||||
| can also result in incorrectly attributing media content to | ||||
| identifiers of the media source, such as incorrectly identifying the | ||||
| speaker. To prevent this from occurring due to third-party attacks, | ||||
| integrity and source authentication is needed.</t> | ||||
| <t> | ||||
| "Options for Securing RTP Sessions" <xref target="RFC7201" format="default"/> | ||||
| discusses options for how | ||||
| encryption, integrity, and source authentication can be accomplished.</t> | ||||
| </section> | ||||
| </middle> | ||||
| <back> | ||||
| <references> | ||||
| <name>References</name> | ||||
| <references> | ||||
| <name>Normative References</name> | ||||
| <!-- draft-ietf-mmusic-sdp-bundle-negotiation in C238 --> | ||||
| <reference anchor="RFC8843" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 843"> | ||||
| <front> | ||||
| <title>Negotiating Media Multiplexing Using the Session Description | ||||
| Protocol (SDP)</title> | ||||
| <author initials="C" surname="Holmberg"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="H" surname="Alvestrand"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="C" surname="Jennings"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="July" year="2020"/> | ||||
| </front> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8843"/> | ||||
| <seriesInfo name="RFC" value="8843"/> | ||||
| </reference> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7941.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.3550.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7656.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8285.xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <!-- draft-ietf-mmusic-msid-17 in C238 as 8830 --> | ||||
| <reference anchor="RFC8830" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 830"> | ||||
| <front> | ||||
| <title>WebRTC MediaStream Identification in the Session Description | ||||
| Protocol</title> | ||||
| <author initials="H" surname="Alvestrand" fullname="Harald Alvestran | ||||
| d"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="July" year="2020"/> | ||||
| </front> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8830"/> | ||||
| <seriesInfo name="RFC" value="8830"/> | ||||
| </reference> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7201.xml"/> | ||||
| </references> | ||||
| </references> | ||||
| <section anchor="Ack" numbered="false" toc="default"> | ||||
| <name>Acknowledgements</name> | ||||
| <t> | ||||
| Many thanks to <contact fullname="Cullen Jennings"/>, <contact | ||||
| fullname="Magnus Westerlund"/>, <contact fullname="Colin Perkins"/>, | ||||
| <contact fullname="Jonathan Lennox"/>, and <contact fullname="Paul | ||||
| Kyzivat"/> for review and input. <contact fullname="Magnus Westerlund"/> | ||||
| provided nearly all of the Security Considerations section.</t> | ||||
| </section> | ||||
| </back> | ||||
| </rfc> | ||||
| End of changes. 1 change blocks. | ||||
| lines changed or deleted | lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||