Negotiating Media Multiplexing Using the Session Description Protocol (SDP)
Ericsson
Hirsalantie 11
02420
Jorvas
Finland
christer.holmberg@ericsson.com
Google
Kungsbron 2
Stockholm
11122
Sweden
harald@alvestrand.no
Cisco
400 3rd Avenue SW, Suite 350
Calgary
AB
T2P 4H2
Canada
fluffy@iii.ca
Transport
MMUSIC Working Group
RTP
SDP
Bundle
Multiplexing
RTCWEB
CLUE
RTCWEB
MMUSIC
AVT
WEB
Browser
This specification defines a new Session Description
Protocol (SDP) Grouping Framework extension called 'BUNDLE'.
The extension can be used with the SDP offer/answer mechanism
to negotiate the usage of a single transport (5-tuple) for
sending and receiving media described by multiple SDP media descriptions
("m=" sections). Such transport is referred to as a BUNDLE transport,
and the media is referred to as bundled media. The "m=" sections that
use the BUNDLE transport form a BUNDLE group.
This specification defines a new RTP Control Protocol (RTCP) Source
Description (SDES) item and a new RTP header extension.
This specification updates RFCs 3264, 5888, and 7941.
This specification obsoletes RFC 8843.
Status of This Memo
This is an Internet Standards Track document.
This document is a product of the Internet Engineering Task Force
(IETF). It represents the consensus of the IETF community. It has
received public review and has been approved for publication by
the Internet Engineering Steering Group (IESG). Further
information on Internet Standards is available in Section 2 of
RFC 7841.
Information about the current status of this document, any
errata, and how to provide feedback on it may be obtained at
.
Copyright Notice
Copyright (c) 2021 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
() in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with
respect to this document. Code Components extracted from this
document must include Simplified BSD License text as described in
Section 4.e of the Trust Legal Provisions and are provided without
warranty as described in the Simplified BSD License.
This document may contain material from IETF Documents or IETF
Contributions published or made publicly available before November
10, 2008. The person(s) controlling the copyright in some of this
material may not have granted the IETF Trust the right to allow
modifications of such material outside the IETF Standards Process.
Without obtaining an adequate license from the person(s)
controlling the copyright in such materials, this document may not
be modified outside the IETF Standards Process, and derivative
works of it may not be created outside the IETF Standards Process,
except to format it for publication as an RFC or to translate it
into languages other than English.
Table of Contents
-
. Introduction
-
. Background
-
. BUNDLE Mechanism
-
. Protocol Extensions
-
. Changes from RFC 8843
-
. Terminology
-
. Conventions
-
. Applicability Statement
-
. SDP Grouping Framework BUNDLE Extension
-
. SDP 'bundle-only' Attribute
-
. SDP Offer/Answer Procedures
-
. Generic SDP Considerations
-
. Connection Data ("c=")
-
. Bandwidth ("b=")
-
. Attributes ("a=")
-
. Generating the Initial SDP Offer
-
. Suggesting the Offerer-Tagged 'm=' Section
-
. Example: Initial SDP Offer
-
. Generating the SDP Answer
-
. Answerer Selection of Tagged 'm=' Sections
-
. Moving a Media Description Out of a BUNDLE Group
-
. Rejecting a Media Description in a BUNDLE Group
-
. Example: SDP Answer
-
. RFC 8843 Considerations
-
. Offerer Processing of the SDP Answer
-
. RFC 8843 Considerations
-
. Modifying the Session
-
. Adding a Media Description to a BUNDLE Group
-
. Moving a Media Description Out of a BUNDLE Group
-
. Disabling a Media Description in a BUNDLE Group
-
. SIP Considerations
-
. Protocol Identification
-
. RTP Considerations
-
. Single RTP Session
-
. Payload Type (PT) Value Reuse
-
. Associating RTP/RTCP Streams with the Correct SDP Media Description
-
. RTP/RTCP Multiplexing
-
. SDP Offer/Answer Procedures
-
. ICE Considerations
-
. DTLS Considerations
-
. RTP Header Extensions Consideration
-
. Update to RFC 3264
-
. Original Text from RFC 3264, Section 5.1, 2nd Paragraph
-
. New Text Replacing RFC 3264, Section 5.1, 2nd Paragraph
-
. Original Text from RFC 3264, Section 8.4, 6th Paragraph
-
. New Text Replacing RFC 3264, Section 8.4, 6th Paragraph
-
. Update to RFC 5888
-
. Original Text from RFC 5888, Section 9.2, 3rd Paragraph
-
. New Text Replacing RFC 5888, Section 9.2, 3rd Paragraph
-
. RTP/RTCP Extensions for identification-tag Transport
-
. RTCP MID SDES Item
-
. RTP SDES Header Extension For MID
-
. IANA Considerations
-
. New SDES Item
-
. New RTP SDES Header Extension URI
-
. New SDP Attribute
-
. New SDP Group Semantics
-
. Security Considerations
-
. Examples
-
. Example: Tagged "m=" Section Selections
-
. Example: BUNDLE Group Rejected
-
. Example: Offerer Adds a Media Description to a BUNDLE Group
-
. Example: Offerer Moves a Media Description Out of a BUNDLE Group
-
. Example: Offerer Disables a Media Description within a BUNDLE Group
-
. References
-
. Normative References
-
. Informative References
-
. Design Considerations
-
. UA Interoperability
-
. Usage of Port Number Value Zero
-
. B2BUA and Proxy Interoperability
-
. Traffic Policing
-
. Bandwidth Allocation
-
. Candidate Gathering
-
Acknowledgements
-
Authors' Addresses
Introduction
Background
When the SDP offer/answer mechanism
is used to negotiate the establishment of multimedia communication sessions, if separate
transports (5-tuples) are negotiated for each individual media stream, each transport consumes
additional resources (especially when Interactive Connectivity Establishment (ICE)
is used).
For this reason, it is attractive to use a single transport for multiple media streams.
BUNDLE Mechanism
This specification defines a way to use a single transport (BUNDLE transport)
for sending and receiving media (bundled media) described by multiple SDP media descriptions
("m=" sections). The address:port combination used by an endpoint for sending and receiving
bundled media is referred to as the BUNDLE address:port. The set of SDP attributes that are
applied to each "m=" section within a BUNDLE group is referred to as BUNDLE attributes.
The same BUNDLE transport is used for sending and receiving bundled media, which
means that the symmetric Real-time Transport Protocol (RTP) mechanism is always used for RTP-based bundled media.
This specification defines a new SDP Grouping Framework extension called 'BUNDLE'. The extension can be used with the Session Description
Protocol (SDP) Offer/Answer mechanism
to negotiate which "m=" sections will become part of a BUNDLE group. In addition, the offerer and
answerer use the BUNDLE extension to negotiate
the BUNDLE addresses:ports (offerer BUNDLE address:port and answerer BUNDLE address:port) and the
set of BUNDLE attributes (offerer BUNDLE attributes and answerer BUNDLE attributes) that will be applied to
each "m=" section within the BUNDLE group.
The use of a BUNDLE transport allows the usage of a single set of
ICE candidates for the whole BUNDLE group.
A given BUNDLE address:port MUST only be associated with a single BUNDLE group. If an SDP offer
or SDP answer (hereafter referred to as "offer" and "answer") contains multiple BUNDLE groups, the procedures in this specification apply to each
group independently. All RTP-based bundled media associated with a given BUNDLE group belong to a single
RTP session .
The BUNDLE extension is backward compatible. Endpoints that do not support the extension
are expected to generate offers and answers without an SDP 'group:BUNDLE' attribute and
assign a unique address:port to each "m=" section within an offer and answer, according
to the procedures in
and .
Protocol Extensions
In addition to defining the new SDP Grouping Framework extension, this specification defines
the following protocol extensions and RFC updates. This specification:
-
defines a new SDP attribute, 'bundle-only', which can be used to
request that a specific "m=" section (and the associated media) be used only if kept
within a BUNDLE group.
-
updates RFC 3264 , to also allow assigning a zero port value to an "m=" section
in cases where the media described by the "m=" section is not disabled or rejected.
-
defines a new RTCP SDES item, 'MID', and a new RTP SDES header
extension that can be used to associate RTP streams with "m=" sections.
-
updates by adding an exception,
for the MID RTP header extension, to the requirement regarding protection
of an SDES RTP header extension carrying an SDES item for the MID RTP
header extension.
Changes from RFC 8843
When RFC 8843 and
were published an inconsistency between the specifications was identified. The procedures regarding assigning
the port value to a bundled "m=" section in an answer (initial or subsequent) and a subsequent offer
were inconsistent. At the IETF 110 meeting it was agreed to publish new versions of the RFCs, in which
the inconsistency is removed. This specification removes the inconsistency by aligning the port value assignment
procedure with the procedure in RFC 8829.
In addition, this document implements the following erratas: 6431, 6437
Terminology
-
- "m=" section:
- SDP bodies contain one or more media descriptions, referred to
as "m=" sections. Each "m=" section is represented by an SDP "m=" line and zero or more
SDP attributes associated with the "m=" line. A local address:port combination is
assigned to each "m=" section.
- 5-tuple:
- A collection of the following values: source address, source
port, destination address, destination port, and transport-layer
protocol.
- Unique address:port:
- An address:port combination that is assigned to
only one "m=" section in an offer or answer.
- Offerer BUNDLE-tag:
- The first identification-tag in a given
SDP 'group:BUNDLE' attribute identification-tag list in an offer.
- Answerer BUNDLE-tag:
- The first identification-tag in a given
SDP 'group:BUNDLE' attribute identification-tag list in an answer.
- Suggested offerer-tagged "m=" section:
- The bundled "m=" section identified by the offerer BUNDLE-tag in an initial BUNDLE offer,
before a BUNDLE group has been negotiated.
- Offerer-tagged "m=" section:
- The bundled "m=" section identified by the offerer BUNDLE-tag in a subsequent offer.
The "m=" section contains characteristics (offerer BUNDLE address:port and offerer BUNDLE attributes) that are applied to
each "m=" section within the BUNDLE group.
- Answerer-tagged "m=" section:
- The bundled "m=" section identified by the answerer BUNDLE-tag in an answer
(initial BUNDLE answer or subsequent). The "m=" section contains characteristics (answerer BUNDLE address:port and answerer BUNDLE attributes)
that are applied to each "m=" section within the BUNDLE group.
- BUNDLE address:port:
- An address:port combination that an endpoint uses for sending and receiving
bundled media.
- Offerer BUNDLE address:port:
- The address:port combination used by the offerer
for sending and receiving media.
- Answerer BUNDLE address:port:
- The address:port combination used by the answerer
for sending and receiving media.
- BUNDLE attributes:
- IDENTICAL and TRANSPORT multiplexing category SDP
attributes. Once a BUNDLE group has been created, the attribute values apply
to each bundled "m=" section within the BUNDLE group.
- Offerer BUNDLE attributes:
- IDENTICAL and TRANSPORT multiplexing category SDP
attributes included in the offerer-tagged "m=" section.
- Answerer BUNDLE attributes:
- IDENTICAL and TRANSPORT multiplexing category SDP
attributes included in the answerer-tagged "m=" section.
- BUNDLE transport:
- The transport (5-tuple) used by all media described by the
"m=" sections within a BUNDLE group.
- BUNDLE group:
- A set of bundled "m=" sections, created using an SDP offer/answer
exchange, that uses a single BUNDLE transport, and a single set of BUNDLE attributes,
for sending and receiving all media (bundled media) described by the set of "m=" sections.
The same BUNDLE transport is used for sending and receiving bundled media.
- Bundled "m=" section:
- An "m=" section, whose identification-tag
is placed in an SDP 'group:BUNDLE' attribute identification-tag list
in an offer or answer.
- Bundle-only "m=" section:
- A bundled "m=" section that contains an
SDP 'bundle-only' attribute.
- Bundled media:
- All media associated with a given BUNDLE group.
- Initial BUNDLE offer:
- The first offer, within an SDP session (e.g., a SIP dialog
when SIP is used to carry SDP), in which
the offerer indicates that it wants to negotiate a given BUNDLE group.
- Initial BUNDLE answer:
- The answer to an initial BUNDLE offer in which the offerer indicates that it wants to negotiate
a BUNDLE group, and the answerer accepts the creation of the BUNDLE group. The BUNDLE group is
created once the answerer sends the initial BUNDLE answer.
- Subsequent offer:
- An offer that contains a BUNDLE group that
has been created as part of a previous offer/answer exchange.
- Subsequent answer:
- An answer to a subsequent offer.
- Identification-tag:
- A unique token value that is used to identify an
"m=" section. The SDP 'mid' attribute in an "m=" section carries the unique identification-tag
assigned to that "m=" section. The session-level SDP 'group' attribute
carries a list of
identification-tags, identifying the "m=" sections associated with that
particular 'group' attribute.
Conventions
The key words "MUST", "MUST NOT",
"REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
"RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are
to be interpreted as described in BCP 14
when, and only when, they appear in all capitals,
as shown here.
Applicability Statement
The mechanism in this specification only applies to SDP , when used together with the SDP offer/answer
mechanism .
Declarative usage of SDP is out of scope of this document and is
thus undefined.
SDP Grouping Framework BUNDLE Extension
This section defines a new SDP Grouping Framework extension, 'BUNDLE'. The BUNDLE extension can be used with the SDP
offer/answer mechanism to negotiate a set of "m=" sections that will become part of a BUNDLE
group. Within a BUNDLE group, each "m=" section uses a BUNDLE transport for sending and
receiving bundled media. Each endpoint uses a single address:port combination for sending and
receiving the bundled media.
The BUNDLE extension is indicated using an SDP 'group' attribute with a semantics value
of "BUNDLE".
An identification-tag is assigned to each bundled
"m=" section, and each identification-tag is listed in the SDP 'group:BUNDLE'
attribute identification-tag list. Each "m=" section whose identification-tag
is listed in the identification-tag list is associated with a given
BUNDLE group.
SDP bodies can contain multiple BUNDLE groups. Any given bundled "m="
section MUST NOT be associated with more than one BUNDLE group at any given
time.
NOTE: The order of the "m=" sections listed in the SDP 'group:BUNDLE' attribute
identification-tag list does not have to be the same as the order in which
the "m=" sections occur in the SDP.
The multiplexing category for the 'group:BUNDLE'
attribute is 'NORMAL'.
defines the
detailed SDP offer/answer procedures for the BUNDLE extension.
SDP 'bundle-only' Attribute
This section defines a new SDP media-level attribute , 'bundle-only'. 'bundle-only' is a property attribute
and hence has no value.
In order to ensure that an answerer that does not support the BUNDLE extension always
rejects a bundled "m=" section in an offer, the offerer can assign a zero port value to the "m="
section. According to , an answerer
will reject such an "m=" section.
By including an SDP 'bundle-only' attribute in a bundled "m=" section, the offerer can
request that the answerer accepts the "m=" section only if the answerer supports the BUNDLE
extension and if the answerer keeps the "m=" section within the associated BUNDLE group.
-
- Name:
- bundle-only
- Value:
- N/A
- Usage Level:
- media
- Charset Dependent:
- no
- Example:
- a=bundle-only
The usage of the 'bundle-only' attribute is only defined for a
bundled "m=" section with a zero port value. Other usage is
unspecified. If an offerer or answerer receives a ‘bundle-only’
attribute in a non-bundled "m=" section the offerer or answerer
MUST discard the attribute.
defines the detailed SDP
offer/answer procedures for the 'bundle-only' attribute.
SDP Offer/Answer Procedures
This section describes the SDP offer/answer procedures for:
-
Negotiating a BUNDLE group;
-
Suggesting and selecting the tagged "m=" sections (offerer-tagged "m=" section and answerer-tagged "m=" section);
-
Adding an "m=" section to a BUNDLE group;
-
Moving an "m=" section out of a BUNDLE group; and
-
Disabling an "m=" section within a BUNDLE group.
The generic rules and procedures defined in and
also apply to the BUNDLE extension. For example, if an offer is rejected
by the answerer, the previously negotiated addresses:ports, SDP parameters, and characteristics
(including those associated with a BUNDLE group) apply. Hence, if an offerer
generates an offer in order to negotiate a BUNDLE group,
and the answerer rejects the offer, the BUNDLE group is not created.
The procedures in this section are independent of the media type or
"m=" line proto value assigned to a bundled "m=" section. defines
additional considerations for the usage of the SDP 'bundle-only' attribute.
defines additional
considerations for RTP-based media.
defines additional
considerations for the usage of the ICE
mechanism.
Offers and answers can contain multiple BUNDLE groups. The procedures in this
section apply independently to a given BUNDLE group.
Generic SDP Considerations
This section describes generic restrictions associated with the usage of
SDP parameters within a BUNDLE group. It also describes how to calculate a
value for the whole BUNDLE group, when parameter and attribute values have been assigned
to each bundled "m=" section.
Connection Data ("c=")
The "c=" line nettype value associated with a bundled "m=" section MUST be 'IN'.
The "c=" line addrtype value associated with a bundled "m=" section MUST be 'IP4' or
'IP6'. The same value MUST be associated with each "m=" section.
NOTE: Extensions to this specification can specify usage of the BUNDLE
mechanism for other nettype and addrtype values than the ones listed above.
Bandwidth ("b=")
An offerer and answerer MUST use the rules and restrictions defined
in for
associating the SDP bandwidth ("b=") line with bundled "m=" sections.
Attributes ("a=")
An offerer and answerer MUST include SDP attributes in every bundled "m=" section where applicable,
following the normal offer/answer procedures for each attribute, with the following exceptions:
-
In the initial BUNDLE offer, the offerer MUST NOT
include IDENTICAL and TRANSPORT multiplexing category SDP
attributes (BUNDLE attributes) in bundle-only "m=" sections. The
offerer MUST include such attributes in all other
bundled "m=" sections. In the initial BUNDLE offer, each bundled
"m=" line can contain a different set of BUNDLE attributes and
attribute values. Once the offerer-tagged "m=" section has been
selected, the BUNDLE attributes contained in the offerer-tagged
"m=" section will apply to each bundled "m=" section within the
BUNDLE group.
-
In a subsequent offer, or in an answer (initial of subsequent),
the offerer and answerer MUST include IDENTICAL
and TRANSPORT multiplexing category SDP attributes (BUNDLE
attributes) only in the tagged "m=" section (offerer-tagged "m="
section or answerer-tagged "m=" section). The offerer and
answerer MUST NOT include such attributes in any
other bundled "m=" section. The BUNDLE attributes contained in
the tagged "m=" section will apply to each bundled "m=" section
within the BUNDLE group.
-
In an offer (initial BUNDLE offer or subsequent), or in an
answer (initial BUNDLE answer or subsequent), the offerer and
answerer MUST include SDP attributes from
categories other than IDENTICAL and TRANSPORT in each bundled
"m=" section that a given attribute applies to. Each bundled
"m=" line can contain a different set of such attributes, and
attribute values, as such attributes only apply to the given
bundled "m=" section in which they are included.
NOTE: A consequence of the rules above is that media-specific
IDENTICAL and TRANSPORT multiplexing category SDP attributes that
are applicable only to some of the bundled "m=" sections within
the BUNDLE group might appear in the tagged "m=" section for which
they are not applicable. For instance, the tagged "m=" section
might contain an SDP 'rtcp-mux' attribute even if the tagged "m="
section does not describe RTP-based media (but another bundled
"m=" section within the BUNDLE group does describe RTP-based
media).
Generating the Initial SDP Offer
The procedures in this section apply to the first offer, within an SDP session (e.g., a SIP
dialog when SIP is used to carry SDP), in which the
offerer indicates that it wants to negotiate a given BUNDLE group. This could occur in the
initial offer, or in a subsequent offer, of the SDP session.
When an offerer generates an initial BUNDLE offer, in order to negotiate a
BUNDLE group, it MUST:
-
Assign a unique address:port to each bundled "m=" section,
following the procedures in , excluding any bundle-only "m=" sections (see below);
-
Pick a bundled "m=" section as the suggested offerer-tagged "m=" ();
-
Include SDP attributes in the bundled "m=" sections following the rules
in ;
-
Include an SDP 'group:BUNDLE' attribute in the offer; and
-
Place the identification-tag of each bundled "m=" section in the
SDP 'group:BUNDLE' attribute identification-tag list. The offerer BUNDLE-tag
indicates the suggested offerer-tagged "m=" section.
NOTE: When the offerer assigns unique addresses:ports to multiple bundled "m=" sections, the offerer needs to be prepared
to receive bundled media on each unique address:port, until it receives the associated answer and finds out which
bundled "m=" section (and associated address:port combination) the answerer has selected as the offerer-tagged "m=" section.
If the offerer wants to request that the answerer accepts a given bundled "m=" section only if
the answerer keeps the "m=" section within the negotiated BUNDLE group, the offerer MUST:
-
Include an SDP 'bundle-only' attribute () in the "m=" section, and
-
Assign a zero port value to the "m=" section.
NOTE: If the offerer assigns a zero port value to a bundled "m=" section, but does not include an
SDP 'bundle-only' attribute in the "m=" section, it is an indication that the offerer wants
to disable the "m=" section ().
Sections and show
an example of an initial BUNDLE offer.
Suggesting the Offerer-Tagged 'm=' Section
In the initial BUNDLE offer, the bundled "m=" section indicated by the offerer BUNDLE-tag is the suggested offerer-tagged "m=" section.
The address:port combination associated with the "m=" section will be used by the offerer for sending and receiving bundled
media if the answerer selects the "m=" section as the offerer-tagged "m=" section (). In addition, if the answerer selects the "m=" section as the offerer-tagged "m=" section,
the BUNDLE attributes included in the "m=" section will be applied to each "m=" section within the negotiated BUNDLE group.
The offerer MUST NOT suggest a bundle-only "m=" section as the offerer-tagged "m=" section.
It is RECOMMENDED that the suggested offerer-tagged "m=" section be a bundled "m=" section
that the offerer believes is unlikely that the answerer will reject or move out of the BUNDLE group.
How such assumption is made is outside the scope of this document.
Example: Initial SDP Offer
The example shows an initial BUNDLE offer. The offer includes two
"m=" sections in the offer and suggests that both "m=" sections are included in a BUNDLE group.
The audio "m=" section is the suggested offerer-tagged "m=" section, indicated by placing the
identification-tag associated with the "m=" section (offerer BUNDLE-tag) first in the SDP group:BUNDLE
attribute identification-id list.
SDP Offer
v=0
o=alice 2890844526 2890844526 IN IP6 2001:db8::3
s=
c=IN IP6 2001:db8::3
t=0 0
a=group:BUNDLE foo bar
m=audio 10000 RTP/AVP 0 8 97
b=AS:200
a=mid:foo
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:97 iLBC/8000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 10002 RTP/AVP 31 32
b=AS:1000
a=mid:bar
a=rtcp-mux
a=rtpmap:31 H261/90000
a=rtpmap:32 MPV/90000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
The example shows an initial BUNDLE offer. The offer includes two
"m=" sections in the offer and suggests that both "m=" sections are included in a BUNDLE group.
The offerer includes an SDP 'bundle-only' attribute in the video "m=" section, to request that the
answerer accepts the "m=" section only if the answerer supports the BUNDLE extension and if the
answerer keeps the "m=" section within the associated BUNDLE group.
The audio "m=" section is the suggested offerer-tagged "m=" section, indicated by placing the
identification-tag associated with the "m=" section (offerer BUNDLE-tag) first in the SDP group:BUNDLE
attribute identification-id list.
SDP Offer
v=0
o=alice 2890844526 2890844526 IN IP6 2001:db8::3
s=
c=IN IP6 2001:db8::3
t=0 0
a=group:BUNDLE foo bar
m=audio 10000 RTP/AVP 0 8 97
b=AS:200
a=mid:foo
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:97 iLBC/8000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 0 RTP/AVP 31 32
b=AS:1000
a=mid:bar
a=bundle-only
a=rtpmap:31 H261/90000
a=rtpmap:32 MPV/90000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
Generating the SDP Answer
When an answerer generates an answer (initial BUNDLE answer or subsequent) that contains a BUNDLE group, the following general
SDP Grouping Framework restrictions, defined in , also apply to the BUNDLE group:
-
The answerer is only allowed to include a BUNDLE group in an
initial BUNDLE answer if the offerer requested the BUNDLE group
to be created in the corresponding initial BUNDLE offer;
-
The answerer is only allowed to include a BUNDLE group in a
subsequent answer if the corresponding subsequent offer contains
a previously negotiated BUNDLE group;
-
The answerer is only allowed to include a bundled "m=" section
in an answer if the "m=" section was indicated as bundled in the
corresponding offer; and
-
The answerer is only allowed to include a bundled "m=" section
in the same BUNDLE group as the bundled "m=" line in the
corresponding offer.
In addition, when an answerer generates an answer (initial BUNDLE
answer or subsequent) that contains a BUNDLE group, the answerer
MUST:
-
In case of an initial BUNDLE answer, select the offerer-tagged
"m=" section using the procedures in . In case of a
subsequent answer, the offerer-tagged "m=" section is indicated
in the corresponding subsequent offer and MUST NOT be changed by the answerer;
-
Select the answerer-tagged "m=" section ();
-
Assign the answerer BUNDLE address:port to the answerer-tagged
"m=" section, and to every other bundled "m=" section within the BUNDLE
group;
-
Include SDP attributes in the bundled "m=" sections following the rules
in ;
-
Include an SDP 'group:BUNDLE' attribute in the answer; and
-
Place the identification-tag of each bundled "m=" section in the
SDP 'group:BUNDLE' attribute identification-tag list. The answerer BUNDLE-tag
indicates the answerer-tagged "m=" section ().
If the answerer does not want to keep an "m=" section within a BUNDLE group, it MUST:
-
Move the "m=" section out of the BUNDLE group (); or
-
Reject the "m=" section ().
The answerer can modify the answerer BUNDLE address:port, add and remove SDP attributes, or modify
SDP attribute values in a subsequent answer. Changes to the answerer BUNDLE address:port
and the answerer BUNDLE attributes will be applied to each bundled "m=" section within the BUNDLE group.
NOTE: If a bundled "m=" section in an offer contains a zero port value, but the "m=" section
does not contain an SDP 'bundle-only' attribute, it is an indication that the offerer wants
to disable the "m=" section ().
Answerer Selection of Tagged 'm=' Sections
When selecting the offerer-tagged "m=" section, the answerer MUST
first check whether the "m=" section fulfills the following criteria
:
-
The answerer will not move the "m=" section out of the BUNDLE group
();
-
The answerer will not reject the "m=" section (); and
-
The "m=" section does not contain a zero port value.
If all of the criteria above are fulfilled, the answerer MUST select
the "m=" section as the offerer-tagged "m=" section and MUST also mark
the corresponding "m=" section in the answer as the answerer-tagged "m=" section.
In the answer, the answerer BUNDLE-tag indicates the answerer-tagged "m=" section.
If one or more of the criteria are not fulfilled, the answerer MUST pick the next
identification-tag in the identification-tag list in the offer and perform the same criteria
check for the "m=" section indicated by that identification-tag. If there are no
more identification-tags in the identification-tag list, the answerer MUST NOT
create the BUNDLE group. Unless the answerer rejects the whole offer,
the answerer MUST apply the answerer procedures for moving an "m=" section out of a
BUNDLE group () or
rejecting an "m=" section within a BUNDLE group () to every bundled "m=" section in the offer when
creating the answer.
shows an
example of an offerer BUNDLE address:port selection.
Sections and
show an example of an
answerer-tagged "m=" section selection.
Moving a Media Description Out of a BUNDLE Group
When an answerer generates the answer, if the answerer wants to move a bundled "m=" section out of
the negotiated BUNDLE group, the answerer MUST first check the following criteria:
-
In the corresponding offer, the "m=" section is within a previously negotiated BUNDLE group, and
-
In the corresponding offer, the "m=" section contains an SDP 'bundle-only' attribute.
If either criterion above is fulfilled, the answerer cannot move the "m=" section out of
the BUNDLE group in the answer. The answerer can reject the whole offer, reject each
bundled "m=" section within the BUNDLE group (),
or keep the "m=" section within the BUNDLE group in the answer and later create an offer where
the "m=" section is moved out of the BUNDLE group ().
NOTE: One consequence of the rules above is that, once a BUNDLE group has been negotiated, a bundled "m=" section
cannot be moved out of the BUNDLE group in an answer. Instead, an offer is needed.
When the answerer generates an answer, in which it moves a bundled "m=" section out
of a BUNDLE group, the answerer:
-
MUST assign a unique address:port to the "m=" section;
-
MUST include any applicable SDP attribute in the "m=" section, using the normal
offer/answer procedures for each attribute;
-
MUST NOT place the identification-tag associated with the "m=" section in
the SDP 'group:BUNDLE' attribute identification-tag list associated with
the BUNDLE group; and
-
MUST NOT include an SDP 'bundle-only' attribute to the "m=" section.
Because an answerer is not allowed to move an "m=" section from one BUNDLE group to another within an answer
(), if
the answerer wants to move an "m=" section from one BUNDLE group to another, it MUST first move the
"m=" section out of the current BUNDLE group and then generate an offer where the "m=" section is
added to another BUNDLE group ().
Rejecting a Media Description in a BUNDLE Group
When an answerer wants to reject a bundled "m=" section in an answer, it MUST first check
the following criterion:
-
In the corresponding offer, the "m=" section is the offerer-tagged "m=" section.
If the criterion above is fulfilled, the answerer cannot reject the "m=" section in
the answer. The answerer can reject the whole offer, reject each bundled "m=" section
within the BUNDLE group, or keep the "m=" section within the BUNDLE group in the answer and later create
an offer where the "m=" section is disabled within the BUNDLE group ().
When an answerer generates an answer, in which it rejects a bundled "m=" section,
the answerer:
-
MUST assign a zero port value to the "m=" section, according to the procedures in
;
-
MUST NOT place the identification-tag associated with the "m=" section in
the SDP 'group:BUNDLE' attribute identification-tag list associated with
the BUNDLE group; and
-
MUST NOT include an SDP 'bundle-only' attribute in the "m=" section.
Example: SDP Answer
The example below shows an answer, based on the corresponding offer in
.
The answerer accepts both bundled "m=" sections within the created
BUNDLE group. The audio "m=" section is the answerer-tagged "m=" section, indicated
by placing the identification-tag associated with the "m=" section
(answerer BUNDLE-tag) first in the SDP group;BUNDLE attribute
identification-id list.
SDP Answer
v=0
o=bob 2808844564 2808844564 IN IP6 2001:db8::1
s=
c=IN IP6 2001:db8::1
t=0 0
a=group:BUNDLE foo bar
m=audio 20000 RTP/AVP 0
b=AS:200
a=mid:foo
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 20000 RTP/AVP 32
b=AS:1000
a=mid:bar
a=rtpmap:32 MPV/90000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
RFC 8843 Considerations
In RFC 8843, instead of assigning the offerer BUNDLE address:port to
each "m=" section within the BUNDLE group when modifying the session
(), the offerer only assigned the offerer BUNDLE
address:port to the offerer-tagged "m=" section. For every other "m=" section
within the BUNDLE group, the offerer included an SDP 'bundle-only' attribute in,
and assigned a zero port value to, the "m=" section. The way an answerer compliant
to this specification processes such offer is considered an implementation issue
(e.g., based on whether the answerer needs to be backward compatible with RFC 8843
compliant offerers), and is outside the scope of this specification. The example below
shows such SDP Offer:
SDP Offer
v=0
o=alice 2890844526 2890844526 IN IP6 2001:db8::3
s=
c=IN IP6 2001:db8::3
t=0 0
a=group:BUNDLE foo bar
m=audio 10000 RTP/AVP 0 8 97
b=AS:200
a=mid:foo
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:97 iLBC/8000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 0 RTP/AVP 31 32
b=AS:1000
a=mid:bar
a=bundle-only
a=rtpmap:31 H261/90000
a=rtpmap:32 MPV/90000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
Offerer Processing of the SDP Answer
When an offerer receives an answer, if the answer contains a BUNDLE group, the offerer
MUST check that any bundled "m=" section in the answer was indicated as bundled in the
corresponding offer. If there is no mismatch, the offerer MUST apply the properties (BUNDLE address:port,
BUNDLE attributes, etc.) of the offerer-tagged "m=" section (selected by the answerer; see
) to each bundled "m=" section
within the BUNDLE group.
NOTE: As the answerer might reject one or more bundled "m=" sections in an initial BUNDLE offer,
or move a bundled "m=" section out of a BUNDLE group, a given bundled "m=" section in the
offer might not be indicated as bundled in the corresponding answer.
If the answer does not contain a BUNDLE group, the offerer MUST process the answer
as a normal answer.
RFC 8843 Considerations
In RFC 8843, instead of assigning the answerer BUNDLE address:port to
each "m=" section within the BUNDLE group when generating the
SDP Answer (), the answerer only assigned the
answerer BUNDLE address:port to the answerer-tagged "m=" section.
For every other "m=" section within the BUNDLE group, the answerer
included an SDP 'bundle-only' attribute in, and assigned a zero port
value to, the "m=" section. The way an offerer compliant
to this specification processes such SDP Answer is considered an implementation issue
(e.g., based on whether the answerer needs to be backward compatible with RFC 8843
compliant offerers), and is outside the scope of this specification. The example below
shows such SDP Answer:
SDP Answer
v=0
o=bob 2808844564 2808844564 IN IP6 2001:db8::1
s=
c=IN IP6 2001:db8::1
t=0 0
a=group:BUNDLE foo bar
m=audio 20000 RTP/AVP 0
b=AS:200
a=mid:foo
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 0 RTP/AVP 32
b=AS:1000
a=mid:bar
a=bundle-only
a=rtpmap:32 MPV/90000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
Modifying the Session
When a BUNDLE group has been previously negotiated, and an offerer generates a subsequent
offer, the offerer MUST:
-
Pick one bundled "m=" section as the offerer-tagged "m=" section. The offerer
can pick either the "m=" section that was previously selected by the answerer
as the offerer-tagged "m=" section or another bundled "m=" section within the
BUNDLE group;
-
Assign a BUNDLE address:port (previously negotiated or newly
suggested) to the offerer-tagged "m=" section, and to every other
bundled "m=" section within the BUNDLE group;
-
Include SDP attributes in the bundled "m=" sections following the rules in
;
-
Include an SDP 'group:BUNDLE' attribute in the offer; and
-
Place the identification-tag of each bundled "m=" section in the
SDP 'group:BUNDLE' attribute identification-tag list. The offerer BUNDLE-tag
indicates the offerer-tagged "m=" section.
The offerer MUST NOT pick a given bundled "m=" section as the offerer-tagged "m=" section if:
-
The offerer wants to move the "m=" section out of the BUNDLE group
(), or
-
The offerer wants to disable the "m=" section ().
The offerer can modify the offerer BUNDLE address:port, add and remove SDP attributes, or modify
SDP attribute values in the subsequent offer. Changes to the offerer BUNDLE address:port and the
offerer BUNDLE attributes will (if the offer is accepted by the answerer) be applied to each
bundled "m=" section within the BUNDLE group.
Adding a Media Description to a BUNDLE Group
When an offerer generates a subsequent offer, in which it wants to add a bundled "m=" section to
a previously negotiated BUNDLE group, the offerer follows the procedures in . The offerer picks either the added "m=" section or an "m=" section
previously added to the BUNDLE group as the offerer-tagged "m=" section.
NOTE: As described in , the answerer cannot move the added "m=" section
out of the BUNDLE group in its answer. If the answer wants to move the "m=" section out of the BUNDLE group, it will have to first accept
it into the BUNDLE group in the answer, and then send a subsequent offer where the "m=" section is moved out of the BUNDLE group
().
Moving a Media Description Out of a BUNDLE Group
When an offerer generates a subsequent offer, in which it wants to remove a bundled "m=" section from
a BUNDLE group, the offerer:
-
MUST assign a unique address:port to the "m=" section;
-
MUST include SDP attributes in the "m=" section following the
normal offer/answer rules for each attribute;
-
MUST NOT place the identification-tag associated with the "m=" section in
the SDP 'group:BUNDLE' attribute identification-tag list associated with
the BUNDLE group; and
-
MUST NOT assign an SDP 'bundle-only' attribute to the "m=" section.
For the other bundled "m=" sections within the BUNDLE group, the offerer follows the procedures
in .
An offerer MUST NOT move an "m=" section from one BUNDLE group to another within a
single offer. If the offerer wants to move an "m=" section from one BUNDLE group to
another, it MUST first move the BUNDLE group out of the current BUNDLE group, and then
generate a second offer where the "m=" section is added to another BUNDLE group
().
shows an example of an offer for moving an "m=" section out of a BUNDLE group.
Disabling a Media Description in a BUNDLE Group
When an offerer generates a subsequent offer, in which it wants to disable a bundled "m=" section from
a BUNDLE group, the offerer:
-
MUST assign a zero port value to the "m=" section, following the procedures
in ;
-
MUST NOT place the identification-tag associated with the "m=" section in
the SDP 'group:BUNDLE' attribute identification-tag list associated with
the BUNDLE group; and
-
MUST NOT assign an SDP 'bundle-only' attribute to the "m=" section.
For the other bundled "m=" sections within the BUNDLE group, the offerer follows the procedures
in .
shows an example of an offer and answer for disabling an "m=" section within a
BUNDLE group.
SIP Considerations
The Session Initiation Protocol (SIP) allows
a User Agent Client (UAC) to send a re-INVITE request without an SDP body (sometimes referred to as an empty re-INVITE).
In such cases, the User Agent Server (UAS) will include an SDP Offer in the associated 200 OK response. This is typically used
for 3rd Party Call Control (3PCC) scenarios. From a BUNDLE perspective, such SDP Offer SHOULD be generated using the procedures
defined in .
Protocol Identification
Each "m=" section within a BUNDLE group MUST use the same transport-
layer protocol. If bundled "m=" sections use different upper-layer protocols
on top of the transport-layer protocol, there MUST exist a publicly
available specification that describes how a mechanism associates
received data with the correct protocol for this particular protocol combination.
In addition, if received data can be associated with more than
one bundled "m=" section, there MUST exist a publicly available
specification that describes a mechanism for associating the
received data with the correct "m=" section.
This document describes a mechanism to identify the
protocol of received data among the Session Traversal Utilities for NAT (STUN), DTLS, and the Secure Real-time Transport Protocol (SRTP)
(in any combination) when UDP is used as a transport-layer protocol,
but it does not describe how to identify different protocols transported on
DTLS.
While the mechanism is generally applicable to other protocols and
transport-layer protocols, any such use requires further specification
that encompasses how to multiplex multiple protocols on a given transport-layer protocol
and how to associate received data with the correct protocols.
STUN, DTLS, and SRTP
Section 5.1.2 of describes a
mechanism to identify the protocol of a received packet among the STUN, DTLS, and
SRTP protocols (in any combination).
If an offer or answer includes a bundled "m=" section that represents these protocols, the offerer
or answerer MUST support the mechanism described in , and no explicit negotiation is required in order to indicate support
and usage of the mechanism.
does not describe how to identify
different protocols transported on DTLS, only how to identify the DTLS protocol itself. If
multiple protocols are transported on DTLS, there MUST exist a specification describing a
mechanism for identifying each individual protocol. In addition, if a received DTLS packet
can be associated with more than one "m=" section, there MUST exist a specification that
describes a mechanism for associating the received DTLS packets with the correct "m=" section.
describes how to
associate the packets in a received SRTP stream with the correct "m=" section.
RTP Considerations
Single RTP Session
All RTP-based media within a single BUNDLE group belong to a
single RTP session .
Since a single BUNDLE transport is used for sending and receiving bundled media,
the symmetric RTP mechanism
MUST be used for RTP-based bundled media.
Since a single RTP session is used for each BUNDLE group, all
"m=" sections representing RTP-based media within a BUNDLE group will
share a single Synchronization Source (SSRC) numbering space .
The following rules and restrictions apply for a single RTP
session:
-
A specific payload type value can be used in multiple bundled "m=" sections
only if each codec associated with the payload type number shares an identical
codec configuration ().
-
The proto value in each bundled RTP-based "m=" section MUST be identical
(e.g., RTP/AVPF).
-
The RTP MID header extension MUST be enabled, by including
an SDP 'extmap' attribute ,
with a 'urn:ietf:params:rtp- hdrext:sdes:mid' URI value, in each
bundled RTP-based "m=" section in every offer and answer.
-
A given SSRC MUST NOT transmit RTP packets using payload types that
originate from different bundled "m=" sections.
NOTE: The last bullet above is to avoid sending multiple media types
from the same SSRC. If transmission of multiple media types are done
with time overlap, RTP and RTCP fail to function. Even if done in
proper sequence, this causes RTP timestamp rate switching issues
. However,
once an SSRC has left the RTP session (by sending an RTCP BYE packet),
that SSRC can be reused by another source (possibly associated
with a different bundled "m=" section) after a delay of 5 RTCP reporting intervals
(the delay is to ensure the SSRC has timed out, in case the RTCP BYE
packet was lost ).
defines Differentiated Services
(Diffserv) considerations for RTP-based bundled media sent using a mixture of Diffserv Codepoints.
Payload Type (PT) Value Reuse
Multiple bundled "m=" sections might describe RTP-based media. As all RTP-based
media associated with a BUNDLE group belong to the same RTP session, in order
for a given payload type value to be used inside more than one bundled "m=" section,
all codecs associated with the payload type number MUST share an identical codec
configuration. This means that the codecs MUST share the same media type,
encoding name, clock rate, and any parameter that can affect the codec configuration
and packetization. lists SDP attributes, whose attribute
values are required to be identical for all codecs that use the
same payload type value.
Associating RTP/RTCP Streams with the Correct SDP Media Description
As described in , RTP packets are associated with RTP
streams . Each RTP stream is identified by an SSRC
value, and each RTP packet includes an SSRC field that is
used to associate the packet with the correct RTP stream.
RTCP packets also use SSRCs to identify which RTP streams the
packet relates to. However, an RTCP packet can contain multiple SSRC
fields, in the course of providing feedback or reports on different RTP
streams, and therefore can be associated with multiple such streams.
In order to be able to process received RTP/RTCP packets
correctly, it MUST be possible to associate an RTP stream with
the correct "m=" section, as the "m=" section and SDP attributes
associated with the "m=" section contains information needed to
process the packets.
As all RTP streams associated with a BUNDLE group use the
same transport for sending and receiving RTP/RTCP
packets, the local address:port combination part of the transport
cannot be used to associate an RTP stream with the correct "m=" section.
In addition, multiple RTP streams might be associated with the same "m="
section.
An offerer and answerer can inform each other which SSRC
values they will use for an RTP stream by using the SDP 'ssrc'
attribute .
However, an offerer will not know which SSRC values the
answerer will use until the offerer has received the answer
providing that information. Due to this, before the offerer has
received the answer, the offerer will not be able to associate
an RTP stream with the correct "m=" section using the SSRC value
associated with the RTP stream. In addition, the offerer and
answerer may start using new SSRC values mid-session, without
informing each other about using the SDP 'ssrc' attribute.
In order for an offerer and answerer to always be able to
associate an RTP stream with the correct "m=" section, the offerer
and answerer using the BUNDLE extension MUST support the
mechanism defined in ,
where the offerer and answerer insert the identification-tag associated
with an "m=" section (provided by the remote peer) into RTP and RTCP
packets associated with a BUNDLE group.
When using this mechanism, the mapping from an SSRC to an
identification-tag is carried in RTP header extensions or RTCP SDES
packets, as specified in .
Since a compound RTCP packet can contain multiple RTCP SDES packets,
and each RTCP SDES packet can contain multiple chunks, a single RTCP
packet can contain several mappings of SSRC to identification-tag. The
offerer and answerer maintain tables used for routing that are updated
each time an RTP/RTCP packet contains new information that affects how
packets are to be routed.
However, some legacy implementations may not include this identification-tag
in their RTP and RTCP traffic when using the BUNDLE mechanism and
instead use a mechanism based on the payload type to associate RTP streams
with SDP "m=" sections. In this situation, each "m=" section needs to
use unique payload type values, in order for the payload type to be a
reliable indicator of the relevant "m=" section for the RTP stream. If an
implementation fails to ensure unique payload type values, it will be
impossible to associate the RTP stream using that payload type value
to a particular "m=" section.
Note that when using the payload type to associate RTP streams with
"m=" sections, an RTP stream, identified by its SSRC, will be mapped
to an "m=" section when the first packet of that RTP stream is
received, and the mapping will not be changed even if the payload
type used by that RTP stream changes. In other words, the SSRC
cannot "move" to a different "m=" section simply by changing the
payload type.
Applications can implement RTP stacks in many different
ways. The algorithm below details one way that RTP streams can be
associated with "m=" sections, but it is not meant to be prescriptive
about exactly how an RTP stack needs to be implemented.
Applications MAY use any algorithm that achieves equivalent results to
those described in the algorithm below.
To prepare to associate RTP streams with the correct
"m=" section, the following steps MUST be followed for each BUNDLE group:
-
Construct a table mapping a MID to an "m=" section for each "m="
section in this BUNDLE group. Note that an "m=" section may only
have one MID.
-
Construct a table mapping SSRCs of incoming RTP streams to an "m=" section for
each "m=" section in this BUNDLE group and for each SSRC
configured for receiving in that "m=" section.
-
Construct a table mapping the SSRC of each outgoing RTP stream
to an "m=" section for each "m=" section in this BUNDLE group and for each SSRC
configured for sending in that "m=" section.
-
Construct a table mapping a payload type to an "m=" section for
each "m=" section in the BUNDLE group and for each payload type
configured for receiving in that "m=" section. If any payload
type is configured for receiving in more than one "m=" section
in the BUNDLE group, do not include it in the table, as it
cannot be used to uniquely identify an "m=" section.
-
Note that for each of these tables, there can only be one
mapping for any given key (MID, SSRC, or PT). In other
words, the tables are not multimaps.
As "m=" sections are added or removed from the BUNDLE groups, or
their configurations are changed, the tables above MUST also be
updated.
When an RTP packet is received, it MUST be delivered to the RTP
stream corresponding to its SSRC. That RTP stream MUST then be
associated with the correct "m=" section within a BUNDLE group, for
additional processing, according to the following steps:
-
If the MID associated with the RTP stream is not in the
table mapping a MID to an "m=" section, then the RTP stream is not
decoded and the payload data is discarded.
-
If the packet has a MID, and the packet's extended sequence number
is greater than that of the last MID update, as discussed in
, update the MID associated
with the RTP stream to match the MID carried in the RTP packet, and then
update the mapping tables to include an entry that maps the SSRC of
that RTP stream to the "m=" section for that MID.
-
If the SSRC of the RTP stream is in the incoming SSRC
mapping table, check that the payload type used by the RTP
stream matches a payload type included on the matching
"m=" section. If so, associate the RTP stream with that
"m=" section. Otherwise, the RTP stream is not decoded and the
payload data is discarded.
-
If the payload type used by the RTP stream is in the
payload type table, update the incoming SSRC mapping table
to include an entry that maps the RTP stream's SSRC to the
"m=" section for that payload type. Associate the RTP stream
with the corresponding "m=" section.
-
Otherwise, mark the RTP stream as "not for decoding" and
discard the payload.
If the RTP packet contains one or more Contributing Source (CSRC)
identifiers, then each CSRC is looked up in the incoming SSRC table,
and a copy of the RTP packet is associated with the corresponding
"m=" section for additional processing.
For each RTCP packet received (including each RTCP packet that is
part of a compound RTCP packet), the packet is processed as usual by
the RTP layer, then associated with the appropriate "m=" sections, and
processed for the RTP streams represented by those "m=" sections.
This routing is type dependent, as each kind of RTCP packet has its own
mechanism for associating it with the relevant RTP streams.
RTCP packets that cannot be associated with an appropriate "m=" section
MUST still be processed as usual by the RTP layer, which updates the metadata
associated with the corresponding RTP streams. This situation can occur with
certain multiparty RTP topologies or when RTCP packets are sent containing
a subset of the SDES information.
Additional rules for processing various types of RTCP packets are
explained below.
-
If the RTCP packet is of type SDES, for each chunk in the packet
whose SSRC is found in the incoming SSRC table, deliver a copy
of the SDES packet to the "m=" section associated with that SSRC.
In addition, for any SDES MID items contained in these chunks,
if the MID is found in the table mapping a MID to an "m=" section,
update the incoming SSRC table to include an entry that
maps the RTP stream associated with the chunk's SSRC to the "m=" section
associated with that MID, unless the packet is older than the packet
that most recently updated the mapping for this SSRC, as discussed in
.
-
Note that if an SDES packet is received as part of a compound RTCP
packet, the SSRC to "m=" section mapping might not exist until the
SDES packet is handled (e.g., in the case where RTCP for a source
is received before any RTP packets). Therefore, it can be beneficial
for an implementation to delay RTCP packet routing, such that it
either prioritizes processing of the SDES item to generate or update
the mapping or buffers the RTCP information that needs to be
routed until the SDES item(s) has been processed. If the
implementation is unable to follow this recommendation, the
consequence could be that some RTCP information from this
particular RTCP compound packet is not provided to higher layers.
The impact from this is likely minor, when this information relates
to a future incoming RTP stream.
-
If the RTCP packet is of type BYE, it indicates that the RTP streams
referenced in the packet are ending. Therefore, for each SSRC
indicated in the packet that is found in the incoming SSRC table,
first deliver a copy of the BYE packet to the "m=" section associated
with that SSRC, and then remove the entry for that SSRC from the
incoming SSRC table after an appropriate delay to
account for "straggler packets", as specified in .
-
If the RTCP packet is of type Sender Report (SR) or Receiver Report (RR), for each report block in
the report whose "SSRC of source" is found in the outgoing
SSRC table, deliver a copy of the SR or RR packet to the "m=" section
associated with that SSRC. In addition, if the packet is of type
SR, and the sender SSRC for the packet is found in the
incoming SSRC table, deliver a copy of the SR packet to the "m=" section
associated with that SSRC.
-
If the implementation supports the RTCP Extended Report (XR) and the packet is of
type XR, as defined in ,
for each report block in the report whose "SSRC of source"
is found in the outgoing SSRC table, deliver a copy of the
XR packet to the "m=" section associated with that SSRC.
In addition, if the sender SSRC for the packet is found in the
incoming SSRC table, deliver a copy of the XR packet to the "m=" section
associated with that SSRC.
-
If the RTCP packet is a feedback message of type RTPFB (transport-layer FB
message) or PSFB (payload-specific FB message),
as defined in , it will contain a
media source SSRC, and this SSRC is used for routing certain
subtypes of feedback messages. However, several subtypes of
PSFB and RTPFB messages include a target SSRC(s) in a section called
Feedback Control Information (FCI). For these messages,
the target SSRC(s) is used for routing.
-
If the RTCP packet is a feedback packet that does not include
target SSRCs in its FCI section, and the media source SSRC is
found in the outgoing SSRC table, deliver the
feedback packet to the "m=" section associated with that SSRC.
RTPFB and PSFB types that are handled in this way include:
-
- Generic NACK:
- (PT=RTPFB, FMT=1) .
- Picture Loss Indication (PLI):
- (PT=PSFB, FMT=1) .
- Slice Loss Indication (SLI):
- (PT=PSFB, FMT=2) .
- Reference Picture Selection Indication (RPSI):
- (PT=PSFB, FMT=3) .
-
If the RTCP packet is a feedback message that does include a target
SSRC(s) in its FCI section, it can either be a request or a
notification. Requests reference an RTP stream that is being
sent by the message recipient, whereas notifications are responses
to an earlier request and therefore reference an RTP stream that
is being received by the message recipient.
-
If the RTCP packet is a feedback request that includes a target SSRC(s),
for each target SSRC that is found in the outgoing SSRC table,
deliver a copy of the RTCP packet to the "m=" section associated with
that SSRC. PSFB and RTPFB types that are handled in this way include:
-
- Full Intra Request (FIR):
- (PT=PSFB, FMT=4) .
- Temporal-Spatial Trade-off Request (TSTR):
- (PT=PSFB, FMT=5) .
- H.271 Video Back Channel Message (VBCM):
- (PT=PSFB, FMT=7) .
- Temporary Maximum Media Stream Bit Rate Request (TMMBR):
- (PT=RTPFB, FMT=3) .
- Layer Refresh Request (LRR):
- (PT=PSFB, FMT=10) .
-
If the RTCP packet is a feedback notification that includes a target SSRC(s),
for each target SSRC that is found in the incoming SSRC table,
deliver a copy of the RTCP packet to the "m=" section associated with
the RTP stream with a matching SSRC. PSFB and RTPFB types that are handled in this way include:
-
- Temporal-Spatial Trade-off Notification (TSTN):
- (PT=PSFB, FMT=6) . This message
is a notification in response to a prior TSTR.
- Temporary Maximum Media Stream Bit Rate Notification (TMMBN):
- (PT=RTPFB, FMT=4) . This message is a
notification in response to a prior TMMBR, but it can also be sent
unsolicited.
-
If the RTCP packet is of type APP, then it is handled in an application-specific
manner. If the application does not recognize the APP packet,
then it MUST be discarded.
RTP/RTCP Multiplexing
Within a BUNDLE group, the offerer and answerer MUST enable
RTP/RTCP multiplexing for the RTP-based bundled media (i.e., the
same transport will be used for both RTP packets and RTCP packets).
In addition, the offerer and answerer MUST support the
SDP 'rtcp-mux-only' attribute .
SDP Offer/Answer Procedures
This section describes how an offerer and answerer use the
SDP 'rtcp-mux' and SDP 'rtcp-mux-only' attributes
to negotiate usage of RTP/RTCP multiplexing for RTP-based bundled media.
RTP/RTCP multiplexing only applies to RTP-based media. However, as described in
, within an offer
or answer the SDP 'rtcp-mux' and SDP 'rtcp-mux-only' attributes might be included in
a bundled "m=" section for non-RTP-based media (if such "m=" section is the offerer-tagged
"m=" section or answerer-tagged "m=" section).
Generating the Initial SDP BUNDLE Offer
When an offerer generates an initial BUNDLE offer, if the offer contains
one or more bundled "m=" sections for RTP-based media (or, if there is a chance that "m=" sections
for RTP-based media will later be added to the BUNDLE group), the offerer MUST
include an SDP 'rtcp-mux' attribute in each
bundled "m=" section (excluding any bundle-only "m=" sections). In addition, the offerer MAY include an
SDP 'rtcp-mux-only' attribute
in one or more bundled "m=" sections for RTP-based media.
NOTE: Whether the offerer includes the SDP 'rtcp-mux-only' attribute
depends on whether the offerer supports fallback to usage of a separate
port for RTCP in case the answerer moves one or more "m=" sections for RTP-based media
out of the BUNDLE group in the answer.
NOTE: If the offerer includes an SDP 'rtcp-mux' attribute in the bundled "m=" sections,
but does not include an SDP 'rtcp-mux-only' attribute,
the offerer can also include an SDP 'rtcp' attribute in one or more RTP-based bundled "m=" sections in order
to provide a fallback port for RTCP, as described in . However, the fallback port will only be applied to "m=" sections for RTP-based
media that are moved out of the BUNDLE group by the answerer.
In the initial BUNDLE offer, the address:port combination for RTCP MUST be unique in each
bundled "m=" section for RTP-based media (excluding a bundle-only "m=" section), similar to RTP.
Generating the SDP Answer
When an answerer generates an answer, if the answerer supports RTP-based media,
and if a bundled "m=" section in the corresponding offer contained an SDP 'rtcp-mux' attribute,
the answerer MUST enable usage of RTP/RTCP multiplexing, even if there currently
are no bundled "m=" sections for RTP-based media within the BUNDLE group. The answerer MUST include
an SDP 'rtcp-mux' attribute in the answerer-tagged "m=" section, following the procedures for
BUNDLE attributes ().
In addition, if the "m=" section that is selected as the offerer-tagged "m=" section contained
an SDP 'rtcp-mux-only' attribute, the answerer MUST include an SDP 'rtcp-mux-only' attribute
in the answerer-tagged "m=" section.
In an initial BUNDLE offer, if the suggested offerer-tagged "m=" section contained an
SDP 'rtcp-mux-only' attribute, the "m=" section was for RTP-based media; thus, the
answerer does not accept the "m=" section in the created BUNDLE group, and the answerer
MUST move the "m=" section out of the BUNDLE group (); include the attribute in the
moved "m=" section and enable RTP/RTCP multiplexing for the media associated with
the "m=" section; or reject the "m=" section ().
The answerer MUST NOT include an SDP 'rtcp' attribute in any bundled "m=" section
in the answer. The answerer will use the port value of the offerer-tagged
"m=" section sending RTP and RTCP packets associated with RTP-based bundled media
towards the offerer.
If the usage of RTP/RTCP multiplexing within a BUNDLE group has been
negotiated in a previous offer/answer exchange, the answerer MUST
include an SDP 'rtcp-mux' attribute in the answerer-tagged "m=" section.
It is not possible to disable RTP/RTCP multiplexing within a BUNDLE group.
Offerer Processing of the SDP Answer
When an offerer receives an answer, if the answerer has accepted
the usage of RTP/RTCP multiplexing (),
the answerer follows the procedures for RTP/RTCP multiplexing defined
in . The
offerer will use the port value of the answerer-tagged "m=" section
for sending RTP and RTCP packets associated with
RTP-based bundled media towards the answerer.
NOTE: It is considered a protocol error if the answerer has not
accepted the usage of RTP/RTCP multiplexing for RTP-based "m=" sections
that the answerer included in the BUNDLE group.
Modifying the Session
When an offerer generates a subsequent offer, the offerer MUST include
an SDP 'rtcp-mux' attribute in the offerer-tagged "m=" section, following
the procedures for IDENTICAL multiplexing category attributes in
.
ICE Considerations
This section describes how to use the BUNDLE grouping extension together
with the ICE mechanism .
The generic procedures for negotiating the usage of ICE using SDP, defined
in , also apply to the usage of ICE
with BUNDLE, with the following exceptions:
-
When the BUNDLE transport has been established, ICE connectivity checks and keepalives
only need to be performed for the BUNDLE transport, instead of per individual bundled "m=" section
within the BUNDLE group.
-
The generic SDP attribute offer/answer considerations () also apply to ICE-related
attributes. Therefore, when an offerer sends an initial BUNDLE offer (in order to negotiate a BUNDLE group), the offerer
includes ICE-related media-level attributes in each bundled "m=" section (excluding any bundle-only "m=" sections),
and each "m=" section MUST contain unique ICE properties. When an answerer generates an answer (initial BUNDLE answer or subsequent)
that contains a BUNDLE group, and when an offerer sends a subsequent offer that contains a BUNDLE group, ICE-related media-level
attributes are only included in the tagged "m=" section (suggested offerer-tagged "m=" section or answerer-tagged "m=" section), and
the ICE properties are applied to each bundled "m=" section within the BUNDLE group.
NOTE: Most ICE-related media-level SDP attributes belong to the TRANSPORT multiplexing category
, and the generic SDP attribute offer/answer
considerations for the TRANSPORT multiplexing category apply to the attributes. However, in the case of
ICE-related attributes, the same considerations also apply to ICE-related media-level attributes that
belong to other multiplexing categories.
NOTE: The following ICE-related media-level SDP attributes are defined in
: 'candidate', 'remote-candidates', 'ice-mismatch',
'ice-ufrag', 'ice-pwd', and 'ice-pacing'.
Initially, before ICE has produced selected candidate pairs that will be used for media, there might
be multiple transports established (if multiple candidate pairs are tested). Once ICE has selected
candidate pairs, they form the BUNDLE transport.
Support and usage of the ICE mechanism together with the BUNDLE extension
is OPTIONAL, and the procedures in this section only apply when the
ICE mechanism is used. Note that applications might mandate usage
of the ICE mechanism even if the BUNDLE extension is not used.
NOTE: If the Trickle ICE mechanism
is used, an offerer and answerer might assign a port value of '9' and an IPv4
address of '0.0.0.0' (or, the IPv6 equivalent '::') to multiple bundled "m=" sections
in the initial BUNDLE offer. The offerer and answerer will follow the normal procedures
for generating the offers and answers, including picking a bundled "m=" section as the
suggested offerer-tagged "m=" section, selecting the tagged "m=" sections, etc. The only
difference is that media cannot be sent until one or more candidates have been provided.
Once a BUNDLE group has been negotiated, trickled candidates associated with a bundled
"m=" section will be applied to all bundled "m=" sections within the BUNDLE group.
DTLS Considerations
One or more media streams within a BUNDLE group might use
the Datagram Transport Layer Security (DTLS) protocol
in order to encrypt the data or negotiate encryption keys
if another encryption mechanism is used to encrypt media.
When DTLS is used within a BUNDLE group, the following rules
apply:
-
There can only be one DTLS association
associated with the BUNDLE group;
-
Each usage of the DTLS association within the BUNDLE
group MUST use the same mechanism for determining
which endpoints (the offerer or answerer) become
DTLS client and DTLS server;
-
Each usage of the DTLS association within the BUNDLE
group MUST use the same mechanism for determining
whether an offer or answer will trigger the
establishment of a new DTLS association or
an existing DTLS association will be used; and
-
If the DTLS client supports DTLS-SRTP,
it MUST include the 'use_srtp' extension
in the DTLS ClientHello message
.
The client MUST include the extension even if the usage
of DTLS-SRTP is not negotiated as part of the
multimedia session (e.g., the SIP session ).
NOTE: The inclusion of the 'use_srtp' extension during the initial
DTLS handshake ensures that a DTLS renegotiation will not be required
in order to include the extension, in case DTLS-SRTP encrypted media
is added to the BUNDLE group later during the multimedia session.
RTP Header Extensions Consideration
When RTP header extensions are used in the context of this
specification, the identifier used for a given extension MUST identify the same
extension across all the bundled media descriptions.
Update to RFC 3264
This section updates RFC 3264, in order to allow extensions to define the usage of
a zero port value in offers and answers for purposes other than removing or disabling
media streams. The following sections are being updated:
- "Unicast Streams"; see
- "Putting a Unicast Media Stream on Hold"; see .
Original Text from RFC 3264, Section 5.1, 2nd Paragraph
For recvonly and sendrecv streams, the port number and address in the
offer indicate where the offerer would like to receive the media
stream. For sendonly RTP streams, the address and port number
indirectly indicate where the offerer wants to receive RTCP reports.
Unless there is an explicit indication otherwise, reports are sent to
the port number one higher than the number indicated. The IP address
and port present in the offer indicate nothing about the source IP
address and source port of RTP and RTCP packets that will be sent by
the offerer. A port number of zero in the offer indicates that the
stream is offered but MUST NOT be used. This has no useful semantics
in an initial offer, but is allowed for reasons of completeness,
since the answer can contain a zero port indicating a rejected stream
(Section 6). Furthermore, existing streams can be terminated by
setting the port to zero (Section 8). In general, a port number of
zero indicates that the media stream is not wanted.
New Text Replacing RFC 3264, Section 5.1, 2nd Paragraph
For recvonly and sendrecv streams, the port number and address in the
offer indicate where the offerer would like to receive the media
stream. For sendonly RTP streams, the address and port number
indirectly indicate where the offerer wants to receive RTCP reports.
Unless there is an explicit indication otherwise, reports are sent to
the port number one higher than the number indicated. The IP address
and port present in the offer indicate nothing about the source IP
address and source port of the RTP and RTCP packets that will be sent by
the offerer. By default, a port number of zero in the offer indicates that the
stream is offered but MUST NOT be used, but an extension mechanism
might specify different semantics for the usage of a zero port value.
Furthermore, existing streams can be terminated by setting the port to
zero (Section 8). In general, a port number of zero by default indicates
that the media stream is not wanted.
Original Text from RFC 3264, Section 8.4, 6th Paragraph
RFC 2543 [10] specified that placing a user on hold was accomplished
by setting the connection address to 0.0.0.0. Its usage for putting
a call on hold is no longer recommended, since it doesn't allow for
RTCP to be used with held streams, doesn't work with IPv6, and breaks
with connection oriented media. However, it can be useful in an
initial offer when the offerer knows it wants to use a particular set
of media streams and formats, but doesn't know the addresses and
ports at the time of the offer. Of course, when used, the port
number MUST NOT be zero, which would specify that the stream has been
disabled. An agent MUST be capable of receiving SDP with a
connection address of 0.0.0.0, in which case it means that neither
RTP nor RTCP should be sent to the peer.
New Text Replacing RFC 3264, Section 8.4, 6th Paragraph
RFC 2543 specifies that placing a user on hold was accomplished
by setting the connection address to 0.0.0.0. Its usage for putting
a call on hold is no longer recommended, since it doesn't allow for
RTCP to be used with held streams, doesn't work with IPv6, and breaks
with connection oriented media. However, it can be useful in an
initial offer when the offerer knows it wants to use a particular set
of media streams and formats, but doesn't know the addresses and
ports at the time of the offer. Of course, when used, the port
number MUST NOT be zero, if it would specify that the stream has been
disabled. However, an extension mechanism might specify different
semantics of the zero port number usage. An agent MUST be capable
of receiving SDP with a connection address of 0.0.0.0, in which case it
means that neither RTP nor RTCP is to be sent to the peer.
Update to RFC 5888
This section updates RFC 5888 ,
in order for extensions to allow an SDP 'group' attribute containing
an identification-tag that identifies an "m=" section with the port set to zero.
"Group Value in Answers" ()
is updated.
Original Text from RFC 5888, Section 9.2, 3rd Paragraph
SIP entities refuse media streams by setting the port to zero in the corresponding
"m" line. "a=group" lines MUST NOT contain identification-tags that correspond to
"m" lines with the port set to zero.
New Text Replacing RFC 5888, Section 9.2, 3rd Paragraph
SIP entities refuse media streams by setting the port to zero in the corresponding
"m" line. "a=group" lines MUST NOT contain identification-tags that correspond to
"m" lines with the port set to zero, but an extension mechanism might specify different
semantics for including identification-tags that correspond to such "m=" lines.
RTP/RTCP Extensions for identification-tag Transport
Offerers and answerers
can associate identification-tags with "m=" sections within offers
and answers, using the procedures in . Each identification-tag uniquely represents an "m=" section.
This section defines a new RTCP SDES item , 'MID', which is used to carry identification-tags within RTCP
SDES packets. This section also defines a new RTP SDES header extension
, which
is used to carry the 'MID' RTCP SDES item in RTP packets.
The SDES item and RTP SDES header extension make it possible for a receiver to associate
each RTP stream with a specific "m=" section, with which the receiver has
associated an identification-tag, even if those "m=" sections are part of the same RTP session.
The RTP SDES header extension also ensures that the media recipient gets the identification-tag
upon receipt of the first decodable media and is able to associate the media with the
correct application.
A media recipient informs the media sender about the identification-tag
associated with an "m=" section through the use of a 'mid' attribute
. The media sender then
inserts the identification-tag in RTCP and RTP packets sent to the media recipient.
NOTE: The text above defines how identification-tags are carried in offers
and answers. The usage of other signaling protocols for carrying identification-tags
is not prevented, but the usage of such protocols is outside the scope of this document.
defines general procedures
regarding the RTCP transmission interval. The RTCP MID SDES item SHOULD be sent in
the first few RTCP packets after joining the session and SHOULD be sent regularly
thereafter. The exact number of RTCP packets in which this SDES item is sent is
intentionally not specified here, as it will depend on the expected packet-loss
rate, the RTCP reporting interval, and the allowable overhead.
The RTP SDES header extension for carrying the 'MID' RTCP SDES SHOULD be included
in some RTP packets at the start of the session and whenever the SSRC changes. It might
also be useful to include the header extension in RTP packets that comprise access points in the media
(e.g., with video I-frames). The exact number of RTP packets in which this header
extension is sent is intentionally not specified here, as it will depend on expected
packet-loss rate and loss patterns, the overhead the application can tolerate, and
the importance of immediate receipt of the identification-tag.
For robustness, endpoints need to be prepared for situations where the
reception of the identification-tag is delayed and SHOULD NOT terminate sessions
in such cases, as the identification-tag is likely to arrive soon.
RTCP MID SDES Item
0 1 2 3
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| MID=15 | length | identification-tag ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The identification-tag payload is UTF-8 encoded , as in SDP.
The identification-tag is not zero terminated.
RTP SDES Header Extension For MID
The payload, containing the identification-tag, of the RTP SDES header extension element
can be encoded using either the 1-byte or the 2-byte header . The identification-tag payload is UTF-8
encoded, as in SDP.
The identification-tag is not zero terminated. Note that the set of header extensions
included in the packet needs to be padded to the next 32-bit boundary using zero
bytes .
As the identification-tag is included in an RTCP SDES item, an RTP SDES header
extension, or both, there needs to be some consideration about the packet expansion
caused by the identification-tag. To avoid Maximum Transmission Unit (MTU) issues
for the RTP packets, the header extension's size needs to be taken into account when
encoding the media.
It is recommended that the identification-tag be kept short. Due to the properties of
the RTP header extension mechanism, when using the 1-byte header, a tag that is 1-3 bytes
will result in a minimal number of 32-bit words used for the RTP SDES header extension,
in case no other header extensions are included at the same time. Note, do take into
account that some single characters when UTF-8 encoded will result in multiple octets.
The identification-tag MUST NOT contain any user information, and applications SHALL avoid
generating the identification-tag using a pattern that enables user or application
identification.
IANA Considerations
New SDES Item
This document adds the MID SDES item to the IANA "RTP SDES Item
Types" registry as follows:
-
- Value:
- 15
- Abbrev.:
- MID
- Name:
- Media Identification
- Reference:
- RFC XXXX
New RTP SDES Header Extension URI
This document defines a new extension URI in the RTP SDES Compact Header Extensions
sub-registry of the RTP Compact Header Extensions registry sub-registry, according
to the following data:
-
- Extension URI:
- urn:ietf:params:rtp-hdrext:sdes:mid
- Description:
- Media identification
- Contact:
- IESG (iesg@ietf.org)
- Reference:
- RFC XXXX
The SDES item does not reveal privacy information about the users.
It is simply used to associate RTP-based media with the correct SDP
media description ("m=" section) in the SDP used to negotiate the
media.
The purpose of the extension is for the offerer to be able to
associate received multiplexed RTP-based media before the offerer
receives the associated answer.
New SDP Attribute
This document defines a new SDP media-level attribute,
'bundle-only', according to the following data:
-
- Attribute name:
- bundle-only
- Type of attribute:
- media
- Subject to charset:
- No
- Purpose:
- Request a media description to be accepted
in the answer only if kept within a BUNDLE
group by the answerer.
- Appropriate values:
- N/A
- Contact name:
- IESG
- Contact e-mail:
- iesg@ietf.org
- Reference:
- RFC XXXX
- Mux category:
- NORMAL
New SDP Group Semantics
This document registers the following semantics with IANA in the
"Semantics for the 'group' SDP Attribute" subregistry (under the
"Session Description Protocol (SDP) Parameters" registry):
Semantics |
Token |
Mux Category |
Reference |
Media bundling |
BUNDLE |
NORMAL |
RFC XXXX |
Security Considerations
The security considerations defined in and apply to the BUNDLE extension. BUNDLE
does not change which information, e.g., RTP streams, flows over
the network, with the exception of the usage of the MID SDES item as
discussed below.
Primarily, it changes which addresses and ports, and
thus in which (RTP) sessions, the information flows to. This
affects the security contexts being used and can cause previously
separated information flows to share the same security context. This has very
little impact on the performance of the security mechanism of the RTP
sessions. In cases where one would have applied different security
policies on the different RTP streams being bundled, or where the
parties having access to the security contexts would have differed
between the RTP streams, additional analysis of the implications are
needed before selecting to apply BUNDLE.
The identification-tag, independent of transport, RTCP SDES packet, or
RTP header extension, can expose the value to parties beyond the
signaling chain. Therefore, the identification-tag values MUST be
generated in a fashion that does not leak user information, e.g.,
randomly or using a per-bundle group counter, and SHOULD be 3 bytes or
less to allow them to efficiently fit into the MID RTP header
extension. Note that if implementations use different methods for
generating identification-tags, this could enable fingerprinting of the
implementation making it vulnerable to targeted attacks. The
identification-tag is exposed on the RTP stream level when included in
the RTP header extensions; however, what it reveals of the RTP media
stream structure of the endpoint and application was already possible to
deduce from the RTP streams without the MID SDES header extensions. As
the identification-tag is also used to route the media stream to the
right application functionality, it is important that the value
received is the one intended by the sender; thus, integrity and the
authenticity of the source are important to prevent denial of service on
the application. Existing SRTP configurations and other security
mechanisms protecting the whole RTP/RTCP packets will provide the
necessary protection.
When the BUNDLE extension is used, the set of configurations of the
security mechanism used in all the bundled media descriptions will need to
be compatible so that they can be used simultaneously, at least
per direction or endpoint. When using SRTP, this will be the case, at least
for the IETF-defined key-management solutions due to their SDP attributes
("a=crypto", "a=fingerprint", "a=mikey") and their classification in .
The security considerations of "RTP Header
Extension for the RTP Control Protocol (RTCP) Source Description Items"
require that when RTCP is confidentiality protected, any SDES
RTP header extension carrying an SDES item, such as the MID RTP header
extension, is also protected using commensurate strength algorithms.
However, assuming the above requirements and recommendations are
followed, there are no known significant security risks with leaving the
MID RTP header extension without confidentiality protection.
Therefore, this specification updates RFC 7941 by adding the exception that this requirement
MAY be ignored for the MID RTP header extension. Security mechanisms for RTP/RTCP are
discussed in "Options for Securing RTP Sessions" ,
for example, SRTP can provide the necessary security
functions of ensuring the integrity and source authenticity.
Examples
Example: Tagged "m=" Section Selections
The example below shows:
- An initial BUNDLE offer, in which the offerer wants to
negotiate a BUNDLE group and indicates the audio "m="
section as the suggested offerer-tagged "m=" section.
- An initial BUNDLE answer, in which the answerer accepts
the creation of the BUNDLE group, selects the audio "m="
section in the offer as the offerer-tagged "m=" section,
selects the audio "m=" section in the answer as the
answerer-tagged "m=" section, and assigns the answerer BUNDLE
address:port to that "m=" section.
SDP Offer (1)
v=0
o=alice 2890844526 2890844526 IN IP6 2001:db8::3
s=
c=IN IP6 2001:db8::3
t=0 0
a=group:BUNDLE foo bar
m=audio 10000 RTP/AVP 0 8 97
b=AS:200
a=mid:foo
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:97 iLBC/8000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 10002 RTP/AVP 31 32
b=AS:1000
a=mid:bar
a=rtcp-mux
a=rtpmap:31 H261/90000
a=rtpmap:32 MPV/90000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
SDP Answer (2)
v=0
o=bob 2808844564 2808844564 IN IP6 2001:db8::1
s=
c=IN IP6 2001:db8::1
t=0 0
a=group:BUNDLE foo bar
m=audio 20000 RTP/AVP 0
b=AS:200
a=mid:foo
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 20000 RTP/AVP 32
b=AS:1000
a=mid:bar
a=rtpmap:32 MPV/90000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
Example: BUNDLE Group Rejected
The example below shows:
- An initial BUNDLE offer, in which the offerer wants to
negotiate a BUNDLE group and indicates the audio "m=" section
as the suggested offerer-tagged "m=" section.
- An initial BUNDLE answer, in which the answerer rejects
the creation of the BUNDLE group, generates a normal answer,
and assigns a unique address:port to each "m=" section in
the answer.
SDP Offer (1)
v=0
o=alice 2890844526 2890844526 IN IP6 2001:db8::3
s=
c=IN IP6 2001:db8::3
t=0 0
a=group:BUNDLE foo bar
m=audio 10000 RTP/AVP 0 8 97
b=AS:200
a=mid:foo
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:97 iLBC/8000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 10002 RTP/AVP 31 32
b=AS:1000
a=mid:bar
a=rtcp-mux
a=rtpmap:31 H261/90000
a=rtpmap:32 MPV/90000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
SDP Answer (2)
v=0
o=bob 2808844564 2808844564 IN IP6 2001:db8::1
s=
c=IN IP6 2001:db8::1
t=0 0
m=audio 20000 RTP/AVP 0
b=AS:200
a=rtcp-mux
a=rtpmap:0 PCMU/8000
m=video 30000 RTP/AVP 32
b=AS:1000
a=rtcp-mux
a=rtpmap:32 MPV/90000
Example: Offerer Adds a Media Description to a BUNDLE Group
The example below shows:
- A subsequent offer, in which the offerer adds a new bundled "m=" section (video), indicated by the "zen"
identification-tag, to a previously negotiated BUNDLE group; indicates the new "m=" section as the
offerer-tagged "m=" section; and assigns the offerer BUNDLE address:port to that "m=" section.
- A subsequent answer, in which the answerer indicates the new video "m=" section in the answer as the answerer-tagged "m=" section
and assigns the answerer BUNDLE address:port to that "m=" section.
SDP Offer (1)
v=0
o=alice 2890844526 2890844526 IN IP6 2001:db8::3
s=
c=IN IP6 2001:db8::3
t=0 0
a=group:BUNDLE zen foo bar
m=audio 10000 RTP/AVP 0 8 97
b=AS:200
a=mid:foo
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:97 iLBC/8000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 10000 RTP/AVP 31 32
b=AS:1000
a=mid:bar
a=rtpmap:31 H261/90000
a=rtpmap:32 MPV/90000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 10000 RTP/AVP 66
b=AS:1000
a=mid:zen
a=rtcp-mux
a=rtpmap:66 H261/90000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
SDP Answer (2)
v=0
o=bob 2808844564 2808844564 IN IP6 2001:db8::1
s=
c=IN IP6 2001:db8::1
t=0 0
a=group:BUNDLE zen foo bar
m=audio 20000 RTP/AVP 0
b=AS:200
a=mid:foo
a=rtpmap:0 PCMU/8000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 20000 RTP/AVP 32
b=AS:1000
a=mid:bar
a=rtpmap:32 MPV/90000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 20000 RTP/AVP 66
b=AS:1000
a=mid:zen
a=rtcp-mux
a=rtpmap:66 H261/90000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
Example: Offerer Moves a Media Description Out of a BUNDLE Group
The example below shows:
- A subsequent offer, in which the offerer removes an "m=" section (video), indicated by the "zen"
identification-tag, from a previously negotiated BUNDLE group; indicates one of the bundled "m=" sections (audio)
remaining in the BUNDLE group as the offerer-tagged "m=" section; and assigns the offerer BUNDLE address:port to that "m=" section.
- A subsequent answer, in which the answerer removes the "m=" section from the BUNDLE group, indicates the audio "m=" section
in the answer as the answerer-tagged "m=" section, and assigns the answerer BUNDLE address:port to that "m=" section.
SDP Offer (1)
v=0
o=alice 2890844526 2890844526 IN IP6 2001:db8::3
s=
c=IN IP6 2001:db8::3
t=0 0
a=group:BUNDLE foo bar
m=audio 10000 RTP/AVP 0 8 97
b=AS:200
a=mid:foo
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:97 iLBC/8000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 10000 RTP/AVP 31 32
b=AS:1000
a=mid:bar
a=rtpmap:31 H261/90000
a=rtpmap:32 MPV/90000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 50000 RTP/AVP 66
b=AS:1000
a=mid:zen
a=rtcp-mux
a=rtpmap:66 H261/90000
SDP Answer (2)
v=0
o=bob 2808844564 2808844564 IN IP6 2001:db8::1
s=
c=IN IP6 2001:db8::1
t=0 0
a=group:BUNDLE foo bar
m=audio 20000 RTP/AVP 0
b=AS:200
a=mid:foo
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 20000 RTP/AVP 32
b=AS:1000
a=mid:bar
a=rtpmap:32 MPV/90000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 60000 RTP/AVP 66
b=AS:1000
a=mid:zen
a=rtcp-mux
a=rtpmap:66 H261/90000
Example: Offerer Disables a Media Description within a BUNDLE Group
The example below shows:
- A subsequent offer, in which the offerer disables (by assigning a zero port value) an "m=" section (video), indicated by the "zen"
identification-tag, from a previously negotiated BUNDLE group; indicates one of the bundled "m=" sections (audio)
remaining active in the BUNDLE group as the offerer-tagged "m=" section; and assigns the offerer BUNDLE address:port to that "m=" section.
- A subsequent answer, in which the answerer disables the "m=" section, indicates the audio "m=" section
in the answer as the answerer-tagged "m=" section, and assigns the answerer BUNDLE address:port to that "m=" section.
SDP Offer (1)
v=0
o=alice 2890844526 2890844526 IN IP6 2001:db8::3
s=
t=0 0
a=group:BUNDLE foo bar
m=audio 10000 RTP/AVP 0 8 97
c=IN IP6 2001:db8::3
b=AS:200
a=mid:foo
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:97 iLBC/8000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 10000 RTP/AVP 31 32
c=IN IP6 2001:db8::3
b=AS:1000
a=mid:bar
a=rtpmap:31 H261/90000
a=rtpmap:32 MPV/90000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 0 RTP/AVP 66
a=mid:zen
a=rtpmap:66 H261/90000
SDP Answer (2)
v=0
o=bob 2808844564 2808844564 IN IP6 2001:db8::1
s=
t=0 0
a=group:BUNDLE foo bar
m=audio 20000 RTP/AVP 0
c=IN IP6 2001:db8::1
b=AS:200
a=mid:foo
a=rtcp-mux
a=rtpmap:0 PCMU/8000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 20000 RTP/AVP 32
c=IN IP6 2001:db8::1
b=AS:1000
a=mid:bar
a=rtpmap:32 MPV/90000
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
m=video 0 RTP/AVP 66
a=mid:zen
a=rtpmap:66 H261/90000
References
Normative References
Key words for use in RFCs to Indicate Requirement Levels
In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.
An Offer/Answer Model with Session Description Protocol (SDP)
This document defines a mechanism by which two entities can make use of the Session Description Protocol (SDP) to arrive at a common view of a multimedia session between them. In the model, one participant offers the other a description of the desired session from their perspective, and the other participant answers with the desired session from their perspective. This offer/answer model is most useful in unicast sessions where information from both participants is needed for the complete view of the session. The offer/answer model is used by protocols like the Session Initiation Protocol (SIP). [STANDARDS-TRACK]
RTP: A Transport Protocol for Real-Time Applications
This memorandum describes RTP, the real-time transport protocol. RTP provides end-to-end network transport functions suitable for applications transmitting real-time data, such as audio, video or simulation data, over multicast or unicast network services. RTP does not address resource reservation and does not guarantee quality-of- service for real-time services. The data transport is augmented by a control protocol (RTCP) to allow monitoring of the data delivery in a manner scalable to large multicast networks, and to provide minimal control and identification functionality. RTP and RTCP are designed to be independent of the underlying transport and network layers. The protocol supports the use of RTP-level translators and mixers. Most of the text in this memorandum is identical to RFC 1889 which it obsoletes. There are no changes in the packet formats on the wire, only changes to the rules and algorithms governing how the protocol is used. The biggest change is an enhancement to the scalable timer algorithm for calculating when to send RTCP packets in order to minimize transmission in excess of the intended rate when many participants join a session simultaneously. [STANDARDS-TRACK]
Real Time Control Protocol (RTCP) attribute in Session Description Protocol (SDP)
The Session Description Protocol (SDP) is used to describe the parameters of media streams used in multimedia sessions. When a session requires multiple ports, SDP assumes that these ports have consecutive numbers. However, when the session crosses a network address translation device that also uses port mapping, the ordering of ports can be destroyed by the translation. To handle this, we propose an extension attribute to SDP.
UTF-8, a transformation format of ISO 10646
ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.
The Secure Real-time Transport Protocol (SRTP)
This document describes the Secure Real-time Transport Protocol (SRTP), a profile of the Real-time Transport Protocol (RTP), which can provide confidentiality, message authentication, and replay protection to the RTP traffic and to the control traffic for RTP, the Real-time Transport Control Protocol (RTCP). [STANDARDS-TRACK]
SDP: Session Description Protocol
This memo defines the Session Description Protocol (SDP). SDP is intended for describing multimedia sessions for the purposes of session announcement, session invitation, and other forms of multimedia session initiation. [STANDARDS-TRACK]
Symmetric RTP / RTP Control Protocol (RTCP)
This document recommends using one UDP port pair for both communication directions of bidirectional RTP and RTP Control Protocol (RTCP) sessions, commonly called "symmetric RTP" and "symmetric RTCP". This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.
Multiplexing RTP Data and Control Packets on a Single Port
This memo discusses issues that arise when multiplexing RTP data packets and RTP Control Protocol (RTCP) packets on a single UDP port. It updates RFC 3550 and RFC 3551 to describe when such multiplexing is and is not appropriate, and it explains how the Session Description Protocol (SDP) can be used to signal multiplexed sessions. [STANDARDS-TRACK]
Datagram Transport Layer Security (DTLS) Extension to Establish Keys for the Secure Real-time Transport Protocol (SRTP)
This document describes a Datagram Transport Layer Security (DTLS) extension to establish keys for Secure RTP (SRTP) and Secure RTP Control Protocol (SRTCP) flows. DTLS keying happens on the media path, independent of any out-of-band signalling channel present. [STANDARDS-TRACK]
The Session Description Protocol (SDP) Grouping Framework
In this specification, we define a framework to group "m" lines in the Session Description Protocol (SDP) for different purposes. This framework uses the "group" and "mid" SDP attributes, both of which are defined in this specification. Additionally, we specify how to use the framework for two different purposes: for lip synchronization and for receiving a media flow consisting of several media streams on different transport addresses. This document obsoletes RFC 3388. [STANDARDS-TRACK]
Datagram Transport Layer Security Version 1.2
This document specifies version 1.2 of the Datagram Transport Layer Security (DTLS) protocol. The DTLS protocol provides communications privacy for datagram protocols. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees. Datagram semantics of the underlying transport are preserved by the DTLS protocol. This document updates DTLS 1.0 to work with TLS version 1.2. [STANDARDS-TRACK]
RTP Header Extension for the RTP Control Protocol (RTCP) Source Description Items
Source Description (SDES) items are normally transported in the RTP Control Protocol (RTCP). In some cases, it can be beneficial to speed up the delivery of these items. The main case is when a new synchronization source (SSRC) joins an RTP session and the receivers need this source's identity, relation to other sources, or its synchronization context, all of which may be fully or partially identified using SDES items. To enable this optimization, this document specifies a new RTP header extension that can carry SDES items.
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words
RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.
A General Mechanism for RTP Header Extensions
This document provides a general mechanism to use the header extension feature of RTP (the Real-time Transport Protocol). It provides the option to use a small number of small extensions in each RTP packet, where the universe of possible extensions is large and registration is decentralized. The actual extensions in use in a session are signaled in the setup information for that session. This document obsoletes RFC 5285.
Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal
This document describes a protocol for Network Address Translator (NAT) traversal for UDP-based communication. This protocol is called Interactive Connectivity Establishment (ICE). ICE makes use of the Session Traversal Utilities for NAT (STUN) protocol and its extension, Traversal Using Relay NAT (TURN).
This document obsoletes RFC 5245.
Session Description Protocol (SDP) Offer/Answer Procedures for Interactive Connectivity Establishment (ICE)
A Session Initiation Protocol (SIP) Usage for Incremental Provisioning of Candidates for the Interactive Connectivity Establishment (Trickle ICE)
Indicating Exclusive Support of RTP and RTP Control Protocol (RTCP) Multiplexing Using the Session Description Protocol (SDP)
A Framework for Session Description Protocol (SDP) Attributes When Multiplexing
Informative References
The Layer Refresh Request (LRR) RTCP Feedback Message
This memo describes the RTCP Payload-Specific Feedback Message "Layer Refresh Request" (LRR), which can be used to request a state refresh of one or more substreams of a layered media stream. It also defines its use with several RTP payloads for scalable media formats.
Work in Progress
SIP: Session Initiation Protocol
The Session Initiation Protocol (SIP) is an application-layer control (signaling) protocol for creating, modifying and terminating sessions with one or more participants. [STANDARDS-TRACK]
SIP: Session Initiation Protocol
This document describes Session Initiation Protocol (SIP), an application-layer control (signaling) protocol for creating, modifying, and terminating sessions with one or more participants. These sessions include Internet telephone calls, multimedia distribution, and multimedia conferences. [STANDARDS-TRACK]
RTP Control Protocol Extended Reports (RTCP XR)
This document defines the Extended Report (XR) packet type for the RTP Control Protocol (RTCP), and defines how the use of XR packets can be signaled by an application if it employs the Session Description Protocol (SDP). XR packets are composed of report blocks, and seven block types are defined here. The purpose of the extended reporting format is to convey information that supplements the six statistics that are contained in the report blocks used by RTCP's Sender Report (SR) and Receiver Report (RR) packets. Some applications, such as multicast inference of network characteristics (MINC) or voice over IP (VoIP) monitoring, require other and more detailed statistics. In addition to the block types defined here, additional block types may be defined in the future by adhering to the framework that this document provides.
Extended RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback (RTP/AVPF)
Real-time media streams that use RTP are, to some degree, resilient against packet losses. Receivers may use the base mechanisms of the Real-time Transport Control Protocol (RTCP) to report packet reception statistics and thus allow a sender to adapt its transmission behavior in the mid-term. This is the sole means for feedback and feedback-based error repair (besides a few codec-specific mechanisms). This document defines an extension to the Audio-visual Profile (AVP) that enables receivers to provide, statistically, more immediate feedback to the senders and thus allows for short-term adaptation and efficient feedback-based repair mechanisms to be implemented. This early feedback profile (AVPF) maintains the AVP bandwidth constraints for RTCP and preserves scalability to large groups. [STANDARDS-TRACK]
Codec Control Messages in the RTP Audio-Visual Profile with Feedback (AVPF)
This document specifies a few extensions to the messages defined in the Audio-Visual Profile with Feedback (AVPF). They are helpful primarily in conversational multimedia scenarios where centralized multipoint functionalities are in use. However, some are also usable in smaller multicast environments and point-to-point calls.
The extensions discussed are messages related to the ITU-T Rec. H.271 Video Back Channel, Full Intra Request, Temporary Maximum Media Stream Bit Rate, and Temporal-Spatial Trade-off. [STANDARDS-TRACK]
Source-Specific Media Attributes in the Session Description Protocol (SDP)
The Session Description Protocol (SDP) 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, which are identified by their synchronization source (SSRC) identifiers, in SDP, to associate attributes with these sources, and to express relationships among sources. It also defines several source-level attributes that can be used to describe properties of media sources. [STANDARDS-TRACK]
Support for Multiple Clock Rates in an RTP Session
This document clarifies the RTP specification regarding the use of different clock rates in an RTP session. It also provides guidance on how legacy RTP implementations that use multiple clock rates can interoperate with RTP implementations that use the algorithm described in this document. It updates RFC 3550.
Options for Securing RTP Sessions
The Real-time Transport Protocol (RTP) is used in a large number of different application domains and environments. This heterogeneity implies that different security mechanisms are needed to provide services such as confidentiality, integrity, and source authentication of RTP and RTP Control Protocol (RTCP) packets suitable for the various environments. The range of solutions makes it difficult for RTP-based application developers to pick the most suitable mechanism. This document provides an overview of a number of security solutions for RTP and gives guidance for developers on how to choose the appropriate security mechanism.
A Taxonomy of Semantics and Mechanisms for Real-Time Transport Protocol (RTP) Sources
The terminology about, and associations among, Real-time Transport Protocol (RTP) sources can be complex and somewhat opaque. This document describes a number of existing and proposed properties and relationships among RTP sources and defines common terminology for discussing protocol entities and their relationships.
Differentiated Services (Diffserv) and Real-Time Communication
This memo describes the interaction between Differentiated Services (Diffserv) network quality-of-service (QoS) functionality and real- time network communication, including communication based on the Real-time Transport Protocol (RTP). Diffserv is based on network nodes applying different forwarding treatments to packets whose IP headers are marked with different Diffserv Codepoints (DSCPs). WebRTC applications, as well as some conferencing applications, have begun using the Session Description Protocol (SDP) bundle negotiation mechanism to send multiple traffic streams with different QoS requirements using the same network 5-tuple. The results of using multiple DSCPs to obtain different QoS treatments within a single network 5-tuple have transport protocol interactions, particularly with congestion control functionality (e.g., reordering). In addition, DSCP markings may be changed or removed between the traffic source and destination. This memo covers the implications of these Diffserv aspects for real-time network communication, including WebRTC.
JavaScript Session Establishment Protocol (JSEP)
Trickle ICE: Incremental Provisioning of Candidates for the Interactive Connectivity Establishment (ICE) Protocol
Design Considerations
One of the main issues regarding the BUNDLE grouping extensions has been whether,
in offers and answers, the same port value can be inserted in "m="
lines associated with a BUNDLE group, as the purpose of the extension is to negotiate
the usage of a single transport for media specified by the "m=" sections. Issues
with both approaches, discussed in the Appendix, have been raised. The outcome was to
specify a mechanism that uses offers with both different and identical port values.
Below are the primary issues that have been considered when defining the "BUNDLE"
grouping extension:
- Interoperability with existing User Agents (UAs).
- Interoperability with intermediary Back-to-Back User Agent (B2BUA) and proxy entities.
- Time to gather, and the number of, ICE candidates.
- Different error scenarios and when they occur.
- SDP offer/answer impacts, including usage of port number value zero.
UA Interoperability
Consider the following SDP offer/answer exchange, where Alice sends an offer to Bob:
SDP Offer
v=0
o=alice 2890844526 2890844526 IN IP4 atlanta.example.com
s=
c=IN IP4 atlanta.example.com
t=0 0
m=audio 10000 RTP/AVP 97
a=rtpmap:97 iLBC/8000
m=video 10002 RTP/AVP 97
a=rtpmap:97 H261/90000
SDP Answer
v=0
o=bob 2808844564 2808844564 IN IP4 biloxi.example.com
s=
c=IN IP4 biloxi.example.com
t=0 0
m=audio 20000 RTP/AVP 97
a=rtpmap:97 iLBC/8000
m=video 20002 RTP/AVP 97
a=rtpmap:97 H261/90000
RFC 4961 specifies a way of doing symmetric RTP, but that is a later
extension to RTP, and Bob cannot assume that Alice supports RFC 4961. This
means that Alice may be sending RTP from a different port than 10000 or
10002 -- some implementations simply send the RTP from an ephemeral
port. When Bob's endpoint receives an RTP packet, the only way that Bob
knows if the packet is to be passed to the video or audio codec is by looking at
the port it was received on.
This prompted some SDP implementations to use a port number as an index to find the
correct "m=" line in the SDP, since each "m"= section contains a different port number. As a result, some
implementations that do support symmetric RTP and ICE still use an SDP data
structure where SDP with "m=" sections with the same port such as:
SDP Offer
v=0
o=alice 2890844526 2890844526 IN IP4 atlanta.example.com
s=
c=IN IP4 atlanta.example.com
t=0 0
m=audio 10000 RTP/AVP 97
a=rtpmap:97 iLBC/8000
m=video 10000 RTP/AVP 98
a=rtpmap:98 H261/90000
will result in the second "m=" section being considered an SDP error
because it has the same port as the first line.
Usage of Port Number Value Zero
In an offer or answer, the media specified by an "m=" section can be
disabled/rejected by setting the port number value to zero. This is different
from, e.g., using the SDP direction attributes, where RTCP traffic will
continue even if the SDP 'inactive' attribute is indicated for the
associated "m=" section.
If each "m=" section associated with a BUNDLE group would contain different
port values, and one of those port values would be used for a BUNDLE address:port
associated with the BUNDLE group, problems would occur if an endpoint wants to
disable/reject the "m=" section associated with that port, by setting the port
value to zero. After that, no "m=" section would contain the port value that
is used for the BUNDLE address:port. In addition, it is unclear what would happen
to the ICE candidates associated with the "m=" section, as they are also used for
the BUNDLE address:port.
B2BUA and Proxy Interoperability
Some back-to-back user agents may be configured in a mode where if
the incoming call leg contains an SDP attribute the B2BUA does not
understand, the B2BUA still generates that SDP attribute in the Offer
for the outgoing call leg. Consider a B2BUA that did not understand
the SDP 'rtcp' attribute, defined in RFC 3605, yet acted this way.
Further assume that the B2BUA was configured to tear down any call
where it did not see any RTCP for 5 minutes. In this case, if the B2BUA
received an Offer like:
SDP Offer
v=0
o=alice 2890844526 2890844526 IN IP4 atlanta.example.com
s=
c=IN IP4 atlanta.example.com
t=0 0
m=audio 49170 RTP/AVP 0
a=rtcp:53020
It would be looking for RTCP on port 49171 but would not see any
because the RTCP would be on port 53020, and after five minutes, it would
tear down the call. Similarly, a B2BUA that did not understand BUNDLE yet
put it in its offer may be looking for media on the wrong port and
tear down the call. It is worth noting that a B2BUA that generated an
Offer with capabilities it does not understand is not compliant with the
specifications.
Traffic Policing
Sometimes intermediaries do not act as B2BUAs, in the sense that
they don't modify SDP bodies nor do they terminate SIP dialogs.
However, they may still use SDP information (e.g., IP address and
port) in order to control traffic gating functions and to set
traffic policing rules. There might be rules that will trigger
a session to be terminated in case media is not sent or received
on the ports retrieved from the SDP. This typically occurs once the
session is already established and ongoing.
Bandwidth Allocation
Sometimes, intermediaries do not act as B2BUAs, in the sense that
they don't modify SDP bodies nor do they terminate SIP dialogs.
However, they may still use SDP information (e.g., codecs and
media types) in order to control bandwidth allocation functions.
The bandwidth allocation is done per "m=" section, which means that
it might not be enough if media specified by all "m=" sections
try to use that bandwidth. That may simply lead to either bad
user experience or termination of the call.
Candidate Gathering
When using ICE, a candidate needs to be gathered for each port. This
takes approximately 20 ms extra for each extra "m=" section due to the NAT
pacing requirements. All of this gathering can be overlapped with other
things while, e.g., a web page is loading to minimize the impact. If the client
only wants to generate Traversal Using Relays around NAT (TURN) or STUN ICE candidates for one of the "m="
lines and then use Trickle ICE
to get the non-host ICE candidates for the rest of the "m=" sections, it MAY do
that and will not need any additional gathering time.
Some people have suggested a TURN extension to get a bunch of TURN
allocations at once. This would only provide a single STUN result, so in
cases where the other end did not support BUNDLE, it may cause more use of
the TURN server, but it would be quick in the cases where both sides
supported BUNDLE and would fall back to a successful call in the other
cases.
Acknowledgements
The usage of the SDP grouping extension for negotiating bundled media is
based on similar alternatives proposed by and . The BUNDLE
extension described in this document is based on the different
alternative proposals, and text (e.g., SDP examples) has been borrowed
(and, in some cases, modified) from those alternative proposals.
The SDP examples are also modified versions from the ones in the Alvestrand
proposal.
Thanks to , , , , , , ,
, , , , , , ,
, and for reading the text and providing useful feedback.
Thanks to , , , and for providing the text for the section on
RTP/RTCP stream association.
Thanks to , , and
for providing help and text on the RTP/RTCP procedures.
Thanks to for performing the Sec-Dir review.
Thanks to for performing the Gen-ART review.
Thanks to Spotify for providing music for the countless hours of
document editing.
Authors' Addresses
Ericsson
Hirsalantie 11
02420
Jorvas
Finland
christer.holmberg@ericsson.com
Google
Kungsbron 2
Stockholm
11122
Sweden
harald@alvestrand.no
Cisco
400 3rd Avenue SW, Suite 350
Calgary
AB
T2P 4H2
Canada
fluffy@iii.ca