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