<?xml version='1.0'?>

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
    <!ENTITY layeredcodec SYSTEM 
      'reference.I-D.schierl-mmusic-layered-codec.xml'>
    <!ENTITY abnf SYSTEM 
      'reference.RFC.5234.xml'>
    <!ENTITY anat SYSTEM 
      'reference.RFC.4091.xml'>
    <!ENTITY avpf SYSTEM 
      'reference.RFC.4585.xml'>
    <!ENTITY fec SYSTEM 
      'reference.RFC.4756.xml'>
    <!ENTITY flute_cs SYSTEM 
      'reference.I-D.mehta-rmt-flute-sdp.xml'>
    <!ENTITY ice SYSTEM 
      'reference.I-D.ietf-mmusic-ice.xml'>
    <!ENTITY mikey SYSTEM 
      'reference.RFC.3830.xml'>
    <!ENTITY mikeysdp SYSTEM 
      'reference.RFC.4567.xml'>
    <!ENTITY offeranswer SYSTEM 
      'reference.RFC.3264.xml'>
    <!ENTITY rfc2119 SYSTEM 
      'reference.RFC.2119.xml'>
    <!ENTITY rfc5226 SYSTEM 
      'reference.RFC.5226.xml'>
    <!ENTITY rtcpbw SYSTEM 
      'reference.RFC.3556.xml'>
    <!ENTITY rtcpxr SYSTEM 
      'reference.RFC.3611.xml'>
    <!ENTITY rtp SYSTEM 
      'reference.RFC.3550.xml'>
    <!ENTITY rtprtx SYSTEM 
      'reference.RFC.4588.xml'>
    <!ENTITY rtpsvc SYSTEM 
      'reference.I-D.ietf-avt-rtp-svc.xml'>
    <!ENTITY rtptopo SYSTEM 
      'reference.RFC.5117.xml'>
    <!ENTITY sdp SYSTEM 
      'reference.RFC.4566.xml'>
    <!ENTITY sdpgroup SYSTEM 
      'reference.RFC.3388.xml'>
    <!ENTITY sdplabel SYSTEM 
      'reference.RFC.4574.xml'>
    <!ENTITY srf SYSTEM 
      'reference.RFC.3524.xml'>
    <!ENTITY ssm SYSTEM 
      'reference.I-D.ietf-avt-rtcpssm.xml'>
    <!ENTITY tias SYSTEM 
      'reference.RFC.3890.xml'>
]>

<?rfc toc="yes" ?>
<?rfc strict="yes" ?>
<?rfc compact="yes" ?>
<?rfc sortrefs="yes" ?>
<?rfc symrefs="yes" ?>

<rfc category='std' ipr='full3978' docName='draft-ietf-mmusic-sdp-source-attributes-02'>
    <front>
        <title abbrev='Source-Specific SDP Attributes'>
		Source-Specific Media Attributes in the Session Description Protocol (SDP)
        </title>

        <author initials='J.' surname='Lennox'
                fullname='Jonathan Lennox'>
            <organization abbrev='Vidyo'>
               Vidyo, Inc.
            </organization>
            <address>
               <postal>
                   <street>433 Hackensack Avenue</street>
                   <street>Sixth Floor</street>
                   <city>Hackensack</city> <region>NJ</region>
                   <code>07601</code>
                   <country>US</country>
               </postal>
               <email>jonathan@vidyo.com</email>
            </address>
        </author>

		<author initials='J.' surname='Ott'
				fullname='Joerg Ott'>
			<organization abbrev='Helsinki University of Technology'>
				Helsinki University of Technology (TKK)
			</organization>
			<address>
				<postal>
					<street>Networking Laboratory</street>
					<street>PO Box 3000</street>
					<city>FIN-02015 TKK</city>
					<country>Finland</country>
				</postal>
				<email>jo@acm.org</email>
			</address>
		</author>

        <author initials='T.' surname='Schierl'
                fullname='Thomas Schierl'>
            <organization abbrev='Fraunhofer HHI'>
               Fraunhofer HHI
            </organization>
            <address>
               <postal>
                   <street>Einsteinufer 37</street>
                   <city>D-10587 Berlin</city>
                   <country>Germany</country>
               </postal>
               <phone>+49-30-31002-227</phone>
               <email>schierl@hhi.fhg.de</email>
            </address>
        </author>

        <date />
        <area>RAI</area>
        <workgroup>MMUSIC</workgroup>

        <keyword>I-D</keyword>
        <keyword>Internet-Draft</keyword>
		<!-- TODO: more keywords -->

        <abstract>
		<t>The Session Description Protocol provides mechanisms to
		describe attributes of multimedia sessions and of individual media
		streams (e.g., Real-time Transport Protocol (RTP) sessions) within a
		multimedia session, but
		does not provide any mechanism to describe individual media
		sources within a media stream.  This document defines a
		mechanism to describe RTP media sources, identified by their
		Synchronization Source Identifiers (SSRCs), in SDP, associate
		attributes
		with these sources, and express relationships among sources.  It
		also defines several source-level attributes which can be used
		to describe properties of media sources.</t>
        </abstract>

    </front>

<middle>

<section title='Introduction' anchor='introduction'>

<t>The <xref target='RFC4566'>Session Description Protocol (SDP)</xref>
provides mechanisms to describe attributes of multimedia sessions and of media
streams (e.g., <xref target='RFC3550'>Real-time Transport Protocol (RTP)</xref>
sessions) within a
multimedia session, but does not provide any
mechanism to describe individual
media sources within a media stream.</t>

<t>Several recently-proposed protocols, notably <xref
target='I-D.ietf-avt-rtcpssm'>RTP Single-Source Multicast</xref>
have found it useful to
describe specific
media sources in SDP messages.  Single-source multicast, in
particular, needs to
ensure that receivers' RTP Synchronization Source Identifiers (SSRCs) 
do not collide with those of media
senders, as <xref target='RFC3550'>the RTP specification</xref> requires that 
colliding sources change their SSRC values after a collision has been detected.
Earlier work has used mechanisms
specific to each protocol to describe the individual sources
of an RTP
session.</t>

<t>Moreover, whereas the <xref target='RFC3550'>Real-Time Transport
Protocol (RTP)</xref> is defined as allowing multiple sources in an
RTP session (for example, if a user has more than one camera), SDP has
no existing mechanism for an endpoint to indicate that it will be using
multiple sources, or to describe their characteristics individually.</t>

<t>To address all these problems, this document defines a mechanism to
describe RTP sources, identified by their Synchronization Sources Identifiers
(SSRCs), in SDP, associate attributes with these sources, and
express relationships among individual sources.  It also defines a
number of new SDP attributes that apply to individual sources
("source-level" attributes); describes how a number of existing media
stream ("media-level") attributes can also be applied at the source
level; and establishes IANA registries for source-level
attributes and source grouping semantics.</t>

</section>

<section title='Terminology'>

<t>The key words "MUST", "MUST NOT", "REQUIRED", 
"SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", 
and "OPTIONAL" in this document
are to be interpreted as described in <xref
target='RFC2119'>RFC 2119</xref> and indicate requirement levels for
compliant implementations.</t>

</section>

<section title='Overview' anchor='overview'>

<t>In the <xref target='RFC3550'>Real-Time Transport Protocol
(RTP)</xref>, an association among a group of communicating
participants is known as an RTP Session.  An RTP session is typically
associated with a single transport address (in the case of multicast)
or communication flow (in the case of unicast), though RTP
translators and <xref
target='I-D.ietf-avt-rtcpssm'>single-source multicast</xref>
can make the situation more complex.  RTP topologies are discussed in
more detail in <xref target='RFC5117' />.</t>

<t>Within an RTP session, the source of a single stream of RTP packets
is known as a synchronization source (SSRC).  Every synchronization
source is identified by a 32-bit numeric identifier.  In addition,
receivers (who may never send RTP packets) also have source
identifiers, which are used to identify their RTP Control
Protocol (RTCP) receiver reports and other feedback messages.</t>

<t>Messages of the <xref target='RFC4566'>Session Description Protocol
(SDP)</xref>, known as Session Descriptions, describe Multimedia Sessions.  A
multimedia session is a set of multimedia senders and receivers, and the data
streams flowing from senders to receivers.  A multimedia session contains a
number of Media Streams, which are the individual RTP sessions or
other media paths over which one type of multimedia data is carried.
Information
that applies to an entire multimedia session is called Session-Level
information, while information pertaining to one media stream is
called Media-Level information.  The collection of all the information
describing a media stream is known as a Media Description.
(Media descriptions are also sometimes known informally as SDP
"m"-lines, after the SDP syntax that begins a media description.)
Several standard information elements are defined at both the session
level and the media level.  Extended information can be included at
both levels through the use of attributes.</t>

<t>(The term "Media Stream" does not appear in the SDP specification
itself, but is used by a number of SDP extensions, for instance <xref
target='I-D.ietf-mmusic-ice'>Interactive Connectivity Establishment
(ICE)</xref>, to denote the object described by an SDP media
description.  This term is unfortunately rather confusing, as 
the <xref target='RFC3550'>RTP specification</xref> uses the term
"media stream" to refer to an individual media source or RTP packet
stream, identified by an SSRC, whereas an
SDP media stream describes an entire RTP session, which can contain
any number of RTP sources.  In this document, the term "media stream"
means an SDP media stream, i.e. the thing described by an SDP media
description, whereas "media source" is used for a single source of
media packets, i.e. an RTP media stream.)</t>

<t>The core SDP specification does not have any way of describing
individual media sources, in particular RTP synchronization sources,
within a media stream.  To address this problem, in this document we
introduce a third level of information, called Source-Level information.
Syntactically, source-level information is described by a new SDP
media-level attribute "ssrc", which 
identifies specific synchronization sources within an RTP session, and
acts as a meta-attribute mapping source-level attribute information to these
sources.</t>

<t>This document also defines an SDP
media-level attribute "ssrc-group", which can represent relationships
among media sources within an RTP session, in much the same way
as <xref target='RFC3388'>the "group" attribute</xref> represents
relationships among media streams within a multimedia session.</t>

</section>

<section title='Media Attributes' anchor='media_attributes'>

<t>This section defines two media-level attributes, "ssrc" and
"ssrc-group".</t>

<section title='The "ssrc" Media Attribute' anchor='ssrc_attribute'>

<figure>
<artwork>
<![CDATA[
a=ssrc:<ssrc-id> <attribute>
a=ssrc:<ssrc-id> <attribute>:<value>
]]>
</artwork>
</figure>

<t>The SDP media attribute "ssrc" indicates a property (known as a
"source-level attribute") of a
media source (RTP stream) within an RTP session.  <![CDATA[<ssrc-id>]]>
is the synchronizaton source ID (SSRC) of the source being described,
interpreted as a 32-bit unsigned integer in network byte order and
represented in decimal.  
<![CDATA[<attribute>]]> or <![CDATA[<attribute>:<value>]]> represent
the source-level attribute specific to the given media source.
The source-level attribute follows the
syntax of the SDP "a=" line.  It thus 
consists either of a single attribute name (a flag),
or an attribute name and value, e.g. "cname:user@example.com".  No
attributes of the former type are defined by this document.</t>  

<t>Within a media stream, ssrc attributes with the same value of 
<![CDATA[<ssrc-id>]]> describe different attributes of the same media
sources.  Across media streams, <![CDATA[<ssrc-id>]]> values are not
correlated (unless correlation is indicated by media-stream grouping
or some other mechanism) and MAY be repeated.</t>

<t>Each "ssrc" media attribute specifies a single
source-level attribute for the given <![CDATA[<ssrc-id>]]>.
For each source mentioned in SDP, the source-level
attribute "cname", defined in <xref target='cname_attribute' />, MUST be
provided.  Any number of other source-level attributes for the source
MAY also be provided.</t>

<t>The "ssrc" media attribute MAY be used for any RTP-based media
transport.  It is not defined for other transports.</t>

<t>If any other SDP attributes also mention RTP SSRC values (for example,
  <xref target='RFC3830'>MIKEY</xref><xref target='RFC4567' />), the
  values used MUST be consistent.  (These attributes MAY provide additional
  information about a source described by an "ssrc" attribute, or MAY
  describe additional sources.)</t>

<t>Though the source-level attributes specified by the ssrc property
follow the same syntax as session-level and media-level attributes,
they are defined independently.  All source-level attributes MUST be
registered with IANA, using the registry defined in <xref
target='iana_source_attributes' />.</t>

<t><xref target='ssrc_grammar' /> in <xref target='grammar' /> gives a
formal <xref target='RFC5234'>Augmented Backus-Naur Form (ABNF)</xref>
grammar for the ssrc attribute.</t>

<t>The "ssrc" media attribute is not dependent on charset.</t>

</section>

<section title='The "ssrc-group" Media Attribute' anchor='ssrc_group_attribute'>

<figure>
<artwork>
<![CDATA[
a=ssrc-group:<semantics> <ssrc-id> ...
]]>
</artwork>
</figure>

<t>The SDP media attribute "ssrc-group" expresses a relationship among
several sources of an RTP session.  It is analogous to the <xref
target='RFC3388'>"group" session-level attribute</xref>, which expresses a
relationship among media streams in an SDP multimedia session (i.e., a
relationship among several logically related RTP sessions).
As sources are already identified by their SSRC IDs, no analogous
property to the "mid" attribute is necessary; groups of sources are
identified by their SSRC IDs directly.</t>

<t>The <![CDATA[<semantics>]]> parameter is taken from <xref
target='RFC3388'>the specification of the "group" attribute</xref>.
The initial semantics values
defined for the ssrc-group attribute are <xref target='RFC3388'>FID
(Flow Identification)</xref> and <xref
target='RFC4756'>FEC (Forward Error
Correction)</xref>.  In each case, the relationship among the grouped sources
is the same as the relationship among corresponding sources in
media streams grouped using the SDP "group" attribute.</t>

<t>Though the "ssrc-group" semantics values
follow the same syntax as "group" semantics values,
they are defined independently.  All "ssrc-group" semantics values MUST be
registered with IANA, using the registry defined in <xref
target='iana_source_group_semantics' />.</t>

<t>(The other "group" semantics registered with IANA as of
this writing are not useful for source grouping.   <xref
target='RFC3388'>LS (Lip Synchronization)</xref> is redundant for
sources within a media stream, as RTP sources with the same CNAME are
implicitly synchronized in RTP.  <xref target='RFC3524'>SRF (Single
Reservation Flow)</xref> and <xref target='RFC4091'>ANAT (Alternative
Network Address Types)</xref> refer specifically to the media
stream's transport characteristics.  <xref
target='I-D.mehta-rmt-flute-sdp'>CS (Composite Session)</xref> is used
to group FLUTE sessions, and so is not applicable to RTP.)</t>

<t>The ssrc-group attribute indicates the sources in a group by
listing the <![CDATA[<ssrc-id>]]>s of the sources in the group.  It
MUST list at least one <![CDATA[<ssrc-id>]]> for a group, and MAY list
any number of additional ones. 
Every <![CDATA[<ssrc-id>]]> listed in an ssrc-group attribute MUST be
defined by a corresponding "ssrc:" line in the same media description.</t>

<t>The "ssrc-group" media attribute is not dependent on charset.</t>

<t><xref target='ssrc_group_grammar' /> in <xref target='grammar' /> gives a
formal <xref target='RFC5234'>Augmented Backus-Naur Form (ABNF)</xref>
grammar for the ssrc-group attribute.</t>

</section>
</section>

<section title='Usage of Identified Source Identifiers in RTP'
anchor='usage'>

<t>The synchronization source identifiers used in an RTP session are
chosen randomly and independently by endpoints.  As such, it is
possible for two RTP endpoints to choose the same SSRC identifier.
Though the probability of this is low, <xref target='RFC3550'>the RTP
specification</xref> requires that all RTP endpoints MUST be prepared
to detect and resolve collisions.</t>

<t>As a result, all endpoints MUST be prepared for the fact that
information about specific sources identified in a media stream might
be out of date.  The actual binding between SSRCs and source CNAMEs can
only be identified by the source description (SDES) RTCP packets
transmitted on the RTP session.</t>

<t>When endpoints are choosing their own local SSRC values for media streams
for which source-level attributes have been specified, they MUST NOT use
for themselves any SSRC identifiers mentioned in media descriptions
they have received for the media stream.</t>

<t>However, sources identified by SDP source-level attributes do not
otherwise affect RTP transport logic.  Specifically, sources which are
only known through SDP, for which neither RTP nor RTCP packets have
been received, MUST NOT be counted for RTP group size estimation, and
report blocks MUST NOT be sent for them in SR or RR RTCP messages.</t>

<t>Endpoints MUST NOT assume that only the sources mentioned in SDP
will be present in an RTP session; additional sources, with previously
unmentioned
SSRC IDs, can be added at any time, and endpoints MUST be prepared to
receive packets from these sources.  (How endpoints handle
such packets is not specified here; they SHOULD be handled in the same
manner as packets from additional sources would be handled had the endpoint
not received any a=ssrc: attributes at all.)</t>

<t>An endpoint that observes an SSRC collision between its
explicitly-signaled source and another entity that has not explicitly signaled
an SSRC MAY delay its <xref target='RFC3550'>RTP collision-resolution
actions</xref> by 5*1.5*Td, where Td is the deterministic calculated
reporting interval for receivers
defined in Section 6.3.1 of
<xref target='RFC3550'>the RTP specification</xref>,
to see whether the conflict still
exists.  (This gives precedence to
explicitly-signaled sources, and places the burden of collision
resolution on non-signaled sources.)
SSRC collisions between multiple explicitly-signaled sources, however,
MUST be acted upon immediately.</t>

<t>If, following <xref target='RFC3550'>RTP's collision-resolution
procedures</xref>, a source identified by source-level attributes has been
forced to change its SSRC identifier, the author of the SDP
containing the source-level attributes for these sources SHOULD send
out an updated SDP session description with the new SSRC, if the
mechanism by which SDP is being distributed for the multimedia session has a
mechanism to distribute updated SDP.  This updated SDP MUST
include a previous-ssrc source-level attribute, described in <xref
target='previous_ssrc_attribute' />, listing the source's previous
SSRC ID.  (If only a single source with a given CNAME has collided,
the other RTP session members can infer a correspondence between the
source's old and new SSRC IDs, without requiring an updated session
description.  However, if more than one source collides at once, or if
sources are leaving and re-joining, this inference is not possible.
To avoid confusion, therefore, sending updated SDP messages is always
RECOMMENDED.)</t>

<t>Endpoints MUST NOT reuse the same SSRC ID for identified
sources with same CNAME for at least the duration of the RTP session's
participant timeout interval (see Section 6.3.5 of <xref
target='RFC3550'/>).  They SHOULD NOT reuse any SSRC ID ever mentioned
in SDP (either by themselves or by other endpoints) for the entire
lifetime of the RTP session.</t>

<t>Endpoints MUST be prepared for the possibility that other parties
in the session do not understand SDP source-level attributes, unless
some higher-level mechanism normatively requires them.  See <xref
target='backward' /> for more discussion of this.</t>

</section>

<section title="Source Attributes" anchor='source_attributes'>

<t>This section describes specific source attributes that can be
applied to RTP sources.</t>

<section title='The "cname" Source Attribute' anchor='cname_attribute'>

<figure>
<artwork>
<![CDATA[
a=ssrc:<ssrc-id> cname:<cname>
]]>
</artwork>
</figure>

<t>The "cname" source attribute associates a media source with its
Canonical End-Point Identifier (CNAME) source description (SDES)
item.  This MUST be the CNAME value that the media sender will place
in its RTCP SDES packets; it therefore MUST follow the syntax
conventions of CNAME defined in <xref target='RFC3550'>the RTP
specification</xref>.  If a session participant receives an RTCP
SDES packet associating this SSRC with a different CNAME, it SHOULD assume
there has been an SSRC collision, and that the description of the
source that was carried in the SDP description is not applicable
to the actual source being received.
This source attribute is REQUIRED to be present if any source
attributes are present for a source.  The cname attribute MUST NOT
occur more than once for the same ssrc-id within a given media stream.</t>

<t>The "cname" source attribute is not dependent on charset.</t>

<t><xref target='cname_grammar' /> in <xref target='grammar' /> gives a
formal <xref target='RFC5234'>Augmented Backus-Naur Form (ABNF)</xref>
grammar for the cname attribute.</t>

</section>

<section title='The "previous-ssrc" Source Attribute' anchor='previous_ssrc_attribute'>

<figure>
<artwork>
<![CDATA[
a=ssrc:<ssrc-id> previous-ssrc:<ssrc-id> ...
]]>
</artwork>
</figure>

<t>The "previous-ssrc" source attribute associates a media source with
previous source identifiers used for the same media source.  Following
an SSRC change due to an SSRC collision involving a media source
described in SDP, the updated session description describing the
source's new SSRC (described in <xref target='usage' />) MUST include
the previous-ssrc attribute associating the new SSRC with the old
one.  If further updated SDP descriptions are published describing the
media source, the previous-ssrc attribute SHOULD be included if the
session description was generated before the participant timeout of
the old SSRC, and MAY be included after that point.  This attribute,
if present, MUST list at least one previous SSRC, and MAY list any
number of additional SSRCs for the source, if the source has collided
more than once.  This attribute MUST be present only once for each
source.</t>

<t>The "previous-ssrc" source attribute is not dependent on charset.</t>

<t><xref target='previous_ssrc_grammar' /> in <xref target='grammar'
/> gives a formal <xref target='RFC5234'>Augmented Backus-Naur Form
(ABNF)</xref> grammar for the previous-ssrc attribute.</t>

</section>

<section title='The "fmtp" Source Attribute' anchor='fmtp_attribute'>

<figure>
<artwork>
<![CDATA[
a=ssrc:<ssrc> fmtp:<format> <format specific parameters>
]]>
</artwork>
</figure>

<t>The "fmtp" source attribute allows format-specific parameters to be
conveyed about a given source.  The <![CDATA[<format>]]> parameter MUST
be one of the media formats (i.e., RTP payload types) specified for
the media stream.  The meaning of the <![CDATA[<format specific
parameters>]]> is unique for each media type.  This parameter MUST
only be used for media types for which source-level format parameters
have explicitly been specified; media-level format parameters MUST NOT
be carried over blindly.</t>

<t>The "fmtp" source attribute is not dependent on charset.</t>

</section>

<section title='Other Source Attributes' anchor='other_attributes'>

<t>This document only defines source attributes which are necessary or useful
for an endpoint to decode and render the sources in a media stream.
It does include any attributes which would contribute to an endpoint's
decision to accept or reject a stream, e.g. in an offer/answer exchange.
Such attributes are for future consideration.</t>

</section>

</section>


<section anchor="examples" title='Examples'>

<t>This section gives several examples of SDP descriptions of media
sessions containing source attributes.  For brevity, only the media
sections of the descriptions are given.</t>

<figure anchor="simple_example" title="Example: declaration of a
single synchronization source">
<artwork>
m=audio 49168 RTP/AVP 0
a=ssrc:314159 cname:user@example.com
</artwork>
</figure>

<t>The example in <xref target='simple_example' /> shows an audio
stream advertising a single source.</t>

<figure anchor="multiple_example" title="Example: a media stream containing
several independent sources from a single session member.">
<artwork>
m=video 49170 RTP/AVP 96
a=rtpmap:96 H264/90000
a=ssrc:12345 cname:another-user@example.com
a=ssrc:67890 cname:another-user@example.com
</artwork>
</figure>

<t>The example in <xref target='multiple_example' /> shows a video
stream where one participant (identified by a single CNAME) has
several cameras.  The sources could be further distinguished by RTCP Source
Description (SDES) information.</t> 

<figure anchor="rtx_example" title="Example: relationship among
several sources: retransmission sources">
<artwork>
m=video 49174 RTP/AVPF 96 98
a=rtpmap:96 H.264/90000
a=rtpmap:98 rtx/90000
a=fmtp:98 apt=96;rtx-time=3000
a=ssrc-group:FID 11111 22222
a=ssrc:11111 cname:user3@example.com
a=ssrc:22222 cname:user3@example.com
a=ssrc-group:FID 33333 44444
a=ssrc:33333 cname:user3@example.com
a=ssrc:44444 cname:user3@example.com
</artwork>
</figure>

<t>The example in <xref target='rtx_example' /> shows how the
relationships among sources used for <xref target='RFC4588'>RTP
Retransmission</xref> can be explicitly signaled.  This prevents the
complexity of associating original sources with retransmission sources
when SSRC multiplexing is used for RTP retransmission, as is described
in Section 5.3 of <xref target='RFC4588' />.</t>

</section>

<section title='Usage With the Offer/Answer Model'
anchor='offer-answer'>

<t>When used with <xref target='RFC3264'>the SDP Offer/Answer
Model</xref>, SDP source-specific attributes describe only the sources
with which each party is willing to send (whether it is sending RTP
data or RTCP report blocks).  No mechanism is provided by which an
answer can accept or reject individual sources within a media stream; if
the set of sources in a media stream is unacceptable, the answerer's
only option is to reject the media stream or the entire multimedia session.</t>

<t>The SSRC IDs for sources described by an SDP answer MUST be
distinct from the SSRC IDs for sources of that media stream in the
offer.  Similarly, new SSRC
IDs in an updated offer MUST be distinct from the ssrc
IDs for that media stream established in the most recent offer/answer
exchange for the session,
and SHOULD be
distinct from any SSRC ID ever used by either party within the
multimedia session (whether or not it is still being used).</t>

</section>

<section title='Backward Compatibility' anchor='backward'>

<t>According to the defintion of SDP, interpreters of SDP session
descriptions ignore unknown attributes.  Thus, endpoints MUST be
prepared that recipients of their RTP media session may not understand
their explicit source descriptions, unless some external mechanism
indicates that they were understood.  In some cases (such as
<xref target='RFC4588'>RTP Retransmission</xref>) this may constrain
some choices about the bitstreams that are transmitted.</t>

<t>Source descriptions are specified in this document such that
RTP endpoints that are compliant with <xref target='RFC3550'>the RTP
specification</xref> will be able to decode the media streams they
describe whether or not they support explicit source descriptions.
However, some deployed RTP implementations may not actually support
multiple media sources in a media stream.  Media senders MAY wish to
restrict themselves to a single source at a time unless they have some
means of concluding that the receivers of the media stream support
source multiplexing.</t>

</section>

<section title='Formal Grammar' anchor='grammar'>

<t>This section gives a formal <xref target='RFC5234'>Augmented
Backus-Naur Form (ABNF)</xref> grammar for each of the new media and
source attributes defined in this document.  Grammars for existing
session or media attributes which have been extended to be source
attributes are not included.</t>

<figure anchor="ssrc_grammar" title="Syntax of the ssrc media attribute">
<artwork>
ssrc-attr = "ssrc:" ssrc-id SP attribute
; The base definition of "attribute" is in RFC 4566.
; (It is the content of "a=" lines.)
ssrc-id = integer ; 0 - 2**32 - 1

attribute =/ ssrc-attr
</artwork>
</figure>

<figure anchor="ssrc_group_grammar" title="Syntax of the ssrc-group
media attribute">
<artwork>
ssrc-group-attr = "ssrc-group:" semantics *(SP ssrc-id)
; The definition of "semantics" is in RFC 3388.
; (It is the type of grouping being done.)

attribute =/ ssrc-group-attr
</artwork>
</figure>

<figure anchor="cname_grammar" title="Syntax of the cname
source attribute">
<artwork>
cname-attr = "cname:" cname
cname = byte-string
; Following the syntax conventions for CNAME as defined in RFC 3550.
; The definition of "byte-string" is in RFC 4566.

attribute =/ cname-attr
</artwork>
</figure>

<figure anchor="previous_ssrc_grammar" title="Syntax of the previous-ssrc
source attribute">
<artwork>
previous-ssrc-attr = "previous-ssrc:" ssrc-id *(SP ssrc-id)

attribute =/ previous-ssrc-attr
</artwork>
</figure>

</section>

<section title='Security Considerations' anchor='security'>

<t>All the security implications of <xref target='RFC3550'>RTP</xref>
and of <xref target='RFC4566'>SDP</xref> apply.  Explicitly describing
the multiplexed sources of an RTP media stream does not appear to add
any further security issues.</t>

</section>

<section title='IANA Considerations' anchor='iana'>

<section title='New SDP Media-Level Attributes'>

<t>This document defines two SDP media-level attributes: "ssrc" and
  "ssrc-group".  These attributes should be registered by IANA under
  "Session Description Protocol (SDP) Parameters" under "att-field
  (media level only)".</t>

<t>The "ssrc" attribute is used to identify characteristics of media
  sources within a media stream.  Its format is defined in
  <xref target='ssrc_attribute' />.</t>

<t>The "ssrc-group" attribute is used to identify relationships among media
  sources within a media stream.  Its format is defined in
  <xref target='ssrc_group_attribute' />.</t>

</section>

<section title='Registry for Source-Level Attributes' anchor='iana_source_attributes'>

<t>This specification creates a new IANA registry named "att-field
  (source level)" within the SDP parameters registry.  Source
  attributes MUST be registered with IANA and documented, under the
  same rules as for SDP session-level and media-level attributes as
  specified in <xref target='RFC4566' />:</t>

<t>New attribute registrations are accepted according to the
   "Specification Required" policy of <xref target='RFC5226' />,
   provided that the specification includes the following information:</t>

<t><list style='symbols'>
  <t>contact name, email address, and telephone number</t>
  <t>attribute name (as it will appear in SDP)</t>
  <t>long-form attribute name in English</t>
  <t>whether the attribute value is subject to the charset attribute</t>
  <t>a one-paragraph explanation of the purpose of the attribute</t>
  <t>a specification of appropriate attribute values for this attribute</t>
</list></t>

  <t>The above is the minimum that IANA will accept.  Attributes that are
   expected to see widespread use and interoperability SHOULD be
   documented with a standards-track RFC that specifies the attribute
   more precisely.</t>

   <t>Submitters of registrations should ensure that the specification is
   in the spirit of SDP attributes, most notably that the attribute is
   platform independent in the sense that it makes no implicit
   assumptions about operating systems and does not name specific pieces
   of software in a manner that might inhibit interoperability.</t>

   <t>Source-level attributes which are substantially similar in
   semantics to existing session-level or media-level attributes
   SHOULD re-use the same attribute name as those session-level or
   media-level attributes.  Source-level attributes SHOULD NOT re-use
   attribute names of session-level or media-level attributes that are
   unrelated or substantially different.</t>

<t>The initial set of source attribute names, with definitions in
  <xref target='source_attributes' /> of this document, is in
  <xref target='source_attributes_initial' />.</t>

<figure anchor='source_attributes_initial' title='Initial Contents of IANA Source Attribute Registry'>
<artwork>
Type            SDP Name                     Reference
----            ------------------           ---------
att-field (source level)
                cname                        [RFC&rfc.number;]
                previous-ssrc                [RFC&rfc.number;]
                fmtp                         [RFC&rfc.number;]
</artwork>
</figure>

<t>(Note to the RFC-Editor: please replace "&rfc.number;" with the
number of this document prior to publication as an RFC.)</t>

</section>

<section title='Registry for Source Grouping Semantics' anchor='iana_source_group_semantics'>
<t>This specification creates a new IANA registry named "Semantics for
  the "ssrc-group" SDP Attribute" within the SDP parameters registry.  Source
  group semantics MUST be defined in standards-track RFCs, under the
  same rules as <xref target='RFC3388' />:</t>

   <t>The IANA Considerations section of the RFC MUST include the following
   information, which appears in the IANA registry along with the RFC
   number of the publication.</t>

   <t><list style='symbols'>
      <t>A brief description of the semantics.</t>
      <t>Token to be used within the group attribute. This token may be
         of any length, but SHOULD be no more than four characters long.</t>
      <t>Reference to an standards track RFC.</t>
   </list></t>

   <t>Source grouping semantics values which are substantially similar to
   existing media grouping semantics values SHOULD re-use the same
   semantics name as that media gropuing semantics.  Source grouping
   semantics SHOULD NOT re-use source grouping semantics names that are
   unrelated or substantially different.</t>

   <t>The initial set of source grouping semantics values, for the semantics
   specified in <xref target='ssrc_group_attribute' /> of this document, is
   in <xref target='ssrc_group_semantics_initial' />.</t>

<figure anchor='ssrc_group_semantics_initial' title='Initial Contents
   of IANA Source Group Semantics Registry'>
<artwork>
Semantics                           Token     Reference
-------------------                 -----     ---------
Flow Identification                 FID       [RFC&rfc.number;]
Forward Error Correction            FEC       [RFC&rfc.number;]
</artwork>
</figure>

<t>(Note to the RFC-Editor: please replace "&rfc.number;" with the
number of this document prior to publication as an RFC.)</t>


</section>

</section>

</middle>

<back>

<references title='Normative References'>

&abnf;

&fec;

&offeranswer;

&rfc2119;

&rfc5226;

&rtp;

&sdp;

&sdpgroup;

<!-- &tias; -->

</references>

<references title='Informative References'>

&anat;

<!-- &avpf; -->

&flute_cs;

&ice;

<!-- &layeredcodec; -->

&mikey;

&mikeysdp;

<!-- &rtcpbw; -->

<!-- &rtcpxr; -->

&rtprtx;

<!-- &rtpsvc; -->

&rtptopo;

<!-- &sdplabel; -->

&srf;

&ssm;

</references>

<!-- <section title='Open issues'>

<t><list style='symbols'>

</list></t>

</section> -->

<section title='Changes From Earlier Versions'>

<t>Note to the RFC-Editor: please remove this section prior to publication
as an RFC.</t>

<section title='Changes From Working Group Draft -01'>

<t><list style='symbols'>

<t>Updated reference to RFC 2434 to <xref target='RFC5226' />.</t>

</list></t>

</section>

<section title='Changes From Working Group Draft -00'>

<t><list style='symbols'>

<t>Removed discussion of ssrc-multiplexing for layered codecs.</t>

<t>Clarified that each "ssrc" attribute specifies only a single source-level
attribute.</t>

<t>Clarified that "ssrc-group" semantics are defined separately from "group"
semantics.</t>

<t>Clarified reference for the Td parameter.</t>

<t>Updated references.</t>

<t>Corrected typographical errors.</t>

</list></t>

</section>

<section title='Changes From Individual Submission Draft -01'>

<t><list style='symbols'>

<t>Added definitions of the new IANA registries and registrations needed.</t>

<t>Clarified that none of the attributes defined in the document are
  dependent on the charset attribute.</t>

<t>Clarified that ssrc attributes must be consistent with other SDP
  mechanisms (such as MIKEY) that also specify SSRCs.</t>

<t>Removed open issues section.</t>

</list></t>

</section>


<section title='Changes From Individual Submission Draft -00'>

<t><list style='symbols'>

<t>Clarified that this document is expressly defining declarative source
descriptions, not source offer/answer or other information.</t>

<t>Removed the definitions of the "information", "bandwidth",
"sendrecv", "sendonly", "recvonly", "inactive", "charset", "sdplang",
"lang", "framerate", and "quality" source attributes.  They are all
unnecessary for source decodability, and to the extent they are
otherwise useful they are probably better handled by RTCP Source
Description (SDES) packets or feedback (AVPF) messages.</t>

<t>Added text to the Backward Compatibility and Security
Considerations sections.</t>

</list></t>

</section>

</section>

</back>

</rfc>
