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="May" 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 Media Stream Identifiers
(MSIDs) <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: Media Stream Identifier, defined in <xref target="RFC8830" for
mat="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"/> &lt;adam@nostrum.
com&gt;</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"/> &lt;adam@nostrum.com&gt
;</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="May" 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="May" 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/