rfc9143.original | rfc9143.txt | |||
---|---|---|---|---|
MMUSIC Working Group C. Holmberg | Internet Engineering Task Force (IETF) C. Holmberg | |||
Internet-Draft Ericsson | Request for Comments: 9143 Ericsson | |||
Obsoletes: 8843 (if approved) H. Alvestrand | Obsoletes: 8843 H. Alvestrand | |||
Updates: 3264, 5888, 7941 (if approved) Google | Updates: 3264, 5888, 7941 Google | |||
Intended status: Standards Track C. Jennings | Category: Standards Track C. Jennings | |||
Expires: 8 June 2022 Cisco | ISSN: 2070-1721 Cisco | |||
5 December 2021 | February 2022 | |||
Negotiating Media Multiplexing Using the Session Description Protocol | Negotiating Media Multiplexing Using the Session Description Protocol | |||
(SDP) | (SDP) | |||
draft-ietf-mmusic-rfc8843bis-09 | ||||
Abstract | Abstract | |||
This specification defines a new Session Description Protocol (SDP) | This specification defines a new Session Description Protocol (SDP) | |||
Grouping Framework extension called 'BUNDLE'. The extension can be | Grouping Framework extension called 'BUNDLE'. The extension can be | |||
used with the SDP offer/answer mechanism to negotiate the usage of a | used with the SDP offer/answer mechanism to negotiate the usage of a | |||
single transport (5-tuple) for sending and receiving media described | single transport (5-tuple) for sending and receiving media described | |||
by multiple SDP media descriptions ("m=" sections). Such transport | by multiple SDP media descriptions ("m=" sections). Such transport | |||
is referred to as a BUNDLE transport, and the media is referred to as | is referred to as a "BUNDLE transport", and the media is referred to | |||
bundled media. The "m=" sections that use the BUNDLE transport form | as "bundled media". The "m=" sections that use the BUNDLE transport | |||
a BUNDLE group. | form a BUNDLE group. | |||
This specification defines a new RTP Control Protocol (RTCP) Source | This specification defines a new RTP Control Protocol (RTCP) Source | |||
Description (SDES) item and a new RTP header extension. | Description (SDES) item and a new RTP header extension. | |||
This specification updates RFCs 3264, 5888, and 7941. | This specification updates RFCs 3264, 5888, and 7941. | |||
This specification obsoletes RFC 8843. | This specification obsoletes RFC 8843. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 8 June 2022. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9143. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
This document may contain material from IETF Documents or IETF | This document may contain material from IETF Documents or IETF | |||
Contributions published or made publicly available before November | Contributions published or made publicly available before November | |||
10, 2008. The person(s) controlling the copyright in some of this | 10, 2008. The person(s) controlling the copyright in some of this | |||
material may not have granted the IETF Trust the right to allow | material may not have granted the IETF Trust the right to allow | |||
modifications of such material outside the IETF Standards Process. | modifications of such material outside the IETF Standards Process. | |||
Without obtaining an adequate license from the person(s) controlling | Without obtaining an adequate license from the person(s) controlling | |||
the copyright in such materials, this document may not be modified | the copyright in such materials, this document may not be modified | |||
outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
it for publication as an RFC or to translate it into languages other | it for publication as an RFC or to translate it into languages other | |||
than English. | than English. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction | |||
1.1. Background . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Background | |||
1.2. BUNDLE Mechanism . . . . . . . . . . . . . . . . . . . . 4 | 1.2. BUNDLE Mechanism | |||
1.3. Protocol Extensions . . . . . . . . . . . . . . . . . . . 5 | 1.3. Protocol Extensions | |||
1.4. Changes from RFC 8843 . . . . . . . . . . . . . . . . . . 6 | 1.4. Changes from RFC 8843 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2. Terminology | |||
3. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 3. Conventions | |||
4. Applicability Statement . . . . . . . . . . . . . . . . . . . 8 | 4. Applicability Statement | |||
5. SDP Grouping Framework BUNDLE Extension . . . . . . . . . . . 8 | 5. SDP Grouping Framework BUNDLE Extension | |||
6. SDP 'bundle-only' Attribute . . . . . . . . . . . . . . . . . 9 | 6. SDP 'bundle-only' Attribute | |||
7. SDP Offer/Answer Procedures . . . . . . . . . . . . . . . . . 10 | 7. SDP Offer/Answer Procedures | |||
7.1. Generic SDP Considerations . . . . . . . . . . . . . . . 11 | 7.1. Generic SDP Considerations | |||
7.1.1. Connection Data ("c=") . . . . . . . . . . . . . . . 11 | 7.1.1. Connection Data ("c=") | |||
7.1.2. Bandwidth ("b=") . . . . . . . . . . . . . . . . . . 11 | 7.1.2. Bandwidth ("b=") | |||
7.1.3. Attributes ("a=") . . . . . . . . . . . . . . . . . . 11 | 7.1.3. Attributes ("a=") | |||
7.2. Generating the Initial BUNDLE offer . . . . . . . . . . . 12 | 7.2. Generating the Initial BUNDLE Offer | |||
7.2.1. Suggesting the Offerer-Tagged 'm=' Section . . . . . 13 | 7.2.1. Suggesting the Offerer-Tagged "m=" Section | |||
7.2.2. Example: Initial BUNDLE offer . . . . . . . . . . . . 14 | 7.2.2. Example: Initial BUNDLE Offer | |||
7.3. Generating the SDP Answer . . . . . . . . . . . . . . . . 15 | 7.3. Generating the SDP Answer | |||
7.3.1. Answerer Selection of Tagged 'm=' Sections . . . . . 17 | 7.3.1. Answerer Selection of Tagged "m=" Sections | |||
7.3.2. Moving a Media Description Out of a BUNDLE Group . . 17 | 7.3.2. Moving a Media Description Out of a BUNDLE Group | |||
7.3.3. Rejecting a Media Description in a BUNDLE Group . . . 18 | 7.3.3. Rejecting a Media Description in a BUNDLE Group | |||
7.3.4. Example: SDP Answer . . . . . . . . . . . . . . . . . 19 | 7.3.4. Example: SDP Answer | |||
7.3.5. RFC 8843 Considerations . . . . . . . . . . . . . . . 20 | 7.3.5. RFC 8843 Considerations | |||
7.4. Offerer Processing of the SDP Answer . . . . . . . . . . 20 | 7.4. Offerer Processing of the SDP Answer | |||
7.4.1. RFC 8843 Considerations . . . . . . . . . . . . . . . 21 | 7.4.1. RFC 8843 Considerations | |||
7.5. Modifying the Session . . . . . . . . . . . . . . . . . . 22 | 7.5. Modifying the Session | |||
7.5.1. Adding a Media Description to a BUNDLE Group . . . . 22 | 7.5.1. Adding a Media Description to a BUNDLE Group | |||
7.5.2. Moving a Media Description Out of a BUNDLE Group . . 23 | 7.5.2. Moving a Media Description Out of a BUNDLE Group | |||
7.5.3. Disabling a Media Description in a BUNDLE Group . . . 23 | 7.5.3. Disabling a Media Description in a BUNDLE Group | |||
7.6. 3PCC Considerations . . . . . . . . . . . . . . . . . . . 24 | 7.6. 3PCC Considerations | |||
8. Protocol Identification . . . . . . . . . . . . . . . . . . . 24 | 8. Protocol Identification | |||
8.1. STUN, DTLS, and SRTP . . . . . . . . . . . . . . . . . . 25 | 8.1. STUN, DTLS, and SRTP | |||
9. RTP Considerations . . . . . . . . . . . . . . . . . . . . . 25 | 9. RTP Considerations | |||
9.1. Single RTP Session . . . . . . . . . . . . . . . . . . . 25 | 9.1. Single RTP Session | |||
9.1.1. Payload Type (PT) Value Reuse . . . . . . . . . . . . 26 | 9.1.1. Payload Type (PT) Value Reuse | |||
9.2. Associating RTP/RTCP Streams with the Correct SDP Media | 9.2. Associating RTP/RTCP Streams with the Correct SDP Media | |||
Description . . . . . . . . . . . . . . . . . . . . . . . 27 | Description | |||
9.3. RTP/RTCP Multiplexing . . . . . . . . . . . . . . . . . . 33 | 9.3. RTP/RTCP Multiplexing | |||
9.3.1. SDP Offer/Answer Procedures . . . . . . . . . . . . . 33 | 9.3.1. SDP Offer/Answer Procedures | |||
10. ICE Considerations . . . . . . . . . . . . . . . . . . . . . 35 | 10. ICE Considerations | |||
11. DTLS Considerations . . . . . . . . . . . . . . . . . . . . . 36 | 11. DTLS Considerations | |||
12. RTP Header Extensions Consideration . . . . . . . . . . . . . 37 | 12. RTP Header Extensions Consideration | |||
13. Update to RFC 3264 . . . . . . . . . . . . . . . . . . . . . 37 | 13. Updates to RFC 3264 | |||
13.1. Original Text from RFC 3264, Section 5.1, 2nd | 13.1. Original Text from RFC 3264, Section 5.1, Paragraph 2 | |||
Paragraph . . . . . . . . . . . . . . . . . . . . . . . 37 | 13.2. New Text Replacing RFC 3264, Section 5.1, Paragraph 2 | |||
13.2. New Text Replacing RFC 3264, Section 5.1, 2nd | 13.3. Original Text from RFC 3264, Section 8.4, Paragraph 6 | |||
Paragraph . . . . . . . . . . . . . . . . . . . . . . . 38 | 13.4. New Text Replacing RFC 3264, Section 8.4, Paragraph 6 | |||
13.3. Original Text from RFC 3264, Section 8.4, 6th | 14. Update to RFC 5888 | |||
Paragraph . . . . . . . . . . . . . . . . . . . . . . . 38 | 14.1. Original Text from RFC 5888, Section 9.2, Paragraph 3 | |||
13.4. New Text Replacing RFC 3264, Section 8.4, 6th | 14.2. New Text Replacing RFC 5888, Section 9.2, Paragraph 3 | |||
Paragraph . . . . . . . . . . . . . . . . . . . . . . . 38 | 15. RTP/RTCP Extensions for identification-tag Transport | |||
14. Update to RFC 5888 . . . . . . . . . . . . . . . . . . . . . 39 | 15.1. RTCP MID SDES Item | |||
14.1. Original Text from RFC 5888, Section 9.2, 3rd | 15.2. RTP SDES Header Extension for MID | |||
Paragraph . . . . . . . . . . . . . . . . . . . . . . . 39 | 16. IANA Considerations | |||
14.2. New Text Replacing RFC 5888, Section 9.2, 3rd | 16.1. SDES Item | |||
Paragraph . . . . . . . . . . . . . . . . . . . . . . . 39 | 16.2. RTP SDES Header Extension URI | |||
15. RTP/RTCP Extensions for identification-tag Transport . . . . 39 | 16.3. SDP Attribute | |||
15.1. RTCP MID SDES Item . . . . . . . . . . . . . . . . . . . 40 | 16.4. SDP Group Semantics | |||
15.2. RTP SDES Header Extension For MID . . . . . . . . . . . 41 | 17. Security Considerations | |||
16. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41 | 18. Examples | |||
16.1. New SDES Item . . . . . . . . . . . . . . . . . . . . . 41 | 18.1. Example: Tagged "m=" Section Selections | |||
16.2. New RTP SDES Header Extension URI . . . . . . . . . . . 42 | 18.2. Example: BUNDLE Group Rejected | |||
16.3. New SDP Attribute . . . . . . . . . . . . . . . . . . . 42 | ||||
16.4. New SDP Group Semantics . . . . . . . . . . . . . . . . 43 | ||||
17. Security Considerations . . . . . . . . . . . . . . . . . . . 43 | ||||
18. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 44 | ||||
18.1. Example: Tagged "m=" Section Selections . . . . . . . . 44 | ||||
18.2. Example: BUNDLE Group Rejected . . . . . . . . . . . . . 46 | ||||
18.3. Example: Offerer Adds a Media Description to a BUNDLE | 18.3. Example: Offerer Adds a Media Description to a BUNDLE | |||
Group . . . . . . . . . . . . . . . . . . . . . . . . . 47 | Group | |||
18.4. Example: Offerer Moves a Media Description Out of a BUNDLE | 18.4. Example: Offerer Moves a Media Description Out of a BUNDLE | |||
Group . . . . . . . . . . . . . . . . . . . . . . . . . 49 | Group | |||
18.5. Example: Offerer Disables a Media Description within a | 18.5. Example: Offerer Disables a Media Description within a | |||
BUNDLE Group . . . . . . . . . . . . . . . . . . . . . . 51 | BUNDLE Group | |||
19. References . . . . . . . . . . . . . . . . . . . . . . . . . 53 | 19. References | |||
19.1. Normative References . . . . . . . . . . . . . . . . . . 53 | 19.1. Normative References | |||
19.2. Informative References . . . . . . . . . . . . . . . . . 55 | 19.2. Informative References | |||
Appendix A. Design Considerations . . . . . . . . . . . . . . . 57 | Appendix A. Design Considerations | |||
A.1. UA Interoperability . . . . . . . . . . . . . . . . . . . 57 | A.1. UA Interoperability | |||
A.2. Usage of Port Number Value Zero . . . . . . . . . . . . . 59 | A.2. Usage of Port Number Value Zero | |||
A.3. B2BUA and Proxy Interoperability . . . . . . . . . . . . 59 | A.3. B2BUA and Proxy Interoperability | |||
A.3.1. Traffic Policing . . . . . . . . . . . . . . . . . . 60 | A.3.1. Traffic Policing | |||
A.3.2. Bandwidth Allocation . . . . . . . . . . . . . . . . 60 | A.3.2. Bandwidth Allocation | |||
A.4. Candidate Gathering . . . . . . . . . . . . . . . . . . . 60 | A.4. Candidate Gathering | |||
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 61 | Acknowledgements | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 61 | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
1.1. Background | 1.1. Background | |||
When the SDP offer/answer mechanism [RFC3264] is used to negotiate | When the SDP offer/answer mechanism [RFC3264] is used to negotiate | |||
the establishment of multimedia communication sessions, if separate | the establishment of multimedia communication sessions, if separate | |||
transports (5-tuples) are negotiated for each individual media | transports (5-tuples) are negotiated for each individual media | |||
stream, each transport consumes additional resources (especially when | stream, each transport consumes additional resources (especially when | |||
Interactive Connectivity Establishment (ICE) [RFC8445] is used). For | Interactive Connectivity Establishment (ICE) [RFC8445] is used). For | |||
this reason, it is attractive to use a single transport for multiple | this reason, it is attractive to use a single transport for multiple | |||
media streams. | media streams. | |||
1.2. BUNDLE Mechanism | 1.2. BUNDLE Mechanism | |||
This specification defines a way to use a single transport (BUNDLE | This specification defines a way to use a single transport (BUNDLE | |||
transport) for sending and receiving media (bundled media) described | transport) for sending and receiving media (bundled media) described | |||
by multiple SDP media descriptions ("m=" sections). The address:port | by multiple SDP media descriptions ("m=" sections). The address:port | |||
combination used by an endpoint for sending and receiving bundled | combination used by an endpoint for sending and receiving bundled | |||
media is referred to as the BUNDLE address:port. The set of SDP | media is referred to as the "BUNDLE address:port". The set of SDP | |||
attributes that are applied to each "m=" section within a BUNDLE | attributes that are applied to each "m=" section within a BUNDLE | |||
group is referred to as BUNDLE attributes. The same BUNDLE transport | group is referred to as "BUNDLE attributes". The same BUNDLE | |||
is used for sending and receiving bundled media, which means that the | transport is used for sending and receiving bundled media, which | |||
symmetric Real-time Transport Protocol (RTP) mechanism [RFC4961] is | means that the symmetric Real-time Transport Protocol (RTP) mechanism | |||
always used for RTP-based bundled media. | [RFC4961] is always used for RTP-based bundled media. | |||
This specification defines a new SDP Grouping Framework [RFC5888] | This specification defines a new SDP Grouping Framework [RFC5888] | |||
extension called 'BUNDLE'. The extension can be used with the | extension called 'BUNDLE'. The extension can be used with the | |||
Session Description Protocol (SDP) offer/answer mechanism [RFC3264] | Session Description Protocol (SDP) offer/answer mechanism [RFC3264] | |||
to negotiate which "m=" sections will become part of a BUNDLE group. | to negotiate which "m=" sections will become part of a BUNDLE group. | |||
In addition, the offerer and answerer [RFC3264] use the BUNDLE | In addition, the offerer and answerer [RFC3264] use the BUNDLE | |||
extension to negotiate the BUNDLE addresses:ports (offerer BUNDLE | extension to negotiate the BUNDLE addresses:ports (offerer BUNDLE | |||
address:port and answerer BUNDLE address:port) and the set of BUNDLE | address:port and answerer BUNDLE address:port) and the set of BUNDLE | |||
attributes (offerer BUNDLE attributes and answerer BUNDLE attributes) | attributes (offerer BUNDLE attributes and answerer BUNDLE attributes) | |||
that will be applied to each "m=" section within the BUNDLE group. | 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 | The use of a BUNDLE transport allows the usage of a single set of ICE | |||
[RFC8445] candidates for the whole BUNDLE group. | candidates [RFC8445] for the whole BUNDLE group. | |||
A given BUNDLE address:port MUST only be associated with a single | A given BUNDLE address:port MUST only be associated with a single | |||
BUNDLE group. If an SDP offer or SDP answer (hereafter referred to | BUNDLE group. If an SDP offer or SDP answer (hereafter referred to | |||
as "offer" and "answer") contains multiple BUNDLE groups, the | as "offer" and "answer") contains multiple BUNDLE groups, the | |||
procedures in this specification apply to each group independently. | procedures in this specification apply to each group independently. | |||
All RTP-based bundled media associated with a given BUNDLE group | All RTP-based bundled media associated with a given BUNDLE group | |||
belong to a single RTP session [RFC3550]. | belong to a single RTP session [RFC3550]. | |||
The BUNDLE extension is backward compatible. Endpoints that do not | The BUNDLE extension is backward compatible. Endpoints that do not | |||
support the extension are expected to generate offers and answers | support the extension are expected to generate offers and answers | |||
without an SDP 'group:BUNDLE' attribute and assign a unique | without an SDP 'group:BUNDLE' attribute and assign a unique | |||
address:port to each "m=" section within an offer and answer, | address:port to each "m=" section within an offer and answer, | |||
according to the procedures in [RFC3264] and [RFC4566]. | according to the procedures in [RFC3264] and [RFC4566]. | |||
1.3. Protocol Extensions | 1.3. Protocol Extensions | |||
In addition to defining the new SDP Grouping Framework extension, | In addition to defining the new SDP Grouping Framework extension, | |||
this specification defines the following protocol extensions and RFC | this specification defines the following protocol extensions and | |||
updates. This specification: | makes the following updates to RFCs. This specification: | |||
* defines a new SDP attribute, 'bundle-only', which can be used to | * defines a new SDP attribute, 'bundle-only', which can be used to | |||
request that a specific "m=" section (and the associated media) be | request that a specific "m=" section (and the associated media) be | |||
used only if kept within a BUNDLE group. | used only if kept within a BUNDLE group. | |||
* updates RFC 3264 [RFC3264], to also allow assigning a zero port | * updates RFC 3264 [RFC3264] to also allow assigning a zero port | |||
value to an "m=" section in cases where the media described by the | value to an "m=" section in cases where the media described by the | |||
"m=" section is not disabled or rejected. | "m=" section is not disabled or rejected. | |||
* defines a new RTCP [RFC3550] SDES item, 'MID', and a new RTP SDES | * defines a new RTCP [RFC3550] SDES item, Media Identification | |||
header extension that can be used to associate RTP streams with | ('MID'), and a new RTP SDES header extension that can be used to | |||
"m=" sections. | associate RTP streams with "m=" sections. | |||
* updates [RFC7941] by adding an exception, for the MID RTP header | * updates [RFC7941] by adding an exception, for the MID RTP header | |||
extension, to the requirement regarding protection of an SDES RTP | extension, to the requirement regarding protection of an SDES RTP | |||
header extension carrying an SDES item for the MID RTP header | header extension carrying an SDES item for the MID RTP header | |||
extension. | extension. | |||
* updates [RFC5888] by allowing an SDP 'group' attribute to contain | * updates [RFC5888] by allowing an SDP 'group' attribute to contain | |||
an identification-tag that identifies an "m=" section with the | an identification-tag that identifies an "m=" section with the | |||
port value set to zero. | port value set to zero. | |||
1.4. Changes from RFC 8843 | 1.4. Changes from RFC 8843 | |||
When RFC 8843 and [RFC8829] were published an inconsistency between | When [RFC8843] and [RFC8829] were published, an inconsistency between | |||
the specifications was identified. The procedures regarding | the specifications was identified. The procedures regarding | |||
assigning the port value to a bundled "m=" section in an answer | assigning the port value to a bundled "m=" section in an answer | |||
(initial or subsequent) and a subsequent offer were inconsistent. | (initial or subsequent) and a subsequent offer were inconsistent. | |||
This specification removes the inconsistency by aligning the port | This specification removes the inconsistency by aligning the port | |||
value assignment procedure with the procedure in RFC 8829. | value assignment procedure with the procedure in [RFC8829]. | |||
In addition, this document implements the following erratas: 6431, | In addition, this document implements changes from the following | |||
6437 | errata reports: [Err6431], [Err6437]. | |||
2. Terminology | 2. Terminology | |||
"m=" section: SDP bodies contain one or more media descriptions, | "m=" section: SDP bodies contain one or more media descriptions, | |||
referred to as "m=" sections. Each "m=" section is represented | referred to as "m=" sections. Each "m=" section is represented by | |||
by an SDP "m=" line and zero or more SDP attributes associated | an SDP "m=" line and zero or more SDP attributes associated with | |||
with the "m=" line. A local address:port combination is | the "m=" line. A local address:port combination is assigned to | |||
assigned to each "m=" section. | each "m=" section. | |||
5-tuple: A collection of the following values: source address, | 5-tuple: A collection of the following values: source address, | |||
source port, destination address, destination port, and | source port, destination address, destination port, and transport- | |||
transport-layer protocol. | layer protocol. | |||
Unique address:port: An address:port combination that is assigned | Unique address:port: An address:port combination that is assigned to | |||
to only one "m=" section in an offer or answer. | only one "m=" section in an offer or answer. | |||
Offerer BUNDLE-tag: The first identification-tag in a given SDP | Offerer BUNDLE-tag: The first identification-tag in a given SDP | |||
'group:BUNDLE' attribute identification-tag list in an offer. | 'group:BUNDLE' attribute identification-tag list in an offer. | |||
Answerer BUNDLE-tag: The first identification-tag in a given SDP | Answerer BUNDLE-tag: The first identification-tag in a given SDP | |||
'group:BUNDLE' attribute identification-tag list in an answer. | 'group:BUNDLE' attribute identification-tag list in an answer. | |||
Suggested offerer-tagged "m=" section: The bundled "m=" section | Suggested offerer-tagged "m=" section: The bundled "m=" section | |||
identified by the offerer BUNDLE-tag in an initial BUNDLE | identified by the offerer BUNDLE-tag in an initial BUNDLE offer, | |||
offer, before a BUNDLE group has been negotiated. | before a BUNDLE group has been negotiated. | |||
Offerer-tagged "m=" section: The bundled "m=" section identified | Offerer-tagged "m=" section: The bundled "m=" section identified by | |||
by the offerer BUNDLE-tag in a subsequent offer. The "m=" | the offerer BUNDLE-tag in a subsequent offer. The "m=" section | |||
section contains characteristics (offerer BUNDLE address:port | contains characteristics (offerer BUNDLE address:port and offerer | |||
and offerer BUNDLE attributes) that are applied to each "m=" | BUNDLE attributes) that are applied to each "m=" section within | |||
section within the BUNDLE group. | the BUNDLE group. | |||
Answerer-tagged "m=" section: The bundled "m=" section identified | Answerer-tagged "m=" section: The bundled "m=" section identified by | |||
by the answerer BUNDLE-tag in an answer (initial BUNDLE answer | the answerer BUNDLE-tag in an answer (initial BUNDLE answer or | |||
or subsequent). The "m=" section contains characteristics | subsequent). The "m=" section contains characteristics (answerer | |||
(answerer BUNDLE address:port and answerer BUNDLE attributes) | BUNDLE address:port and answerer BUNDLE attributes) that are | |||
that are applied to each "m=" section within the BUNDLE group. | applied to each "m=" section within the BUNDLE group. | |||
BUNDLE address:port: An address:port combination that an endpoint | BUNDLE address:port: An address:port combination that an endpoint | |||
uses for sending and receiving bundled media. | uses for sending and receiving bundled media. | |||
Offerer BUNDLE address:port: The address:port combination used by | Offerer BUNDLE address:port: The address:port combination used by | |||
the offerer for sending and receiving media. | the offerer for sending and receiving media. | |||
Answerer BUNDLE address:port: The address:port combination used | Answerer BUNDLE address:port: The address:port combination used by | |||
by the answerer for sending and receiving media. | the answerer for sending and receiving media. | |||
BUNDLE attributes: IDENTICAL and TRANSPORT multiplexing category | BUNDLE attributes: IDENTICAL and TRANSPORT multiplexing category SDP | |||
SDP attributes. Once a BUNDLE group has been created, the | attributes. Once a BUNDLE group has been created, the attribute | |||
attribute values apply to each bundled "m=" section within the | values apply to each bundled "m=" section within the BUNDLE group. | |||
BUNDLE group. | ||||
Offerer BUNDLE attributes: IDENTICAL and TRANSPORT multiplexing | Offerer BUNDLE attributes: IDENTICAL and TRANSPORT multiplexing | |||
category SDP attributes included in the offerer-tagged "m=" | category SDP attributes included in the offerer-tagged "m=" | |||
section. | section. | |||
Answerer BUNDLE attributes: IDENTICAL and TRANSPORT multiplexing | Answerer BUNDLE attributes: IDENTICAL and TRANSPORT multiplexing | |||
category SDP attributes included in the answerer-tagged "m=" | category SDP attributes included in the answerer-tagged "m=" | |||
section. | section. | |||
BUNDLE transport: The transport (5-tuple) used by all media | BUNDLE transport: The transport (5-tuple) used by all media | |||
described by the "m=" sections within a BUNDLE group. | described by the "m=" sections within a BUNDLE group. | |||
BUNDLE group: A set of bundled "m=" sections, created using an | BUNDLE group: A set of bundled "m=" sections, created using an SDP | |||
SDP offer/answer exchange, that uses a single BUNDLE transport, | offer/answer exchange, that uses a single BUNDLE transport and a | |||
and a single set of BUNDLE attributes, for sending and | single set of BUNDLE attributes for sending and receiving all | |||
receiving all media (bundled media) described by the set of | media (bundled media) described by the set of "m=" sections. The | |||
"m=" sections. The same BUNDLE transport is used for sending | same BUNDLE transport is used for sending and receiving bundled | |||
and receiving bundled media. | media. | |||
Bundled "m=" section: An "m=" section, whose identification-tag | Bundled "m=" section: An "m=" section, whose identification-tag is | |||
is placed in an SDP 'group:BUNDLE' attribute identification-tag | placed in an SDP 'group:BUNDLE' attribute identification-tag list | |||
list in an offer or answer. | in an offer or answer. | |||
Bundle-only "m=" section: A bundled "m=" section that contains an | Bundle-only "m=" section: A bundled "m=" section that contains an | |||
SDP 'bundle-only' attribute. | SDP 'bundle-only' attribute. | |||
Bundled media: All media associated with a given BUNDLE group. | Bundled media: All media associated with a given BUNDLE group. | |||
Initial BUNDLE offer: The first offer, within an SDP session | Initial BUNDLE offer: The first offer, within an SDP session (e.g., | |||
(e.g., a SIP dialog when SIP [RFC3261] is used to carry SDP), | a SIP dialog when SIP [RFC3261] is used to carry SDP), in which | |||
in which the offerer indicates that it wants to negotiate a | the offerer indicates that it wants to negotiate a given BUNDLE | |||
given BUNDLE group. | group. | |||
Initial BUNDLE answer: The answer to an initial BUNDLE offer in | Initial BUNDLE answer: The answer to an initial BUNDLE offer in | |||
which the offerer indicates that it wants to negotiate a BUNDLE | which the offerer indicates that it wants to negotiate a BUNDLE | |||
group, and the answerer accepts the creation of the BUNDLE | group, and the answerer accepts the creation of the BUNDLE group. | |||
group. The BUNDLE group is created once the answerer sends the | The BUNDLE group is created once the answerer sends the initial | |||
initial BUNDLE answer. | BUNDLE answer. | |||
Subsequent offer: An offer that contains a BUNDLE group that has | Subsequent offer: An offer that contains a BUNDLE group that has | |||
been created as part of a previous offer/answer exchange. | been created as part of a previous offer/answer exchange. | |||
Subsequent answer: An answer to a subsequent offer. | Subsequent answer: An answer to a subsequent offer. | |||
Identification-tag: A unique token value that is used to identify | Identification-tag: A unique token value that is used to identify an | |||
an "m=" section. The SDP 'mid' attribute [RFC5888] in an "m=" | "m=" section. The SDP 'mid' attribute [RFC5888] in an "m=" | |||
section carries the unique identification-tag assigned to that | section carries the unique identification-tag assigned to that | |||
"m=" section. The session-level SDP 'group' attribute | "m=" section. The session-level SDP 'group' attribute [RFC5888] | |||
[RFC5888] carries a list of identification-tags, identifying | carries a list of identification-tags, identifying the "m=" | |||
the "m=" sections associated with that particular 'group' | sections associated with that particular 'group' attribute. | |||
attribute. | ||||
3. Conventions | 3. Conventions | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
4. Applicability Statement | 4. Applicability Statement | |||
skipping to change at page 9, line 29 ¶ | skipping to change at line 395 ¶ | |||
The multiplexing category [RFC8859] for the 'group:BUNDLE' attribute | The multiplexing category [RFC8859] for the 'group:BUNDLE' attribute | |||
is 'NORMAL'. | is 'NORMAL'. | |||
Section 7 defines the detailed SDP offer/answer procedures for the | Section 7 defines the detailed SDP offer/answer procedures for the | |||
BUNDLE extension. | BUNDLE extension. | |||
6. SDP 'bundle-only' Attribute | 6. SDP 'bundle-only' Attribute | |||
This section defines a new SDP media-level attribute [RFC4566], | This section defines a new SDP media-level attribute [RFC4566], | |||
'bundle-only'. 'bundle-only' is a property attribute [RFC4566] and | 'bundle-only'. 'bundle-only' is a property attribute [RFC4566]; | |||
hence has no value. | hence, it has no value. | |||
In order to ensure that an answerer that does not support the BUNDLE | In order to ensure that an answerer that does not support the BUNDLE | |||
extension always rejects a bundled "m=" section in an offer, the | extension always rejects a bundled "m=" section in an offer, the | |||
offerer can assign a zero port value to the "m=" section. According | offerer can assign a zero port value to the "m=" section. According | |||
to [RFC3264], an answerer will reject such an "m=" section. By | to [RFC3264], an answerer will reject such an "m=" section. By | |||
including an SDP 'bundle-only' attribute in a bundled "m=" section, | including an SDP 'bundle-only' attribute in a bundled "m=" section, | |||
the offerer can request that the answerer accepts the "m=" section | the offerer can request that the answerer accept the "m=" section | |||
only if the answerer supports the BUNDLE extension and if the | only if the answerer supports the BUNDLE extension and if the | |||
answerer keeps the "m=" section within the associated BUNDLE group. | answerer keeps the "m=" section within the associated BUNDLE group. | |||
Name: bundle-only | Name: bundle-only | |||
Value: N/A | Value: N/A | |||
Usage Level: media | Usage Level: media | |||
Charset Dependent: no | Charset Dependent: no | |||
Example: a=bundle-only | Example: a=bundle-only | |||
The usage of the 'bundle-only' attribute is only defined for a | The usage of the 'bundle-only' attribute is only defined for a | |||
bundled "m=" section with a zero port value. Other usage is | bundled "m=" section with a zero port value. Other usage is | |||
unspecified. If an offerer or answerer receives a 'bundle-only' | unspecified. If an offerer or answerer receives a 'bundle-only' | |||
attribute in a non-bundled "m=" section the offerer or answerer MUST | attribute in a non-bundled "m=" section, the offerer or answerer MUST | |||
discard the attribute. | discard the attribute. | |||
Section 7 defines the detailed SDP offer/answer procedures for the | Section 7 defines the detailed SDP offer/answer procedures for the | |||
'bundle-only' attribute. | 'bundle-only' attribute. | |||
7. SDP Offer/Answer Procedures | 7. SDP Offer/Answer Procedures | |||
This section describes the SDP offer/answer [RFC3264] procedures for: | This section describes the SDP offer/answer [RFC3264] procedures for: | |||
* Negotiating a BUNDLE group; | * Negotiating a BUNDLE group; | |||
skipping to change at page 10, line 34 ¶ | skipping to change at line 446 ¶ | |||
* Moving an "m=" section out of a BUNDLE group; and | * Moving an "m=" section out of a BUNDLE group; and | |||
* Disabling an "m=" section within a BUNDLE group. | * Disabling an "m=" section within a BUNDLE group. | |||
The generic rules and procedures defined in [RFC3264] and [RFC5888] | The generic rules and procedures defined in [RFC3264] and [RFC5888] | |||
also apply to the BUNDLE extension. For example, if an offer is | also apply to the BUNDLE extension. For example, if an offer is | |||
rejected by the answerer, the previously negotiated addresses:ports, | rejected by the answerer, the previously negotiated addresses:ports, | |||
SDP parameters, and characteristics (including those associated with | SDP parameters, and characteristics (including those associated with | |||
a BUNDLE group) apply. Hence, if an offerer generates an offer in | a BUNDLE group) apply. Hence, if an offerer generates an offer in | |||
order to negotiate a BUNDLE group, and the answerer rejects the | order to negotiate a BUNDLE group and the answerer rejects the offer, | |||
offer, the BUNDLE group is not created. | the BUNDLE group is not created. | |||
The procedures in this section are independent of the media type or | The procedures in this section are independent of the media type or | |||
"m=" line proto value assigned to a bundled "m=" section. Section 6 | "m=" line proto value assigned to a bundled "m=" section. Section 6 | |||
defines additional considerations for the usage of the SDP 'bundle- | defines additional considerations for the usage of the SDP 'bundle- | |||
only' attribute. Section 9 defines additional considerations for | only' attribute. Section 9 defines additional considerations for | |||
RTP-based media. Section 10 defines additional considerations for | RTP-based media. Section 10 defines additional considerations for | |||
the usage of the ICE [RFC8445] mechanism. | the usage of the ICE mechanism [RFC8445]. | |||
Offers and answers can contain multiple BUNDLE groups. The | Offers and answers can contain multiple BUNDLE groups. The | |||
procedures in this section apply independently to a given BUNDLE | procedures in this section apply independently to a given BUNDLE | |||
group. | group. | |||
7.1. Generic SDP Considerations | 7.1. Generic SDP Considerations | |||
This section describes generic restrictions associated with the usage | This section describes generic restrictions associated with the usage | |||
of SDP parameters within a BUNDLE group. It also describes how to | of SDP parameters within a BUNDLE group. It also describes how to | |||
calculate a value for the whole BUNDLE group, when parameter and | calculate a value for the whole BUNDLE group, when parameter and | |||
skipping to change at page 11, line 21 ¶ | skipping to change at line 476 ¶ | |||
7.1.1. Connection Data ("c=") | 7.1.1. Connection Data ("c=") | |||
The "c=" line nettype value [RFC4566] associated with a bundled "m=" | The "c=" line nettype value [RFC4566] associated with a bundled "m=" | |||
section MUST be 'IN'. | section MUST be 'IN'. | |||
The "c=" line addrtype value [RFC4566] associated with a bundled "m=" | The "c=" line addrtype value [RFC4566] associated with a bundled "m=" | |||
section MUST be 'IP4' or 'IP6'. The same value MUST be associated | section MUST be 'IP4' or 'IP6'. The same value MUST be associated | |||
with each "m=" section. | with each "m=" section. | |||
NOTE: Extensions to this specification can specify usage of the | NOTE: Extensions to this specification can specify usage of the | |||
BUNDLE mechanism for other nettype and addrtype values than the ones | BUNDLE mechanism for other nettype and addrtype values than the | |||
listed above. | ones listed above. | |||
7.1.2. Bandwidth ("b=") | 7.1.2. Bandwidth ("b=") | |||
An offerer and answerer MUST use the rules and restrictions defined | An offerer and answerer MUST use the rules and restrictions defined | |||
in [RFC8859] for associating the SDP bandwidth ("b=") line with | in [RFC8859] for associating the SDP bandwidth ("b=") line with | |||
bundled "m=" sections. | bundled "m=" sections. | |||
7.1.3. Attributes ("a=") | 7.1.3. Attributes ("a=") | |||
An offerer and answerer MUST include SDP attributes in every bundled | An offerer and answerer MUST include SDP attributes in every bundled | |||
skipping to change at page 12, line 5 ¶ | skipping to change at line 502 ¶ | |||
* In the initial BUNDLE offer, the offerer MUST NOT include | * In the initial BUNDLE offer, the offerer MUST NOT include | |||
IDENTICAL and TRANSPORT multiplexing category SDP attributes | IDENTICAL and TRANSPORT multiplexing category SDP attributes | |||
(BUNDLE attributes) in bundle-only "m=" sections. The offerer | (BUNDLE attributes) in bundle-only "m=" sections. The offerer | |||
MUST include such attributes in all other bundled "m=" sections. | MUST include such attributes in all other bundled "m=" sections. | |||
In the initial BUNDLE offer, each bundled "m=" line can contain a | In the initial BUNDLE offer, each bundled "m=" line can contain a | |||
different set of BUNDLE attributes and attribute values. Once the | different set of BUNDLE attributes and attribute values. Once the | |||
offerer-tagged "m=" section has been selected, the BUNDLE | offerer-tagged "m=" section has been selected, the BUNDLE | |||
attributes contained in the offerer-tagged "m=" section will apply | attributes contained in the offerer-tagged "m=" section will apply | |||
to each bundled "m=" section within the BUNDLE group. | to each bundled "m=" section within the BUNDLE group. | |||
* In a subsequent offer, or in an answer (initial or subsequent), | * In a subsequent offer or in an answer (initial or subsequent), the | |||
the offerer and answerer MUST include IDENTICAL and TRANSPORT | offerer and answerer MUST include IDENTICAL and TRANSPORT | |||
multiplexing category SDP attributes (BUNDLE attributes) only in | multiplexing category SDP attributes (BUNDLE attributes) only in | |||
the tagged "m=" section (offerer-tagged "m=" section or answerer- | the tagged "m=" section (offerer-tagged "m=" section or answerer- | |||
tagged "m=" section). The offerer and answerer MUST NOT include | tagged "m=" section). The offerer and answerer MUST NOT include | |||
such attributes in any other bundled "m=" section. The BUNDLE | such attributes in any other bundled "m=" section. The BUNDLE | |||
attributes contained in the tagged "m=" section will apply to each | attributes contained in the tagged "m=" section will apply to each | |||
bundled "m=" section within the BUNDLE group. | bundled "m=" section within the BUNDLE group. | |||
* In an offer (initial BUNDLE offer or subsequent), or in an answer | * In an offer (initial BUNDLE offer or subsequent) or in an answer | |||
(initial BUNDLE answer or subsequent), the offerer and answerer | (initial BUNDLE answer or subsequent), the offerer and answerer | |||
MUST include SDP attributes from categories other than IDENTICAL | MUST include SDP attributes from categories other than IDENTICAL | |||
and TRANSPORT in each bundled "m=" section that a given attribute | and TRANSPORT in each bundled "m=" section that a given attribute | |||
applies to. Each bundled "m=" line can contain a different set of | applies to. Each bundled "m=" line can contain a different set of | |||
such attributes, and attribute values, as such attributes only | such attributes and attribute values, as such attributes only | |||
apply to the given bundled "m=" section in which they are | apply to the given bundled "m=" section in which they are | |||
included. | included. | |||
NOTE: A consequence of the rules above is that media-specific | NOTE: A consequence of the rules above is that media-specific | |||
IDENTICAL and TRANSPORT multiplexing category SDP attributes that are | IDENTICAL and TRANSPORT multiplexing category SDP attributes that | |||
applicable only to some of the bundled "m=" sections within the | are applicable only to some of the bundled "m=" sections within | |||
BUNDLE group might appear in the tagged "m=" section for which they | the BUNDLE group might appear in the tagged "m=" section for which | |||
are not applicable. For instance, the tagged "m=" section might | they are not applicable. For instance, the tagged "m=" section | |||
contain an SDP 'rtcp-mux' attribute even if the tagged "m=" section | might contain an SDP 'rtcp-mux' attribute even if the tagged "m=" | |||
does not describe RTP-based media (but another bundled "m=" section | section does not describe RTP-based media (but another bundled | |||
within the BUNDLE group does describe RTP-based media). | "m=" section within the BUNDLE group does describe RTP-based | |||
media). | ||||
7.2. Generating the Initial BUNDLE offer | 7.2. Generating the Initial BUNDLE Offer | |||
The procedures in this section apply to the first offer, within an | The procedures in this section apply to the first offer within an SDP | |||
SDP session (e.g., a SIP dialog when SIP [RFC3261] is used to carry | session (e.g., a SIP dialog when SIP [RFC3261] is used to carry SDP) | |||
SDP), in which the offerer indicates that it wants to negotiate a | in which the offerer indicates that it wants to negotiate a given | |||
given BUNDLE group. This could occur in the initial offer, or in a | BUNDLE group. This could occur in the initial offer, or in a | |||
subsequent offer, of the SDP session. | subsequent offer, of the SDP session. | |||
When an offerer generates an initial BUNDLE offer, in order to | When an offerer generates an initial BUNDLE offer, in order to | |||
negotiate a BUNDLE group, it MUST: | negotiate a BUNDLE group, it MUST: | |||
* Assign a unique address:port to each bundled "m=" section, | * Assign a unique address:port to each bundled "m=" section | |||
following the procedures in [RFC3264], excluding any bundle-only | following the procedures in [RFC3264], excluding any bundle-only | |||
"m=" sections (see below); | "m=" sections (see below); | |||
* Pick a bundled "m=" section as the suggested offerer-tagged "m=" | * Pick a bundled "m=" section as the suggested offerer-tagged "m=" | |||
(Section 7.2.1); | (Section 7.2.1); | |||
* Include SDP attributes in the bundled "m=" sections following the | * Include SDP attributes in the bundled "m=" sections following the | |||
rules in Section 7.1.3; | rules in Section 7.1.3; | |||
* Include an SDP 'group:BUNDLE' attribute in the offer; and | * Include an SDP 'group:BUNDLE' attribute in the offer; and | |||
* Place the identification-tag of each bundled "m=" section in the | * Place the identification-tag of each bundled "m=" section in the | |||
SDP 'group:BUNDLE' attribute identification-tag list. The offerer | SDP 'group:BUNDLE' attribute identification-tag list. The offerer | |||
BUNDLE-tag indicates the suggested offerer-tagged "m=" section. | BUNDLE-tag indicates the suggested offerer-tagged "m=" section. | |||
NOTE: When the offerer assigns unique addresses:ports to multiple | NOTE: When the offerer assigns unique addresses:ports to multiple | |||
bundled "m=" sections, the offerer needs to be prepared to receive | bundled "m=" sections, the offerer needs to be prepared to receive | |||
bundled media on each unique address:port, until it receives the | bundled media on each unique address:port until it receives the | |||
associated answer and finds out which bundled "m=" section (and | associated answer and finds out which bundled "m=" section (and | |||
associated address:port combination) the answerer has selected as the | associated address:port combination) the answerer has selected as | |||
offerer-tagged "m=" section. | the offerer-tagged "m=" section. | |||
If the offerer wants to request that the answerer accepts a given | If the offerer wants to request that the answerer accept a given | |||
bundled "m=" section only if the answerer keeps the "m=" section | bundled "m=" section only if the answerer keeps the "m=" section | |||
within the negotiated BUNDLE group, the offerer MUST: | within the negotiated BUNDLE group, the offerer MUST: | |||
* Include an SDP 'bundle-only' attribute (Section 7.2.1) in the "m=" | * Include an SDP 'bundle-only' attribute (Section 7.2.1) in the "m=" | |||
section, and | section, and | |||
* Assign a zero port value to the "m=" section. | * Assign a zero port value to the "m=" section. | |||
NOTE: If the offerer assigns a zero port value to a bundled "m=" | 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 | section but does not include an SDP 'bundle-only' attribute in the | |||
"m=" section, it is an indication that the offerer wants to disable | "m=" section, it is an indication that the offerer wants to | |||
the "m=" section (Section 7.5.3). | disable the "m=" section (Section 7.5.3). | |||
Sections 7.2.2 and 18.1 show an example of an initial BUNDLE offer. | Sections 7.2.2 and 18.1 show an example of an initial BUNDLE offer. | |||
7.2.1. Suggesting the Offerer-Tagged 'm=' Section | 7.2.1. Suggesting the Offerer-Tagged "m=" Section | |||
In the initial BUNDLE offer, the bundled "m=" section indicated by | In the initial BUNDLE offer, the bundled "m=" section indicated by | |||
the offerer BUNDLE-tag is the suggested offerer-tagged "m=" section. | the offerer BUNDLE-tag is the suggested offerer-tagged "m=" section. | |||
The address:port combination associated with the "m=" section will be | The address:port combination associated with the "m=" section will be | |||
used by the offerer for sending and receiving bundled media if the | used by the offerer for sending and receiving bundled media if the | |||
answerer selects the "m=" section as the offerer-tagged "m=" section | answerer selects the "m=" section as the offerer-tagged "m=" section | |||
(Section 7.3.1). In addition, if the answerer selects the "m=" | (Section 7.3.1). In addition, if the answerer selects the "m=" | |||
section as the offerer-tagged "m=" section, the BUNDLE attributes | section as the offerer-tagged "m=" section, the BUNDLE attributes | |||
included in the "m=" section will be applied to each "m=" section | included in the "m=" section will be applied to each "m=" section | |||
within the negotiated BUNDLE group. | within the negotiated BUNDLE group. | |||
The offerer MUST NOT suggest a bundle-only "m=" section as the | The offerer MUST NOT suggest a bundle-only "m=" section as the | |||
offerer-tagged "m=" section. | offerer-tagged "m=" section. | |||
It is RECOMMENDED that the suggested offerer-tagged "m=" section be a | It is RECOMMENDED that the suggested offerer-tagged "m=" section be a | |||
bundled "m=" section that the offerer believes is unlikely that the | bundled "m=" section which the offerer believes is unlikely to be | |||
answerer will reject or move out of the BUNDLE group. How such | rejected or moved out of the BUNDLE group by the answerer. How such | |||
assumption is made is outside the scope of this document. | an assumption is made is outside the scope of this document. | |||
7.2.2. Example: Initial BUNDLE offer | 7.2.2. Example: Initial BUNDLE Offer | |||
The following example shows an initial BUNDLE offer. The offer | The following example shows an initial BUNDLE offer. The offer | |||
includes two "m=" sections in the offer and suggests that both "m=" | includes two "m=" sections in the offer and suggests that both "m=" | |||
sections are included in a BUNDLE group. The audio "m=" section is | sections be included in a BUNDLE group. The audio "m=" section is | |||
the suggested offerer-tagged "m=" section, indicated by placing the | the suggested offerer-tagged "m=" section, indicated by placing the | |||
identification-tag associated with the "m=" section (offerer BUNDLE- | identification-tag associated with the "m=" section (offerer BUNDLE- | |||
tag) first in the SDP group:BUNDLE attribute identification-id list. | tag) first in the SDP 'group:BUNDLE' attribute identification-id | |||
list. | ||||
SDP Offer | SDP Offer | |||
v=0 | v=0 | |||
o=alice 2890844526 2890844526 IN IP6 2001:db8::3 | o=alice 2890844526 2890844526 IN IP6 2001:db8::3 | |||
s= | s= | |||
c=IN IP6 2001:db8::3 | c=IN IP6 2001:db8::3 | |||
t=0 0 | t=0 0 | |||
a=group:BUNDLE foo bar | a=group:BUNDLE foo bar | |||
skipping to change at page 14, line 43 ¶ | skipping to change at line 639 ¶ | |||
b=AS:1000 | b=AS:1000 | |||
a=mid:bar | a=mid:bar | |||
a=rtcp-mux | a=rtcp-mux | |||
a=rtpmap:31 H261/90000 | a=rtpmap:31 H261/90000 | |||
a=rtpmap:32 MPV/90000 | a=rtpmap:32 MPV/90000 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | |||
The following example shows an initial BUNDLE offer. The offer | The following example shows an initial BUNDLE offer. The offer | |||
includes two "m=" sections in the offer and suggests that both "m=" | includes two "m=" sections in the offer and suggests that both "m=" | |||
sections are included in a BUNDLE group. The offerer includes an SDP | sections are included in a BUNDLE group. The offerer includes an SDP | |||
'bundle-only' attribute in the video "m=" section, to request that | 'bundle-only' attribute in the video "m=" section to request that the | |||
the answerer accepts the "m=" section only if the answerer supports | answerer accept the "m=" section only if the answerer supports the | |||
the BUNDLE extension and if the answerer keeps the "m=" section | BUNDLE extension and if the answerer keeps the "m=" section within | |||
within the associated BUNDLE group. The audio "m=" section is the | the associated BUNDLE group. The audio "m=" section is the suggested | |||
suggested offerer-tagged "m=" section, indicated by placing the | offerer-tagged "m=" section, indicated by placing the identification- | |||
identification-tag associated with the "m=" section (offerer BUNDLE- | tag associated with the "m=" section (offerer BUNDLE-tag) first in | |||
tag) first in the SDP group:BUNDLE attribute identification-id list. | the SDP 'group:BUNDLE' attribute identification-id list. | |||
SDP Offer | SDP Offer | |||
v=0 | v=0 | |||
o=alice 2890844526 2890844526 IN IP6 2001:db8::3 | o=alice 2890844526 2890844526 IN IP6 2001:db8::3 | |||
s= | s= | |||
c=IN IP6 2001:db8::3 | c=IN IP6 2001:db8::3 | |||
t=0 0 | t=0 0 | |||
a=group:BUNDLE foo bar | a=group:BUNDLE foo bar | |||
m=audio 10000 RTP/AVP 0 8 97 | m=audio 10000 RTP/AVP 0 8 97 | |||
b=AS:200 | b=AS:200 | |||
a=mid:foo | a=mid:foo | |||
skipping to change at page 16, line 18 ¶ | skipping to change at line 709 ¶ | |||
* In case of an initial BUNDLE answer, select the offerer-tagged | * In case of an initial BUNDLE answer, select the offerer-tagged | |||
"m=" section using the procedures in Section 7.3.1. In case of a | "m=" section using the procedures in Section 7.3.1. In case of a | |||
subsequent answer, the offerer-tagged "m=" section is indicated in | subsequent answer, the offerer-tagged "m=" section is indicated in | |||
the corresponding subsequent offer and MUST NOT be changed by the | the corresponding subsequent offer and MUST NOT be changed by the | |||
answerer; | answerer; | |||
* Select the answerer-tagged "m=" section (Section 7.3.1); | * Select the answerer-tagged "m=" section (Section 7.3.1); | |||
* Assign the answerer BUNDLE address:port to the answerer-tagged | * Assign the answerer BUNDLE address:port to the answerer-tagged | |||
"m=" section, and to every other bundled "m=" section within the | "m=" section and to every other bundled "m=" section within the | |||
BUNDLE group; | BUNDLE group; | |||
* Include SDP attributes in the bundled "m=" sections following the | * Include SDP attributes in the bundled "m=" sections following the | |||
rules in Section 7.1.3; | rules in Section 7.1.3; | |||
* Include an SDP 'group:BUNDLE' attribute in the answer; and | * Include an SDP 'group:BUNDLE' attribute in the answer; and | |||
* Place the identification-tag of each bundled "m=" section in the | * Place the identification-tag of each bundled "m=" section in the | |||
SDP 'group:BUNDLE' attribute identification-tag list. The | SDP 'group:BUNDLE' attribute identification-tag list. The | |||
answerer BUNDLE-tag indicates the answerer-tagged "m=" section | answerer BUNDLE-tag indicates the answerer-tagged "m=" section | |||
skipping to change at page 16, line 44 ¶ | skipping to change at line 735 ¶ | |||
* Move the "m=" section out of the BUNDLE group (Section 7.3.2); or | * Move the "m=" section out of the BUNDLE group (Section 7.3.2); or | |||
* Reject the "m=" section (Section 7.3.3). | * Reject the "m=" section (Section 7.3.3). | |||
The answerer can modify the answerer BUNDLE address:port, add and | The answerer can modify the answerer BUNDLE address:port, add and | |||
remove SDP attributes, or modify SDP attribute values in a subsequent | remove SDP attributes, or modify SDP attribute values in a subsequent | |||
answer. Changes to the answerer BUNDLE address:port and the answerer | answer. Changes to the answerer BUNDLE address:port and the answerer | |||
BUNDLE attributes will be applied to each bundled "m=" section within | BUNDLE attributes will be applied to each bundled "m=" section within | |||
the BUNDLE group. | the BUNDLE group. | |||
NOTE: If a bundled "m=" section in an offer contains a zero port | 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' | value, but the "m=" section does not contain an SDP 'bundle-only' | |||
attribute, it is an indication that the offerer wants to disable the | attribute, it is an indication that the offerer wants to disable | |||
"m=" section (Section 7.5.3). | the "m=" section (Section 7.5.3). | |||
7.3.1. Answerer Selection of Tagged 'm=' Sections | 7.3.1. Answerer Selection of Tagged "m=" Sections | |||
When selecting the offerer-tagged "m=" section, the answerer MUST | When selecting the offerer-tagged "m=" section, the answerer MUST | |||
first check whether the "m=" section fulfills the following criteria | first check whether the "m=" section fulfills the following criteria | |||
Section 7.2.1: | (Section 7.2.1): | |||
* The answerer will not move the "m=" section out of the BUNDLE | * The answerer will not move the "m=" section out of the BUNDLE | |||
group (Section 7.3.2); | group (Section 7.3.2); | |||
* The answerer will not reject the "m=" section (Section 7.3.3); and | * The answerer will not reject the "m=" section (Section 7.3.3); and | |||
* The "m=" section does not contain a zero port value. | * The "m=" section does not contain a zero port value. | |||
If all of the criteria above are fulfilled, the answerer MUST select | If all of the criteria above are fulfilled, the answerer MUST select | |||
the "m=" section as the offerer-tagged "m=" section and MUST also | the "m=" section as the offerer-tagged "m=" section and MUST also | |||
skipping to change at page 17, line 44 ¶ | skipping to change at line 779 ¶ | |||
creating the answer. | creating the answer. | |||
Section 18.1 shows an example of an offerer BUNDLE address:port | Section 18.1 shows an example of an offerer BUNDLE address:port | |||
selection. | selection. | |||
Sections 7.3.4 and 18.1 show an example of an answerer-tagged "m=" | Sections 7.3.4 and 18.1 show an example of an answerer-tagged "m=" | |||
section selection. | section selection. | |||
7.3.2. Moving a Media Description Out of a BUNDLE Group | 7.3.2. Moving a Media Description Out of a BUNDLE Group | |||
When an answerer generates the answer, if the answerer wants to move | When an answerer generates the answer, the answerer MUST first check | |||
a bundled "m=" section out of the negotiated BUNDLE group, the | the following criteria if it wants to move a bundled "m=" section out | |||
answerer MUST first check the following criteria: | of the negotiated BUNDLE group: | |||
* In the corresponding offer, the "m=" section is within a | * In the corresponding offer, the "m=" section is within a | |||
previously negotiated BUNDLE group, and | previously negotiated BUNDLE group, and | |||
* In the corresponding offer, the "m=" section contains an SDP | * In the corresponding offer, the "m=" section contains an SDP | |||
'bundle-only' attribute. | 'bundle-only' attribute. | |||
If either criterion above is fulfilled, the answerer cannot move the | If either criterion above is fulfilled, the answerer cannot move the | |||
"m=" section out of the BUNDLE group in the answer. The answerer can | "m=" section out of the BUNDLE group in the answer. The answerer can | |||
reject the whole offer, reject each bundled "m=" section within the | reject the whole offer, reject each bundled "m=" section within the | |||
BUNDLE group (Section 7.3.3), or keep the "m=" section within the | BUNDLE group (Section 7.3.3), or keep the "m=" section within the | |||
BUNDLE group in the answer and later create an offer where the "m=" | BUNDLE group in the answer and later create an offer where the "m=" | |||
section is moved out of the BUNDLE group (Section 7.5.2). | section is moved out of the BUNDLE group (Section 7.5.2). | |||
NOTE: One consequence of the rules above is that, once a BUNDLE group | NOTE: One consequence of the rules above is that, once a BUNDLE | |||
has been negotiated, a bundled "m=" section cannot be moved out of | group has been negotiated, a bundled "m=" section cannot be moved | |||
the BUNDLE group in an answer. Instead, an offer is needed. | 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 | When the answerer generates an answer in which it moves a bundled | |||
"m=" section out of a BUNDLE group, the answerer: | "m=" section out of a BUNDLE group, the answerer: | |||
* MUST assign a unique address:port to the "m=" section; | * MUST assign a unique address:port to the "m=" section; | |||
* MUST include any applicable SDP attribute in the "m=" section, | * MUST include any applicable SDP attribute in the "m=" section | |||
using the normal offer/answer procedures for each attribute; | using the normal offer/answer procedures for each attribute; | |||
* MUST NOT place the identification-tag associated with the "m=" | * MUST NOT place the identification-tag associated with the "m=" | |||
section in the SDP 'group:BUNDLE' attribute identification-tag | section in the SDP 'group:BUNDLE' attribute identification-tag | |||
list associated with the BUNDLE group; and | list associated with the BUNDLE group; and | |||
* MUST NOT include an SDP 'bundle-only' attribute to the "m=" | * MUST NOT include an SDP 'bundle-only' attribute to the "m=" | |||
section. | section. | |||
Because an answerer is not allowed to move an "m=" section from one | Because an answerer is not allowed to move an "m=" section from one | |||
skipping to change at page 19, line 5 ¶ | skipping to change at line 838 ¶ | |||
* In the corresponding offer (subsequent), the "m=" section is the | * In the corresponding offer (subsequent), the "m=" section is the | |||
offerer-tagged "m=" section. | offerer-tagged "m=" section. | |||
If the criterion above is fulfilled, the answerer cannot reject the | If the criterion above is fulfilled, the answerer cannot reject the | |||
"m=" section in the answer. The answerer can reject the whole offer, | "m=" section in the answer. The answerer can reject the whole offer, | |||
reject each bundled "m=" section within the BUNDLE group, or keep the | reject each bundled "m=" section within the BUNDLE group, or keep the | |||
"m=" section within the BUNDLE group in the answer and later create | "m=" section within the BUNDLE group in the answer and later create | |||
an offer where the "m=" section is disabled within the BUNDLE group | an offer where the "m=" section is disabled within the BUNDLE group | |||
(Section 7.5.3). | (Section 7.5.3). | |||
When an answerer generates an answer, in which it rejects a bundled | When an answerer generates an answer in which it rejects a bundled | |||
"m=" section, the answerer: | "m=" section, the answerer: | |||
* MUST assign a zero port value to the "m=" section, according to | * MUST assign a zero port value to the "m=" section, according to | |||
the procedures in [RFC3264]; | the procedures in [RFC3264]; | |||
* MUST NOT place the identification-tag associated with the "m=" | * MUST NOT place the identification-tag associated with the "m=" | |||
section in the SDP 'group:BUNDLE' attribute identification-tag | section in the SDP 'group:BUNDLE' attribute identification-tag | |||
list associated with the BUNDLE group; and | list associated with the BUNDLE group; and | |||
* MUST NOT include an SDP 'bundle-only' attribute in the "m=" | * MUST NOT include an SDP 'bundle-only' attribute in the "m=" | |||
section. | section. | |||
7.3.4. Example: SDP Answer | 7.3.4. Example: SDP Answer | |||
The example below shows an answer, based on the corresponding offer | The example below shows an answer based on the corresponding offer in | |||
in Section 7.2.2. The answerer accepts both bundled "m=" sections | Section 7.2.2. The answerer accepts both bundled "m=" sections | |||
within the created BUNDLE group. The audio "m=" section is the | within the created BUNDLE group. The audio "m=" section is the | |||
answerer-tagged "m=" section, indicated by placing the | answerer-tagged "m=" section, indicated by placing the | |||
identification-tag associated with the "m=" section (answerer BUNDLE- | identification-tag associated with the "m=" section (answerer BUNDLE- | |||
tag) first in the SDP group;BUNDLE attribute identification-id list. | tag) first in the SDP 'group:BUNDLE' attribute identification-id | |||
list. | ||||
SDP Answer | SDP Answer | |||
v=0 | v=0 | |||
o=bob 2808844564 2808844564 IN IP6 2001:db8::1 | o=bob 2808844564 2808844564 IN IP6 2001:db8::1 | |||
s= | s= | |||
c=IN IP6 2001:db8::1 | c=IN IP6 2001:db8::1 | |||
t=0 0 | t=0 0 | |||
a=group:BUNDLE foo bar | a=group:BUNDLE foo bar | |||
skipping to change at page 20, line 7 ¶ | skipping to change at line 885 ¶ | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | |||
m=video 20000 RTP/AVP 32 | m=video 20000 RTP/AVP 32 | |||
b=AS:1000 | b=AS:1000 | |||
a=mid:bar | a=mid:bar | |||
a=rtpmap:32 MPV/90000 | a=rtpmap:32 MPV/90000 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | |||
7.3.5. RFC 8843 Considerations | 7.3.5. RFC 8843 Considerations | |||
In RFC 8843, instead of assigning the offerer BUNDLE address:port to | In [RFC8843], instead of assigning the offerer BUNDLE address:port to | |||
each "m=" section within the BUNDLE group when modifying the session | each "m=" section within the BUNDLE group when modifying the session | |||
(Section 7.5), the offerer only assigned the offerer BUNDLE | (Section 7.5), the offerer only assigned the offerer BUNDLE | |||
address:port to the offerer-tagged "m=" section. For every other | address:port to the offerer-tagged "m=" section. For every other | |||
"m=" section within the BUNDLE group, the offerer included an SDP | "m=" section within the BUNDLE group, the offerer included an SDP | |||
'bundle-only' attribute in, and assigned a zero port value to, the | 'bundle-only' attribute in, and assigned a zero port value to, the | |||
"m=" section. The way an answerer compliant to this specification | "m=" section. The way an answerer compliant with this specification | |||
processes such offer is considered an implementation issue (e.g., | processes such offer is considered an implementation issue (e.g., | |||
based on whether the answerer needs to be backward compatible with | based on whether the answerer needs to be backward compatible with | |||
RFC 8843 compliant offerers), and is outside the scope of this | offerers compliant with [RFC8843]) and is outside the scope of this | |||
specification. The example below shows such SDP offer: | specification. The example below shows such an SDP Offer: | |||
SDP Offer | SDP Offer | |||
v=0 | v=0 | |||
o=alice 2890844526 2890844526 IN IP6 2001:db8::3 | o=alice 2890844526 2890844526 IN IP6 2001:db8::3 | |||
s= | s= | |||
c=IN IP6 2001:db8::3 | c=IN IP6 2001:db8::3 | |||
t=0 0 | t=0 0 | |||
a=group:BUNDLE foo bar | a=group:BUNDLE foo bar | |||
skipping to change at page 21, line 6 ¶ | skipping to change at line 933 ¶ | |||
7.4. Offerer Processing of the SDP Answer | 7.4. Offerer Processing of the SDP Answer | |||
When an offerer receives an answer, if the answer contains a BUNDLE | When an offerer receives an answer, if the answer contains a BUNDLE | |||
group, the offerer MUST check that any bundled "m=" section in the | group, the offerer MUST check that any bundled "m=" section in the | |||
answer was indicated as bundled in the corresponding offer (for the | answer was indicated as bundled in the corresponding offer (for the | |||
same BUNDLE group). If there is no mismatch, the offerer MUST apply | same BUNDLE group). If there is no mismatch, the offerer MUST apply | |||
the properties (BUNDLE address:port, BUNDLE attributes, etc.) of the | the properties (BUNDLE address:port, BUNDLE attributes, etc.) of the | |||
offerer-tagged "m=" section (selected by the answerer; see | offerer-tagged "m=" section (selected by the answerer; see | |||
Section 7.3.1) to each bundled "m=" section within the BUNDLE group. | Section 7.3.1) to each bundled "m=" section within the BUNDLE group. | |||
NOTE: As the answerer might reject one or more bundled "m=" sections | NOTE: As the answerer might reject one or more bundled "m=" | |||
in an initial BUNDLE offer, or move a bundled "m=" section out of a | sections in an initial BUNDLE offer or move a bundled "m=" section | |||
BUNDLE group, a given bundled "m=" section in the offer might not be | out of a BUNDLE group, a given bundled "m=" section in the offer | |||
indicated as bundled in the corresponding answer. | might not be indicated as bundled in the corresponding answer. | |||
If the answer does not contain a BUNDLE group, the offerer MUST | If the answer does not contain a BUNDLE group, the offerer MUST | |||
process the answer as a normal answer. | process the answer as a normal answer. | |||
7.4.1. RFC 8843 Considerations | 7.4.1. RFC 8843 Considerations | |||
In RFC 8843, instead of assigning the answerer BUNDLE address:port to | In [RFC8843], instead of assigning the answerer BUNDLE address:port | |||
each "m=" section within the BUNDLE group when generating the SDP | to each "m=" section within the BUNDLE group when generating the SDP | |||
answer(Section 7.3), the answerer only assigned the answerer BUNDLE | Answer (Section 7.3), the answerer only assigned the answerer BUNDLE | |||
address:port to the answerer-tagged "m=" section. For every other | address:port to the answerer-tagged "m=" section. For every other | |||
"m=" section within the BUNDLE group, the answerer included an SDP | "m=" section within the BUNDLE group, the answerer included an SDP | |||
'bundle-only' attribute in, and assigned a zero port value to, the | 'bundle-only' attribute in, and assigned a zero port value to, the | |||
"m=" section. The way an offerer compliant to this specification | "m=" section. The way an offerer compliant with this specification | |||
processes such SDP answer is considered an implementation issue | processes such an SDP Answer is considered an implementation issue | |||
(e.g., based on whether the answerer needs to be backward compatible | (e.g., based on whether the answerer needs to be backward compatible | |||
with RFC 8843 compliant offerers), and is outside the scope of this | with offerers compliant with [RFC8843]) and is outside the scope of | |||
specification. The example below shows such SDP answer: | this specification. The example below shows such an SDP Answer: | |||
SDP Answer | SDP Answer | |||
v=0 | v=0 | |||
o=bob 2808844564 2808844564 IN IP6 2001:db8::1 | o=bob 2808844564 2808844564 IN IP6 2001:db8::1 | |||
s= | s= | |||
c=IN IP6 2001:db8::1 | c=IN IP6 2001:db8::1 | |||
t=0 0 | t=0 0 | |||
a=group:BUNDLE foo bar | a=group:BUNDLE foo bar | |||
skipping to change at page 22, line 7 ¶ | skipping to change at line 980 ¶ | |||
m=video 0 RTP/AVP 32 | m=video 0 RTP/AVP 32 | |||
b=AS:1000 | b=AS:1000 | |||
a=mid:bar | a=mid:bar | |||
a=bundle-only | a=bundle-only | |||
a=rtpmap:32 MPV/90000 | a=rtpmap:32 MPV/90000 | |||
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid | |||
7.5. Modifying the Session | 7.5. Modifying the Session | |||
When a BUNDLE group has been previously negotiated, and an offerer | When a BUNDLE group has been previously negotiated and an offerer | |||
generates a subsequent offer, the offerer MUST: | generates a subsequent offer, the offerer MUST: | |||
* Pick one bundled "m=" section as the offerer-tagged "m=" section. | * Pick one bundled "m=" section as the offerer-tagged "m=" section. | |||
The offerer can pick either the "m=" section that was previously | The offerer can pick either the "m=" section that was previously | |||
selected by the answerer as the offerer-tagged "m=" section or | selected by the answerer as the offerer-tagged "m=" section or | |||
another bundled "m=" section within the BUNDLE group; | another bundled "m=" section within the BUNDLE group; | |||
* Assign a BUNDLE address:port (previously negotiated or newly | * Assign a BUNDLE address:port (previously negotiated or newly | |||
suggested) to the offerer-tagged "m=" section, and to every other | suggested) to the offerer-tagged "m=" section and to every other | |||
bundled "m=" section within the BUNDLE group; | bundled "m=" section within the BUNDLE group; | |||
* Include SDP attributes in the bundled "m=" sections following the | * Include SDP attributes in the bundled "m=" sections following the | |||
rules in Section 7.1.3; | rules in Section 7.1.3; | |||
* Include an SDP 'group:BUNDLE' attribute in the offer; and | * Include an SDP 'group:BUNDLE' attribute in the offer; and | |||
* Place the identification-tag of each bundled "m=" section in the | * Place the identification-tag of each bundled "m=" section in the | |||
SDP 'group:BUNDLE' attribute identification-tag list. The offerer | SDP 'group:BUNDLE' attribute identification-tag list. The offerer | |||
BUNDLE-tag indicates the offerer-tagged "m=" section. | BUNDLE-tag indicates the offerer-tagged "m=" section. | |||
skipping to change at page 22, line 45 ¶ | skipping to change at line 1018 ¶ | |||
The offerer can modify the offerer BUNDLE address:port, add and | The offerer can modify the offerer BUNDLE address:port, add and | |||
remove SDP attributes, or modify SDP attribute values in the | remove SDP attributes, or modify SDP attribute values in the | |||
subsequent offer. Changes to the offerer BUNDLE address:port and the | subsequent offer. Changes to the offerer BUNDLE address:port and the | |||
offerer BUNDLE attributes will (if the offer is accepted by the | offerer BUNDLE attributes will (if the offer is accepted by the | |||
answerer) be applied to each bundled "m=" section within the BUNDLE | answerer) be applied to each bundled "m=" section within the BUNDLE | |||
group. | group. | |||
7.5.1. Adding a Media Description to a BUNDLE Group | 7.5.1. Adding a Media Description to a BUNDLE Group | |||
When an offerer generates a subsequent offer, in which it wants to | When an offerer generates a subsequent offer in which it wants to add | |||
add a bundled "m=" section to a previously negotiated BUNDLE group, | a bundled "m=" section to a previously negotiated BUNDLE group, the | |||
the offerer follows the procedures in Section 7.5. The offerer picks | offerer follows the procedures in Section 7.5. The offerer picks | |||
either the added "m=" section or an "m=" section previously added to | either the added "m=" section or an "m=" section previously added to | |||
the BUNDLE group as the offerer-tagged "m=" section. | the BUNDLE group as the offerer-tagged "m=" section. | |||
NOTE: As described in Section 7.3.2, the answerer cannot move the | NOTE: As described in Section 7.3.2, the answerer cannot move the | |||
added "m=" section out of the BUNDLE group in its answer. If the | added "m=" section out of the BUNDLE group in its answer. If the | |||
answerer wants to move the "m=" section out of the BUNDLE group, it | answerer wants to move the "m=" section out of the BUNDLE group, | |||
will have to first accept it into the BUNDLE group in the answer, and | it will have to first accept it into the BUNDLE group in the | |||
then send a subsequent offer where the "m=" section is moved out of | answer and then send a subsequent offer where the "m=" section is | |||
the BUNDLE group (Section 7.5.2). | moved out of the BUNDLE group (Section 7.5.2). | |||
7.5.2. Moving a Media Description Out of a BUNDLE Group | 7.5.2. Moving a Media Description Out of a BUNDLE Group | |||
When an offerer generates a subsequent offer, in which it wants to | When an offerer generates a subsequent offer in which it wants to | |||
remove a bundled "m=" section from a BUNDLE group, the offerer: | remove a bundled "m=" section from a BUNDLE group, the offerer: | |||
* MUST assign a unique address:port to the "m=" section; | * MUST assign a unique address:port to the "m=" section; | |||
* MUST include SDP attributes in the "m=" section following the | * MUST include SDP attributes in the "m=" section following the | |||
normal offer/answer rules for each attribute; | normal offer/answer rules for each attribute; | |||
* MUST NOT place the identification-tag associated with the "m=" | * MUST NOT place the identification-tag associated with the "m=" | |||
section in the SDP 'group:BUNDLE' attribute identification-tag | section in the SDP 'group:BUNDLE' attribute identification-tag | |||
list associated with the BUNDLE group; and | list associated with the BUNDLE group; and | |||
* MUST NOT assign an SDP 'bundle-only' attribute to the "m=" | * MUST NOT assign an SDP 'bundle-only' attribute to the "m=" | |||
section. | section. | |||
For the other bundled "m=" sections within the BUNDLE group, the | For the other bundled "m=" sections within the BUNDLE group, the | |||
offerer follows the procedures in Section 7.5. | offerer follows the procedures in Section 7.5. | |||
An offerer MUST NOT move an "m=" section from one BUNDLE group to | 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=" | 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 | section from one BUNDLE group to another, it MUST first move the | |||
BUNDLE group out of the current BUNDLE group, and then generate a | BUNDLE group out of the current BUNDLE group and then generate a | |||
second offer where the "m=" section is added to another BUNDLE group | second offer where the "m=" section is added to another BUNDLE group | |||
(Section 7.5.1). | (Section 7.5.1). | |||
Section 18.4 shows an example of an offer for moving an "m=" section | Section 18.4 shows an example of an offer for moving an "m=" section | |||
out of a BUNDLE group. | out of a BUNDLE group. | |||
7.5.3. Disabling a Media Description in a BUNDLE Group | 7.5.3. Disabling a Media Description in a BUNDLE Group | |||
When an offerer generates a subsequent offer, in which it wants to | When an offerer generates a subsequent offer in which it wants to | |||
disable a bundled "m=" section from a BUNDLE group, the offerer: | disable a bundled "m=" section from a BUNDLE group, the offerer: | |||
* MUST assign a zero port value to the "m=" section, following the | * MUST assign a zero port value to the "m=" section, following the | |||
procedures in [RFC4566]; | procedures in [RFC4566]; | |||
* MUST NOT place the identification-tag associated with the "m=" | * MUST NOT place the identification-tag associated with the "m=" | |||
section in the SDP 'group:BUNDLE' attribute identification-tag | section in the SDP 'group:BUNDLE' attribute identification-tag | |||
list associated with the BUNDLE group; and | list associated with the BUNDLE group; and | |||
* MUST NOT assign an SDP 'bundle-only' attribute to the "m=" | * MUST NOT assign an SDP 'bundle-only' attribute to the "m=" | |||
section. | section. | |||
For the other bundled "m=" sections within the BUNDLE group, the | For the other bundled "m=" sections within the BUNDLE group, the | |||
offerer follows the procedures in Section 7.5. | offerer follows the procedures in Section 7.5. | |||
Section 18.5 shows an example of an offer and answer for disabling an | Section 18.5 shows an example of an offer and answer for disabling an | |||
"m=" section within a BUNDLE group. | "m=" section within a BUNDLE group. | |||
7.6. 3PCC Considerations | 7.6. 3PCC Considerations | |||
In some 3rd Party Call Control (3PCC) scenarios a new session will be | In some third-party call control (3PCC) scenarios, a new session will | |||
established between an endpoint that is currently part of an ongoing | be established between an endpoint that is currently part of an | |||
session and an endpoint that is not currently part of an ongoing | ongoing session and an endpoint that is not currently part of an | |||
session. In this situation, the endpoint that is not part of a | ongoing session. In this situation, the endpoint that is not part of | |||
session, while expecting an initial offer, can receive an SDP offer | a session, while expecting an initial offer, can receive an SDP offer | |||
created as a subsequent offer. The text below describes how this can | created as a subsequent offer. The text below describes how this can | |||
occur with the Session Initiation Protocol (SIP) [RFC3261]. | occur with the Session Initiation Protocol (SIP) [RFC3261]. | |||
SIP allows a User Agent Client (UAC) to send a re-INVITE request | SIP [RFC3261] allows a User Agent Client (UAC) to send a re-INVITE | |||
without an SDP body (sometimes referred to as an empty re-INVITE). | request without an SDP body (sometimes referred to as an "empty re- | |||
In such cases, the User Agent Server (UAS) will include an SDP offer | INVITE"). In such cases, the User Agent Server (UAS) will include an | |||
in the associated 200 (OK) response, and when the UAS is a part of an | SDP Offer in the associated 200 (OK) response; when the UAS is a part | |||
ongoing SIP session, this offer will be a subsequent offer. This | of an ongoing SIP session, this offer will be a subsequent offer. | |||
offer will be received by the 3PCC controller (UAC) and then | This offer will be received by the 3PCC controller (UAC) and then | |||
forwarded to another User Agent (UA). When that UA is not part of an | forwarded to another User Agent (UA). When that UA is not part of an | |||
ongoing SIP session, as noted above, it will process the offer as an | ongoing SIP session, as noted above, it will process the offer as an | |||
initial SDP offer. | initial SDP offer. | |||
When the BUNDLE mechanism is used, an initial BUNDLE offer is | When the BUNDLE mechanism is used, an initial BUNDLE offer is | |||
constructed using different rules than subsequent BUNDLE offers, and | constructed using different rules than subsequent BUNDLE offers, and | |||
it cannot be assumed that a UA is able to correctly process a | it cannot be assumed that a UA is able to correctly process a | |||
subsequent BUNDLE offer as an initial BUNDLE offer. Therefore, the | subsequent BUNDLE offer as an initial BUNDLE offer. Therefore, the | |||
3PCC controller SHOULD take actions to mitigate this problem, and | 3PCC controller SHOULD take action to mitigate this problem, e.g., | |||
e.g., rewrite the subsequent BUNDLE offer into a valid initial BUNDLE | rewrite the subsequent BUNDLE offer into a valid initial BUNDLE offer | |||
offer (Section 7.2), before it forwards the BUNDLE offer to a UA. | (Section 7.2), before it forwards the BUNDLE offer to a UA. | |||
8. Protocol Identification | 8. Protocol Identification | |||
Each "m=" section within a BUNDLE group MUST use the same transport- | Each "m=" section within a BUNDLE group MUST use the same transport- | |||
layer protocol. If bundled "m=" sections use different upper-layer | layer protocol. If bundled "m=" sections use different upper-layer | |||
protocols on top of the transport-layer protocol, there MUST exist a | protocols on top of the transport-layer protocol, there MUST exist a | |||
publicly available specification that describes how a mechanism | publicly available specification that describes how a mechanism | |||
associates received data with the correct protocol for this | associates received data with the correct protocol for this | |||
particular protocol combination. | particular protocol combination. | |||
In addition, if received data can be associated with more than one | In addition, if received data can be associated with more than one | |||
bundled "m=" section, there MUST exist a publicly available | bundled "m=" section, there MUST exist a publicly available | |||
specification that describes a mechanism for associating the received | specification that describes a mechanism for associating the received | |||
data with the correct "m=" section. | data with the correct "m=" section. | |||
This document describes a mechanism to identify the protocol of | This document describes a mechanism to identify the protocol of | |||
received data among the Session Traversal Utilities for NAT (STUN), | received data among the Session Traversal Utilities for NAT (STUN), | |||
DTLS, and the Secure Real-time Transport Protocol (SRTP) (in any | Datagram Transport Layer Security (DTLS), and the Secure Real-time | |||
combination) when UDP is used as a transport-layer protocol, but it | Transport Protocol (SRTP) (in any combination) when UDP is used as a | |||
does not describe how to identify different protocols transported on | transport-layer protocol, but it does not describe how to identify | |||
DTLS. While the mechanism is generally applicable to other protocols | different protocols transported on DTLS. While the mechanism is | |||
and transport-layer protocols, any such use requires further | generally applicable to other protocols and transport-layer | |||
specification that encompasses how to multiplex multiple protocols on | protocols, any such use requires further specification that | |||
a given transport-layer protocol and how to associate received data | encompasses how to multiplex multiple protocols on a given transport- | |||
with the correct protocols. | layer protocol and how to associate received data with the correct | |||
protocols. | ||||
8.1. STUN, DTLS, and SRTP | 8.1. STUN, DTLS, and SRTP | |||
Section 5.1.2 of [RFC5764] describes a mechanism to identify the | Section 5.1.2 of [RFC5764] describes a mechanism to identify the | |||
protocol of a received packet among the STUN, DTLS, and SRTP | protocol of a received packet among the STUN, DTLS, and SRTP | |||
protocols (in any combination). If an offer or answer includes a | protocols (in any combination). If an offer or answer includes a | |||
bundled "m=" section that represents these protocols, the offerer or | bundled "m=" section that represents these protocols, the offerer or | |||
answerer MUST support the mechanism described in [RFC5764], and no | answerer MUST support the mechanism described in [RFC5764], and no | |||
explicit negotiation is required in order to indicate support and | explicit negotiation is required in order to indicate support and | |||
usage of the mechanism. | usage of the mechanism. | |||
skipping to change at page 26, line 7 ¶ | skipping to change at line 1171 ¶ | |||
All RTP-based media within a single BUNDLE group belong to a single | All RTP-based media within a single BUNDLE group belong to a single | |||
RTP session [RFC3550]. | RTP session [RFC3550]. | |||
Since a single BUNDLE transport is used for sending and receiving | Since a single BUNDLE transport is used for sending and receiving | |||
bundled media, the symmetric RTP mechanism [RFC4961] MUST be used for | bundled media, the symmetric RTP mechanism [RFC4961] MUST be used for | |||
RTP-based bundled media. | RTP-based bundled media. | |||
Since a single RTP session is used for each BUNDLE group, all "m=" | Since a single RTP session is used for each BUNDLE group, all "m=" | |||
sections representing RTP-based media within a BUNDLE group will | sections representing RTP-based media within a BUNDLE group will | |||
share a single Synchronization Source (SSRC) numbering space | share a single synchronization source (SSRC) numbering space | |||
[RFC3550]. | [RFC3550]. | |||
The following rules and restrictions apply for a single RTP session: | The following rules and restrictions apply for a single RTP session: | |||
* A specific payload type value can be used in multiple bundled "m=" | * A specific payload type value can be used in multiple bundled "m=" | |||
sections only if each codec associated with the payload type | sections only if each codec associated with the payload type | |||
number shares an identical codec configuration (Section 9.1.1). | number shares an identical codec configuration (Section 9.1.1). | |||
* The proto value in each bundled RTP-based "m=" section MUST be | * The proto value in each bundled RTP-based "m=" section MUST be | |||
identical (e.g., RTP/AVPF). | identical (e.g., RTP/AVPF). | |||
* The RTP MID header extension MUST be enabled, by including an SDP | * The RTP MID header extension MUST be enabled by including an SDP | |||
'extmap' attribute [RFC8285], with a 'urn:ietf:params:rtp- | 'extmap' attribute [RFC8285], with a 'urn:ietf:params:rtp- | |||
hdrext:sdes:mid' URI value defined in this specification, in each | hdrext:sdes:mid' URI value defined in this specification in each | |||
bundled RTP-based "m=" section in every offer and answer. | bundled RTP-based "m=" section in every offer and answer. | |||
* A given SSRC MUST NOT transmit RTP packets using payload types | * A given SSRC MUST NOT transmit RTP packets using payload types | |||
that originate from different bundled "m=" sections. | that originate from different bundled "m=" sections. | |||
NOTE: The last bullet above is to avoid sending multiple media types | NOTE: The last bullet above is to avoid sending multiple media | |||
from the same SSRC. If transmission of multiple media types are done | types from the same SSRC. If transmission of multiple media types | |||
with time overlap, RTP and RTCP fail to function. Even if done in | is done with time overlap, RTP and RTCP fail to function. Even if | |||
proper sequence, this causes RTP timestamp rate switching issues | done in the proper sequence, this causes RTP timestamp rate | |||
[RFC7160]. However, once an SSRC has left the RTP session (by | switching issues [RFC7160]. However, once an SSRC has left the | |||
sending an RTCP BYE packet), that SSRC can be reused by another | RTP session (by sending an RTCP BYE packet), that SSRC can be | |||
source (possibly associated with a different bundled "m=" section) | reused by another source (possibly associated with a different | |||
after a delay of 5 RTCP reporting intervals (the delay is to ensure | bundled "m=" section) after a delay of 5 RTCP reporting intervals | |||
the SSRC has timed out, in case the RTCP BYE packet was lost | (the delay is to ensure the SSRC has timed out in case the RTCP | |||
[RFC3550]). | BYE packet was lost [RFC3550]). | |||
[RFC7657] defines Differentiated Services (Diffserv) considerations | [RFC7657] defines Differentiated Services (Diffserv) considerations | |||
for RTP-based bundled media sent using a mixture of Diffserv | for RTP-based bundled media sent using a mixture of Diffserv | |||
Codepoints. | Codepoints. | |||
9.1.1. Payload Type (PT) Value Reuse | 9.1.1. Payload Type (PT) Value Reuse | |||
Multiple bundled "m=" sections might describe RTP-based media. As | Multiple bundled "m=" sections might describe RTP-based media. As | |||
all RTP-based media associated with a BUNDLE group belong to the same | 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 | RTP session, in order for a given payload type value to be used | |||
inside more than one bundled "m=" section, all codecs associated with | inside more than one bundled "m=" section, all codecs associated with | |||
the payload type number MUST share an identical codec configuration. | the payload type number MUST share an identical codec configuration. | |||
This means that the codecs MUST share the same media type, encoding | This means that the codecs MUST share the same media type, encoding | |||
name, clock rate, and any parameter that can affect the codec | name, clock rate, and any parameter that can affect the codec | |||
configuration and packetization. [RFC8859] lists SDP attributes, | configuration and packetization. [RFC8859] lists SDP attributes | |||
whose attribute values are required to be identical for all codecs | whose attribute values are required to be identical for all codecs | |||
that use the same payload type value. | that use the same payload type value. | |||
9.2. Associating RTP/RTCP Streams with the Correct SDP Media | 9.2. Associating RTP/RTCP Streams with the Correct SDP Media | |||
Description | Description | |||
As described in [RFC3550], RTP packets are associated with RTP | As described in [RFC3550], RTP packets are associated with RTP | |||
streams [RFC7656]. Each RTP stream is identified by an SSRC value, | streams [RFC7656]. Each RTP stream is identified by an SSRC value, | |||
and each RTP packet includes an SSRC field that is used to associate | 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 | the packet with the correct RTP stream. RTCP packets also use SSRCs | |||
to identify which RTP streams the packet relates to. However, an | to identify which RTP streams the packet relates to. However, an | |||
RTCP packet can contain multiple SSRC fields, in the course of | RTCP packet can contain multiple SSRC fields in the course of | |||
providing feedback or reports on different RTP streams, and therefore | providing feedback or reports on different RTP streams; therefore, | |||
can be associated with multiple such streams. | they can be associated with multiple such streams. | |||
In order to be able to process received RTP/RTCP packets correctly, | 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=" | it MUST be possible to associate an RTP stream with the correct "m=" | |||
section, as the "m=" section and SDP attributes associated with the | section, as the "m=" section and SDP attributes associated with the | |||
"m=" section contains information needed to process the packets. | "m=" section contain information needed to process the packets. | |||
As all RTP streams associated with a BUNDLE group use the same | As all RTP streams associated with a BUNDLE group use the same | |||
transport for sending and receiving RTP/RTCP packets, the local | transport for sending and receiving RTP/RTCP packets, the local | |||
address:port combination part of the transport cannot be used to | address:port combination part of the transport cannot be used to | |||
associate an RTP stream with the correct "m=" section. In addition, | associate an RTP stream with the correct "m=" section. In addition, | |||
multiple RTP streams might be associated with the same "m=" section. | multiple RTP streams might be associated with the same "m=" section. | |||
An offerer and answerer can inform each other which SSRC values they | An offerer and answerer can inform each other which SSRC values they | |||
will use for an RTP stream by using the SDP 'ssrc' attribute | will use for an RTP stream by using the SDP 'ssrc' attribute | |||
[RFC5576]. However, an offerer will not know which SSRC values the | [RFC5576]. However, an offerer will not know which SSRC values the | |||
skipping to change at page 27, line 50 ¶ | skipping to change at line 1263 ¶ | |||
In order for an offerer and answerer to always be able to associate | 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 | an RTP stream with the correct "m=" section, the offerer and answerer | |||
using the BUNDLE extension MUST support the mechanism defined in | using the BUNDLE extension MUST support the mechanism defined in | |||
Section 15, where the offerer and answerer insert the identification- | Section 15, where the offerer and answerer insert the identification- | |||
tag associated with an "m=" section (provided by the remote peer) | tag associated with an "m=" section (provided by the remote peer) | |||
into RTP and RTCP packets associated with a BUNDLE group. | into RTP and RTCP packets associated with a BUNDLE group. | |||
When using this mechanism, the mapping from an SSRC to an | When using this mechanism, the mapping from an SSRC to an | |||
identification-tag is carried in RTP header extensions or RTCP SDES | identification-tag is carried in RTP header extensions or RTCP SDES | |||
packets, as specified in Section 15. Since a compound RTCP packet | packets, as specified in Section 15. Since a compound RTCP packet | |||
can contain multiple RTCP SDES packets, and each RTCP SDES packet can | can contain multiple RTCP SDES packets and each RTCP SDES packet can | |||
contain multiple chunks, a single RTCP packet can contain several | contain multiple chunks, a single RTCP packet can contain several | |||
mappings of SSRC to identification-tag. The offerer and answerer | mappings of SSRC to identification-tag. The offerer and answerer | |||
maintain tables used for routing that are updated each time an RTP/ | maintain tables used for routing that are updated each time an RTP/ | |||
RTCP packet contains new information that affects how packets are to | RTCP packet contains new information that affects how packets are to | |||
be routed. | be routed. | |||
However, some legacy implementations may not include this | However, some legacy implementations may not include this | |||
identification-tag in their RTP and RTCP traffic when using the | identification-tag in their RTP and RTCP traffic when using the | |||
BUNDLE mechanism and instead use a mechanism based on the payload | BUNDLE mechanism and instead use a mechanism based on the payload | |||
type to associate RTP streams with SDP "m=" sections. In this | type to associate RTP streams with SDP "m=" sections. In this | |||
situation, each "m=" section needs to use unique payload type values, | situation, each "m=" section needs to use unique payload type values | |||
in order for the payload type to be a reliable indicator of the | in order for the payload type to be a reliable indicator of the | |||
relevant "m=" section for the RTP stream. If an implementation fails | relevant "m=" section for the RTP stream. If an implementation fails | |||
to ensure unique payload type values, it will be impossible to | to ensure unique payload type values, it will be impossible to | |||
associate the RTP stream using that payload type value to a | associate the RTP stream using that payload type value to a | |||
particular "m=" section. Note that when using the payload type to | particular "m=" section. Note that when using the payload type to | |||
associate RTP streams with "m=" sections, an RTP stream, identified | associate RTP streams with "m=" sections, an RTP stream, identified | |||
by its SSRC, will be mapped to an "m=" section when the first packet | 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 | 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 | 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 | words, the SSRC cannot "move" to a different "m=" section simply by | |||
skipping to change at page 29, line 16 ¶ | skipping to change at line 1320 ¶ | |||
each "m=" section in the BUNDLE group and for each payload type | each "m=" section in the BUNDLE group and for each payload type | |||
configured for receiving in that "m=" section. If any payload | configured for receiving in that "m=" section. If any payload | |||
type is configured for receiving in more than one "m=" section in | 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 | the BUNDLE group, do not include it in the table, as it cannot be | |||
used to uniquely identify an "m=" section. | used to uniquely identify an "m=" section. | |||
* Note that for each of these tables, there can only be one mapping | * 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 | for any given key (MID, SSRC, or PT). In other words, the tables | |||
are not multimaps. | are not multimaps. | |||
As "m=" sections are added or removed from the BUNDLE groups, or | As "m=" sections are added or removed from the BUNDLE groups or their | |||
their configurations are changed, the tables above MUST also be | configurations are changed, the tables above MUST also be updated. | |||
updated. | ||||
When an RTP packet is received, it MUST be delivered to the RTP | When an RTP packet is received, it MUST be delivered to the RTP | |||
stream corresponding to its SSRC. That RTP stream MUST then be | stream corresponding to its SSRC. That RTP stream MUST then be | |||
associated with the correct "m=" section within a BUNDLE group, for | associated with the correct "m=" section within a BUNDLE group for | |||
additional processing, according to the following steps: | additional processing, according to the following steps: | |||
* If the MID associated with the RTP stream is not in the table | * 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 | mapping a MID to an "m=" section, then the RTP stream is not | |||
decoded, and the payload data is discarded. | decoded, and the payload data is discarded. | |||
* If the packet has a MID, and the packet's extended sequence number | * 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 | is greater than that of the last MID update, as discussed in | |||
[RFC7941], Section 4.2.6, update the MID associated with the RTP | [RFC7941], Section 4.2.6, update the MID associated with the RTP | |||
stream to match the MID carried in the RTP packet, and then update | 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 | the mapping tables to include an entry that maps the SSRC of that | |||
RTP stream to the "m=" section for that MID. | RTP stream to the "m=" section for that MID. | |||
* If the SSRC of the RTP stream is in the incoming SSRC mapping | * 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 | table, check that the payload type used by the RTP stream matches | |||
a payload type included on the matching "m=" section. If so, | a payload type included in the matching "m=" section. If so, | |||
associate the RTP stream with that "m=" section. Otherwise, the | associate the RTP stream with that "m=" section. Otherwise, the | |||
RTP stream is not decoded, and the payload data is discarded. | 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 | * 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 | table, update the incoming SSRC mapping table to include an entry | |||
that maps the RTP stream's SSRC to the "m=" section for that | that maps the RTP stream's SSRC to the "m=" section for that | |||
payload type. Associate the RTP stream with the corresponding | payload type. Associate the RTP stream with the corresponding | |||
"m=" section. | "m=" section. | |||
* Otherwise, mark the RTP stream as "not for decoding" and discard | * Otherwise, mark the RTP stream as "not for decoding" and discard | |||
the payload. | the payload. | |||
If the RTP packet contains one or more Contributing Source (CSRC) | If the RTP packet contains one or more contributing source (CSRC) | |||
identifiers, then each CSRC is looked up in the incoming SSRC table, | identifiers, then each CSRC is looked up in the incoming SSRC table, | |||
and a copy of the RTP packet is associated with the corresponding | and a copy of the RTP packet is associated with the corresponding | |||
"m=" section for additional processing. | "m=" section for additional processing. | |||
For each RTCP packet received (including each RTCP packet that is | For each RTCP packet received (including each RTCP packet that is | |||
part of a compound RTCP packet), the packet is processed as usual by | part of a compound RTCP packet), the packet is processed as usual by | |||
the RTP layer, then associated with the appropriate "m=" sections, | the RTP layer, then associated with the appropriate "m=" sections and | |||
and processed for the RTP streams represented by those "m=" sections. | processed for the RTP streams represented by those "m=" sections. | |||
This routing is type dependent, as each kind of RTCP packet has its | This routing is type dependent, as each kind of RTCP packet has its | |||
own mechanism for associating it with the relevant RTP streams. | own mechanism for associating it with the relevant RTP streams. | |||
RTCP packets that cannot be associated with an appropriate "m=" | RTCP packets that cannot be associated with an appropriate "m=" | |||
section MUST still be processed as usual by the RTP layer, which | section MUST still be processed as usual by the RTP layer, which | |||
updates the metadata associated with the corresponding RTP streams. | updates the metadata associated with the corresponding RTP streams. | |||
This situation can occur with certain multiparty RTP topologies or | This situation can occur with certain multiparty RTP topologies or | |||
when RTCP packets are sent containing a subset of the SDES | when RTCP packets are sent containing a subset of the SDES | |||
information. | information. | |||
skipping to change at page 30, line 49 ¶ | skipping to change at line 1398 ¶ | |||
packet, the SSRC to "m=" section mapping might not exist until the | 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 | SDES packet is handled (e.g., in the case where RTCP for a source | |||
is received before any RTP packets). Therefore, it can be | is received before any RTP packets). Therefore, it can be | |||
beneficial for an implementation to delay RTCP packet routing, | beneficial for an implementation to delay RTCP packet routing, | |||
such that it either prioritizes processing of the SDES item to | such that it either prioritizes processing of the SDES item to | |||
generate or update the mapping or buffers the RTCP information | generate or update the mapping or buffers the RTCP information | |||
that needs to be routed until the SDES item(s) has been processed. | that needs to be routed until the SDES item(s) has been processed. | |||
If the implementation is unable to follow this recommendation, the | If the implementation is unable to follow this recommendation, the | |||
consequence could be that some RTCP information from this | consequence could be that some RTCP information from this | |||
particular RTCP compound packet is not provided to higher layers. | particular RTCP compound packet is not provided to higher layers. | |||
The impact from this is likely minor, when this information | The impact from this is likely minor when this information relates | |||
relates to a future incoming RTP stream. | to a future incoming RTP stream. | |||
* If the RTCP packet is of type BYE, it indicates that the RTP | * If the RTCP packet is of type BYE, it indicates that the RTP | |||
streams referenced in the packet are ending. Therefore, for each | streams referenced in the packet are ending. Therefore, for each | |||
SSRC indicated in the packet that is found in the incoming SSRC | 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 | 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 | associated with that SSRC, and then remove the entry for that SSRC | |||
from the incoming SSRC table after an appropriate delay to account | from the incoming SSRC table after an appropriate delay to account | |||
for "straggler packets", as specified in [RFC3550], Section 6.2.1. | for "straggler packets", as specified in [RFC3550], Section 6.2.1. | |||
* If the RTCP packet is of type Sender Report (SR) or Receiver | * If the RTCP packet is of type sender report (SR) or receiver | |||
Report (RR), for each report block in the report whose "SSRC of | 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 | 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 | 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 | 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 | packet is found in the incoming SSRC table, deliver a copy of the | |||
SR packet to the "m=" section associated with that SSRC. | SR packet to the "m=" section associated with that SSRC. | |||
* If the implementation supports the RTCP Extended Report (XR) and | * If the implementation supports the RTCP Extended Report (XR) and | |||
the packet is of type XR, as defined in [RFC3611], for each report | the packet is of type XR, as defined in [RFC3611], for each report | |||
block in the report whose "SSRC of source" is found in the | 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=" | outgoing SSRC table, deliver a copy of the XR packet to the "m=" | |||
section associated with that SSRC. In addition, if the sender | section associated with that SSRC. In addition, if the sender | |||
SSRC for the packet is found in the incoming SSRC table, deliver a | 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 | copy of the XR packet to the "m=" section associated with that | |||
skipping to change at page 31, line 45 ¶ | skipping to change at line 1441 ¶ | |||
include a target SSRC(s) in a section called Feedback Control | include a target SSRC(s) in a section called Feedback Control | |||
Information (FCI). For these messages, the target SSRC(s) is used | Information (FCI). For these messages, the target SSRC(s) is used | |||
for routing. | for routing. | |||
* If the RTCP packet is a feedback packet that does not include | * If the RTCP packet is a feedback packet that does not include | |||
target SSRCs in its FCI section, and the media source SSRC is | target SSRCs in its FCI section, and the media source SSRC is | |||
found in the outgoing SSRC table, deliver the feedback packet to | found in the outgoing SSRC table, deliver the feedback packet to | |||
the "m=" section associated with that SSRC. RTPFB and PSFB types | the "m=" section associated with that SSRC. RTPFB and PSFB types | |||
that are handled in this way include: | that are handled in this way include: | |||
Generic NACK: (PT=RTPFB, FMT=1) [RFC4585]. | Generic NACK: (PT=RTPFB, FMT=1) [RFC4585] | |||
Picture Loss Indication (PLI): (PT=PSFB, FMT=1) [RFC4585]. | Picture Loss Indication (PLI): (PT=PSFB, FMT=1) [RFC4585] | |||
Slice Loss Indication (SLI): (PT=PSFB, FMT=2) [RFC4585]. | Slice Loss Indication (SLI): (PT=PSFB, FMT=2) [RFC4585] | |||
Reference Picture Selection Indication (RPSI): (PT=PSFB, | Reference Picture Selection Indication (RPSI): (PT=PSFB, FMT=3) | |||
FMT=3) [RFC4585]. | [RFC4585] | |||
* If the RTCP packet is a feedback message that does include a | * 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 | 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 | notification. Requests reference an RTP stream that is being sent | |||
by the message recipient, whereas notifications are responses to | by the message recipient, whereas notifications are responses to | |||
an earlier request and therefore reference an RTP stream that is | an earlier request and therefore reference an RTP stream that is | |||
being received by the message recipient. | being received by the message recipient. | |||
* If the RTCP packet is a feedback request that includes a target | * 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 | 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 | table, deliver a copy of the RTCP packet to the "m=" section | |||
associated with that SSRC. PSFB and RTPFB types that are handled | associated with that SSRC. PSFB and RTPFB types that are handled | |||
in this way include: | in this way include: | |||
Full Intra Request (FIR): (PT=PSFB, FMT=4) [RFC5104]. | Full Intra Request (FIR): (PT=PSFB, FMT=4) [RFC5104] | |||
Temporal-Spatial Trade-off Request (TSTR): (PT=PSFB, FMT=5) | Temporal-Spatial Trade-off Request (TSTR): (PT=PSFB, FMT=5) | |||
[RFC5104]. | [RFC5104] | |||
H.271 Video Back Channel Message (VBCM): (PT=PSFB, FMT=7) | H.271 Video Back Channel Message (VBCM): (PT=PSFB, FMT=7) | |||
[RFC5104]. | [RFC5104] | |||
Temporary Maximum Media Stream Bit Rate Request (TMMBR): (PT=R | Temporary Maximum Media Stream Bit Rate Request (TMMBR): (PT=RTPF | |||
TPFB, FMT=3) [RFC5104]. | B, FMT=3) [RFC5104] | |||
Layer Refresh Request (LRR): (PT=PSFB, FMT=10) [LLR-RTCP]. | Layer Refresh Request (LRR): (PT=PSFB, FMT=10) [LLR-RTCP]. | |||
* If the RTCP packet is a feedback notification that includes a | * If the RTCP packet is a feedback notification that includes a | |||
target SSRC(s), for each target SSRC that is found in the incoming | 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 | SSRC table, deliver a copy of the RTCP packet to the "m=" section | |||
associated with the RTP stream with a matching SSRC. PSFB and | associated with the RTP stream with a matching SSRC. PSFB and | |||
RTPFB types that are handled in this way include: | RTPFB types that are handled in this way include: | |||
Temporal-Spatial Trade-off Notification (TSTN): (PT=PSFB, | Temporal-Spatial Trade-off Notification (TSTN): (PT=PSFB, FMT=6) | |||
FMT=6) [RFC5104]. This message is a notification in | [RFC5104]. This message is a notification in response to a | |||
response to a prior TSTR. | prior TSTR. | |||
Temporary Maximum Media Stream Bit Rate Notification | Temporary Maximum Media Stream Bit Rate Notification (TMMBN): (PT | |||
(TMMBN): (PT=RTPFB, FMT=4) [RFC5104]. This message is a | =RTPFB, FMT=4) [RFC5104]. This message is a notification in | |||
notification in response to a prior TMMBR, but it can also | response to a prior TMMBR, but it can also be sent unsolicited. | |||
be sent unsolicited. | ||||
If the RTCP packet is of type APP, then it is handled in an | If the RTCP packet is of type APP, then it is handled in an | |||
application-specific manner. If the application does not | application-specific manner. If the application does not | |||
recognize the APP packet, then it MUST be discarded. | recognize the APP packet, then it MUST be discarded. | |||
9.3. RTP/RTCP Multiplexing | 9.3. RTP/RTCP Multiplexing | |||
Within a BUNDLE group, the offerer and answerer MUST enable RTP/RTCP | Within a BUNDLE group, the offerer and answerer MUST enable RTP/RTCP | |||
multiplexing [RFC5761] for the RTP-based bundled media (i.e., the | multiplexing [RFC5761] for the RTP-based bundled media (i.e., the | |||
same transport will be used for both RTP packets and RTCP packets). | same transport will be used for both RTP packets and RTCP packets). | |||
In addition, the offerer and answerer MUST support the SDP 'rtcp-mux- | In addition, the offerer and answerer MUST support the SDP 'rtcp-mux- | |||
only' attribute [RFC8858]. | only' attribute [RFC8858]. | |||
9.3.1. SDP Offer/Answer Procedures | 9.3.1. SDP Offer/Answer Procedures | |||
This section describes how an offerer and answerer use the SDP 'rtcp- | This section describes how an offerer and answerer use the SDP 'rtcp- | |||
mux' [RFC5761] and SDP 'rtcp-mux-only' attributes [RFC8858] to | mux' [RFC5761] and SDP 'rtcp-mux-only' attributes [RFC8858] to | |||
negotiate usage of RTP/RTCP multiplexing for RTP-based bundled media. | negotiate usage of RTP/RTCP multiplexing for RTP-based bundled media. | |||
RTP/RTCP multiplexing only applies to RTP-based media. However, as | RTP/RTCP multiplexing only applies to RTP-based media. However, as | |||
described in Section 7.1.3, within an offer or answer the SDP 'rtcp- | described in Section 7.1.3, within an offer or answer, the SDP 'rtcp- | |||
mux' and SDP 'rtcp-mux-only' attributes might be included in a | 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 | bundled "m=" section for non-RTP-based media (if such an "m=" section | |||
the offerer-tagged "m=" section or answerer-tagged "m=" section). | is the offerer-tagged "m=" section or answerer-tagged "m=" section). | |||
9.3.1.1. Generating the Initial BUNDLE offer | 9.3.1.1. Generating the Initial BUNDLE Offer | |||
When an offerer generates an initial BUNDLE offer, if the offer | When an offerer generates an initial BUNDLE offer, if the offer | |||
contains one or more bundled "m=" sections for RTP-based media (or, | contains one or more bundled "m=" sections for RTP-based media (or if | |||
if there is a chance that "m=" sections for RTP-based media will | there is a chance that "m=" sections for RTP-based media will later | |||
later be added to the BUNDLE group), the offerer MUST include an SDP | be added to the BUNDLE group), the offerer MUST include an SDP 'rtcp- | |||
'rtcp-mux' attribute [RFC5761] in each bundled "m=" section | mux' attribute [RFC5761] in each bundled "m=" section (excluding any | |||
(excluding any bundle-only "m=" sections). In addition, the offerer | bundle-only "m=" sections). In addition, the offerer MAY include an | |||
MAY include an SDP 'rtcp-mux-only' attribute [RFC8858] in one or more | SDP 'rtcp-mux-only' attribute [RFC8858] in one or more bundled "m=" | |||
bundled "m=" sections for RTP-based media. | sections for RTP-based media. | |||
NOTE: Whether the offerer includes the SDP 'rtcp-mux-only' attribute | NOTE: Whether the offerer includes the SDP 'rtcp-mux-only' | |||
depends on whether the offerer supports fallback to usage of a | attribute depends on whether the offerer supports fallback to | |||
separate port for RTCP in case the answerer moves one or more "m=" | usage of a separate port for RTCP in case the answerer moves one | |||
sections for RTP-based media out of the BUNDLE group in the answer. | 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 | NOTE: If the offerer includes an SDP 'rtcp-mux' attribute in the | |||
bundled "m=" sections, but does not include an SDP 'rtcp-mux-only' | bundled "m=" sections but does not include an SDP 'rtcp-mux-only' | |||
attribute, the offerer can also include an SDP 'rtcp' attribute | attribute, the offerer can also include an SDP 'rtcp' attribute | |||
[RFC3605] in one or more RTP-based bundled "m=" sections in order to | [RFC3605] in one or more RTP-based bundled "m=" sections in order | |||
provide a fallback port for RTCP, as described in [RFC5761]. | to provide a fallback port for RTCP, as described in [RFC5761]. | |||
However, the fallback port will only be applied to "m=" sections for | However, the fallback port will only be applied to "m=" sections | |||
RTP-based media that are moved out of the BUNDLE group by the | for RTP-based media that are moved out of the BUNDLE group by the | |||
answerer. | answerer. | |||
In the initial BUNDLE offer, the address:port combination for RTCP | In the initial BUNDLE offer, the address:port combination for RTCP | |||
MUST be unique in each bundled "m=" section for RTP-based media | MUST be unique in each bundled "m=" section for RTP-based media | |||
(excluding a bundle-only "m=" section), similar to RTP. | (excluding a bundle-only "m=" section), similar to RTP. | |||
9.3.1.2. Generating the SDP Answer | 9.3.1.2. Generating the SDP Answer | |||
When an answerer generates an answer, if the answerer supports RTP- | When an answerer generates an answer, if the answerer supports RTP- | |||
based media, and if a bundled "m=" section in the corresponding offer | based media and if a bundled "m=" section in the corresponding offer | |||
contained an SDP 'rtcp-mux' attribute, the answerer MUST enable usage | contained an SDP 'rtcp-mux' attribute, the answerer MUST enable usage | |||
of RTP/RTCP multiplexing, even if there currently are no bundled "m=" | of RTP/RTCP multiplexing, even if there currently are no bundled "m=" | |||
sections for RTP-based media within the BUNDLE group. The answerer | sections for RTP-based media within the BUNDLE group. The answerer | |||
MUST include an SDP 'rtcp-mux' attribute in the answerer-tagged "m=" | MUST include an SDP 'rtcp-mux' attribute in the answerer-tagged "m=" | |||
section, following the procedures for BUNDLE attributes | section, following the procedures for BUNDLE attributes | |||
(Section 7.1.3). In addition, if the "m=" section that is selected | (Section 7.1.3). In addition, if the "m=" section that is selected | |||
as the offerer-tagged "m=" section contained an SDP 'rtcp-mux-only' | as the offerer-tagged "m=" section contained an SDP 'rtcp-mux-only' | |||
attribute, the answerer MUST include an SDP 'rtcp-mux-only' attribute | attribute, the answerer MUST include an SDP 'rtcp-mux-only' attribute | |||
in the answerer-tagged "m=" section. | in the answerer-tagged "m=" section. | |||
In an initial BUNDLE offer, if the suggested offerer-tagged "m=" | In an initial BUNDLE offer, if the suggested offerer-tagged "m=" | |||
section contained an SDP 'rtcp-mux-only' attribute, the "m=" section | section contained an SDP 'rtcp-mux-only' attribute, the "m=" section | |||
was for RTP-based media. If the answerer does not accept the "m=" | was for RTP-based media. If the answerer does not accept the "m=" | |||
section in the created BUNDLE group, and moves the "m=" section out | section in the created BUNDLE group and moves the "m=" section out of | |||
of the BUNDLE group (Section 7.3.2), the answerer MUST include the | the BUNDLE group (Section 7.3.2), the answerer MUST include the | |||
attribute in the moved "m=" section and enable RTP/RTCP multiplexing | attribute in the moved "m=" section and enable RTP/RTCP multiplexing | |||
for the media associated with the "m=" section. If the answerer | for the media associated with the "m=" section. If the answerer | |||
rejects the "m=" section (Section 7.3.3) the answerer MUST NOT | rejects the "m=" section (Section 7.3.3), the answerer MUST NOT | |||
include the attribute. | include the attribute. | |||
The answerer MUST NOT include an SDP 'rtcp' attribute in any bundled | 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 | "m=" section in the answer. The answerer will use the port value of | |||
the offerer-tagged "m=" section sending RTP and RTCP packets | the offerer-tagged "m=" section sending RTP and RTCP packets | |||
associated with RTP-based bundled media towards the offerer. | associated with RTP-based bundled media towards the offerer. | |||
If the usage of RTP/RTCP multiplexing within a BUNDLE group has been | If the usage of RTP/RTCP multiplexing within a BUNDLE group has been | |||
negotiated in a previous offer/answer exchange, the answerer MUST | negotiated in a previous offer/answer exchange, the answerer MUST | |||
include an SDP 'rtcp-mux' attribute in the answerer-tagged "m=" | include an SDP 'rtcp-mux' attribute in the answerer-tagged "m=" | |||
skipping to change at page 34, line 49 ¶ | skipping to change at line 1588 ¶ | |||
9.3.1.3. Offerer Processing of the SDP Answer | 9.3.1.3. Offerer Processing of the SDP Answer | |||
When an offerer receives an answer, if the answerer has accepted the | When an offerer receives an answer, if the answerer has accepted the | |||
usage of RTP/RTCP multiplexing (Section 9.3.1.2), the answerer | usage of RTP/RTCP multiplexing (Section 9.3.1.2), the answerer | |||
follows the procedures for RTP/RTCP multiplexing defined in | follows the procedures for RTP/RTCP multiplexing defined in | |||
[RFC5761]. The offerer will use the port value of the answerer- | [RFC5761]. The offerer will use the port value of the answerer- | |||
tagged "m=" section for sending RTP and RTCP packets associated with | tagged "m=" section for sending RTP and RTCP packets associated with | |||
RTP-based bundled media towards the answerer. | RTP-based bundled media towards the answerer. | |||
NOTE: It is considered a protocol error if the answerer has not | NOTE: It is considered a protocol error if the answerer has not | |||
accepted the usage of RTP/RTCP multiplexing for RTP-based "m=" | accepted the usage of RTP/RTCP multiplexing for RTP-based "m=" | |||
sections that the answerer included in the BUNDLE group. | sections that the answerer included in the BUNDLE group. | |||
9.3.1.4. Modifying the Session | 9.3.1.4. Modifying the Session | |||
When an offerer generates a subsequent offer, the offerer MUST | When an offerer generates a subsequent offer, the offerer MUST | |||
include an SDP 'rtcp-mux' attribute in the offerer-tagged "m=" | include an SDP 'rtcp-mux' attribute in the offerer-tagged "m=" | |||
section, following the procedures for IDENTICAL multiplexing category | section, following the procedures for IDENTICAL multiplexing category | |||
attributes in Section 7.1.3. | attributes in Section 7.1.3. | |||
10. ICE Considerations | 10. ICE Considerations | |||
skipping to change at page 35, line 33 ¶ | skipping to change at line 1620 ¶ | |||
transport, instead of per individual bundled "m=" section within | transport, instead of per individual bundled "m=" section within | |||
the BUNDLE group. | the BUNDLE group. | |||
* The generic SDP attribute offer/answer considerations | * The generic SDP attribute offer/answer considerations | |||
(Section 7.1.3) also apply to ICE-related attributes. Therefore, | (Section 7.1.3) also apply to ICE-related attributes. Therefore, | |||
when an offerer sends an initial BUNDLE offer (in order to | when an offerer sends an initial BUNDLE offer (in order to | |||
negotiate a BUNDLE group), the offerer includes ICE-related media- | negotiate a BUNDLE group), the offerer includes ICE-related media- | |||
level attributes in each bundled "m=" section (excluding any | level attributes in each bundled "m=" section (excluding any | |||
bundle-only "m=" sections), and each "m=" section MUST contain | bundle-only "m=" sections), and each "m=" section MUST contain | |||
unique ICE properties. When an answerer generates an answer | unique ICE properties. When an answerer generates an answer | |||
(initial BUNDLE answer or subsequent) that contains a BUNDLE | (initial BUNDLE answer or subsequent) that contains a BUNDLE group | |||
group, and when an offerer sends a subsequent offer that contains | and when an offerer sends a subsequent offer that contains a | |||
a BUNDLE group, ICE-related media-level attributes are only | BUNDLE group, ICE-related media-level attributes are only included | |||
included in the tagged "m=" section (suggested offerer-tagged "m=" | in the tagged "m=" section (suggested offerer-tagged "m=" section | |||
section or answerer-tagged "m=" section), and the ICE properties | or answerer-tagged "m=" section), and the ICE properties are | |||
are applied to each bundled "m=" section within the BUNDLE group. | applied to each bundled "m=" section within the BUNDLE group. | |||
NOTE: Most ICE-related media-level SDP attributes belong to the | NOTE: Most ICE-related media-level SDP attributes belong to the | |||
TRANSPORT multiplexing category [RFC8859], and the generic SDP | TRANSPORT multiplexing category [RFC8859], and the generic SDP | |||
attribute offer/answer considerations for the TRANSPORT multiplexing | attribute offer/answer considerations for the TRANSPORT | |||
category apply to the attributes. However, in the case of ICE- | multiplexing category apply to the attributes. However, in the | |||
related attributes, the same considerations also apply to ICE-related | case of ICE-related attributes, the same considerations also apply | |||
media-level attributes that belong to other multiplexing categories. | to ICE-related media-level attributes that belong to other | |||
multiplexing categories. | ||||
NOTE: The following ICE-related media-level SDP attributes are | NOTE: The following ICE-related media-level SDP attributes are | |||
defined in [RFC8839]: 'candidate', 'remote-candidates', 'ice- | defined in [RFC8839]: 'candidate', 'remote-candidates', 'ice- | |||
mismatch', 'ice-ufrag', 'ice-pwd', and 'ice-pacing'. | mismatch', 'ice-ufrag', 'ice-pwd', and 'ice-pacing'. | |||
Initially, before ICE has produced selected candidate pairs that will | Initially, before ICE has produced selected candidate pairs that will | |||
be used for media, there might be multiple transports established (if | be used for media, there might be multiple transports established (if | |||
multiple candidate pairs are tested). Once ICE has selected | multiple candidate pairs are tested). Once ICE has selected | |||
candidate pairs, they form the BUNDLE transport. | candidate pairs, they form the BUNDLE transport. | |||
Support and usage of the ICE mechanism together with the BUNDLE | Support and usage of the ICE mechanism together with the BUNDLE | |||
extension is OPTIONAL, and the procedures in this section only apply | extension is OPTIONAL, and the procedures in this section only apply | |||
when the ICE mechanism is used. Note that applications might mandate | when the ICE mechanism is used. Note that applications might mandate | |||
usage of the ICE mechanism even if the BUNDLE extension is not used. | usage of the ICE mechanism even if the BUNDLE extension is not used. | |||
NOTE: If the Trickle ICE mechanism [RFC8840] is used, an offerer and | NOTE: If the Trickle ICE mechanism [RFC8840] is used, an offerer | |||
answerer might assign a port value of '9' and an IPv4 address of | and answerer might assign a port value of '9' and an IPv4 address | |||
'0.0.0.0' (or, the IPv6 equivalent '::') to multiple bundled "m=" | of '0.0.0.0' (or, the IPv6 equivalent '::') to multiple bundled | |||
sections in the initial BUNDLE offer. The offerer and answerer will | "m=" sections in the initial BUNDLE offer. The offerer and | |||
follow the normal procedures for generating the offers and answers, | answerer will follow the normal procedures for generating the | |||
including picking a bundled "m=" section as the suggested offerer- | offers and answers, including picking a bundled "m=" section as | |||
tagged "m=" section, selecting the tagged "m=" sections, etc. The | the suggested offerer-tagged "m=" section, selecting the tagged | |||
only difference is that media cannot be sent until one or more | "m=" sections, etc. The only difference is that media cannot be | |||
candidates have been provided. Once a BUNDLE group has been | sent until one or more candidates have been provided. Once a | |||
negotiated, trickled candidates associated with a bundled "m=" | BUNDLE group has been negotiated, trickled candidates associated | |||
section will be applied to all bundled "m=" sections within the | with a bundled "m=" section will be applied to all bundled "m=" | |||
BUNDLE group. | sections within the BUNDLE group. | |||
11. DTLS Considerations | 11. DTLS Considerations | |||
One or more media streams within a BUNDLE group might use the | One or more media streams within a BUNDLE group might use the DTLS | |||
Datagram Transport Layer Security (DTLS) protocol [RFC6347] in order | protocol [RFC6347] in order to encrypt the data or negotiate | |||
to encrypt the data or negotiate encryption keys if another | encryption keys if another encryption mechanism is used to encrypt | |||
encryption mechanism is used to encrypt media. | media. | |||
When DTLS is used within a BUNDLE group, the following rules apply: | When DTLS is used within a BUNDLE group, the following rules apply: | |||
* There can only be one DTLS association [RFC6347] associated with | * There can only be one DTLS association [RFC6347] associated with | |||
the BUNDLE group; | the BUNDLE group; | |||
* Each usage of the DTLS association within the BUNDLE group MUST | * Each usage of the DTLS association within the BUNDLE group MUST | |||
use the same mechanism for determining which endpoints (the | use the same mechanism for determining which endpoints (the | |||
offerer or answerer) become DTLS client and DTLS server; | offerer or answerer) become DTLS client and DTLS server; | |||
* Each usage of the DTLS association within the BUNDLE group MUST | * Each usage of the DTLS association within the BUNDLE group MUST | |||
use the same mechanism for determining whether an offer or answer | use the same mechanism for determining whether an offer or answer | |||
will trigger the establishment of a new DTLS association or an | will trigger the establishment of a new DTLS association or if an | |||
existing DTLS association will be used; and | existing DTLS association will be used instead; and | |||
* If the DTLS client supports DTLS-SRTP, it MUST include the | * If the DTLS client supports DTLS-SRTP, it MUST include the | |||
'use_srtp' extension in the DTLS ClientHello message [RFC5764]. | 'use_srtp' extension in the DTLS ClientHello message [RFC5764]. | |||
The client MUST include the extension even if the usage of DTLS- | The client MUST include the extension even if the usage of DTLS- | |||
SRTP is not negotiated as part of the multimedia session (e.g., | SRTP is not negotiated as part of the multimedia session (e.g., | |||
the SIP session [RFC3261]). | the SIP session [RFC3261]). | |||
NOTE: The inclusion of the 'use_srtp' extension during the initial | NOTE: The inclusion of the 'use_srtp' extension during the initial | |||
DTLS handshake ensures that a DTLS renegotiation will not be required | DTLS handshake ensures that a DTLS renegotiation will not be | |||
in order to include the extension, in case DTLS-SRTP encrypted media | required in order to include the extension in case DTLS-SRTP | |||
is added to the BUNDLE group later during the multimedia session. | encrypted media is added to the BUNDLE group later during the | |||
multimedia session. | ||||
12. RTP Header Extensions Consideration | 12. RTP Header Extensions Consideration | |||
When RTP header extensions [RFC8285] are used in the context of this | When RTP header extensions [RFC8285] are used in the context of this | |||
specification, the identifier used for a given extension MUST | specification, the identifier used for a given extension MUST | |||
identify the same extension across all the bundled media | identify the same extension across all the bundled media | |||
descriptions. | descriptions. | |||
13. Update to RFC 3264 | 13. Updates to RFC 3264 | |||
This section updates RFC 3264, in order to allow extensions to define | This section updates [RFC3264] in order to allow extensions to define | |||
the usage of a zero port value in offers and answers for purposes | the usage of a zero port value in offers and answers for purposes | |||
other than removing or disabling media streams. The following | other than removing or disabling media streams. The following | |||
sections are being updated: | sections are being updated: | |||
* "Unicast Streams"; see Section 5.1 of [RFC3264] | * "Unicast Streams"; see Section 5.1 of [RFC3264]. | |||
* "Putting a Unicast Media Stream on Hold"; see Section 8.4 of | * "Putting a Unicast Media Stream on Hold"; see Section 8.4 of | |||
[RFC3264]. | [RFC3264]. | |||
13.1. Original Text from RFC 3264, Section 5.1, 2nd Paragraph | 13.1. Original Text from RFC 3264, Section 5.1, Paragraph 2 | |||
| For recvonly and sendrecv streams, the port number and address in | | For recvonly and sendrecv streams, the port number and address in | |||
| the offer indicate where the offerer would like to receive the | | the offer indicate where the offerer would like to receive the | |||
| media stream. For sendonly RTP streams, the address and port | | media stream. For sendonly RTP streams, the address and port | |||
| number indirectly indicate where the offerer wants to receive RTCP | | number indirectly indicate where the offerer wants to receive RTCP | |||
| reports. Unless there is an explicit indication otherwise, | | reports. Unless there is an explicit indication otherwise, | |||
| reports are sent to the port number one higher than the number | | reports are sent to the port number one higher than the number | |||
| indicated. The IP address and port present in the offer indicate | | indicated. The IP address and port present in the offer indicate | |||
| nothing about the source IP address and source port of RTP and | | 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 | | 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 | | zero in the offer indicates that the stream is offered but MUST | |||
| NOT be used. This has no useful semantics in an initial offer, | | NOT be used. This has no useful semantics in an initial offer, | |||
| but is allowed for reasons of completeness, since the answer can | | but is allowed for reasons of completeness, since the answer can | |||
| contain a zero port indicating a rejected stream (Section 6). | | contain a zero port indicating a rejected stream (Section 6). | |||
| Furthermore, existing streams can be terminated by setting the | | Furthermore, existing streams can be terminated by setting the | |||
| port to zero (Section 8). In general, a port number of zero | | port to zero (Section 8). In general, a port number of zero | |||
| indicates that the media stream is not wanted. | | indicates that the media stream is not wanted. | |||
13.2. New Text Replacing RFC 3264, Section 5.1, 2nd Paragraph | 13.2. New Text Replacing RFC 3264, Section 5.1, Paragraph 2 | |||
For recvonly and sendrecv streams, the port number and address in the | | For recvonly and sendrecv streams, the port number and address in | |||
offer indicate where the offerer would like to receive the media | | the offer indicate where the offerer would like to receive the | |||
stream. For sendonly RTP streams, the address and port number | | media stream. For sendonly RTP streams, the address and port | |||
indirectly indicate where the offerer wants to receive RTCP reports. | | number indirectly indicate where the offerer wants to receive RTCP | |||
Unless there is an explicit indication otherwise, reports are sent to | | reports. Unless there is an explicit indication otherwise, | |||
the port number one higher than the number indicated. The IP address | | reports are sent to the port number one higher than the number | |||
and port present in the offer indicate nothing about the source IP | | indicated. The IP address and port present in the offer indicate | |||
address and source port of the RTP and RTCP packets that will be sent | | nothing about the source IP address and source port of the RTP and | |||
by the offerer. By default, a port number of zero in the offer | | RTCP packets that will be sent by the offerer. By default, a port | |||
indicates that the stream is offered but MUST NOT be used, but an | | number of zero in the offer indicates that the stream is offered | |||
extension mechanism might specify different semantics for the usage | | but MUST NOT be used, but an extension mechanism might specify | |||
of a zero port value. Furthermore, existing streams can be | | different semantics for the usage of a zero port value. | |||
terminated by setting the port to zero (Section 8). In general, a | | Furthermore, existing streams can be terminated by setting the | |||
port number of zero by default indicates that the media stream is not | | port to zero (Section 8). In general, a port number of zero by | |||
wanted. | | default indicates that the media stream is not wanted. | |||
13.3. Original Text from RFC 3264, Section 8.4, 6th Paragraph | 13.3. Original Text from RFC 3264, Section 8.4, Paragraph 6 | |||
| RFC 2543 [10] specified that placing a user on hold was | | RFC 2543 [10] specified that placing a user on hold was | |||
| accomplished by setting the connection address to 0.0.0.0. Its | | accomplished by setting the connection address to 0.0.0.0. Its | |||
| usage for putting a call on hold is no longer recommended, since | | 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 | | it doesn't allow for RTCP to be used with held streams, doesn't | |||
| work with IPv6, and breaks with connection oriented media. | | work with IPv6, and breaks with connection oriented media. | |||
| However, it can be useful in an initial offer when the offerer | | However, it can be useful in an initial offer when the offerer | |||
| knows it wants to use a particular set of media streams and | | 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 | | 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 | | the offer. Of course, when used, the port number MUST NOT be | |||
| zero, which would specify that the stream has been disabled. An | | zero, which would specify that the stream has been disabled. An | |||
| agent MUST be capable of receiving SDP with a connection address | | 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 | | of 0.0.0.0, in which case it means that neither RTP nor RTCP | |||
| should be sent to the peer. | | should be sent to the peer. | |||
13.4. New Text Replacing RFC 3264, Section 8.4, 6th Paragraph | 13.4. New Text Replacing RFC 3264, Section 8.4, Paragraph 6 | |||
RFC 2543 [RFC2543] specifies that placing a user on hold was | | RFC 2543 [RFC2543] specifies that placing a user on hold was | |||
accomplished by setting the connection address to 0.0.0.0. Its usage | | accomplished by setting the connection address to 0.0.0.0. Its | |||
for putting a call on hold is no longer recommended, since it doesn't | | usage for putting a call on hold is no longer recommended, since | |||
allow for RTCP to be used with held streams, doesn't work with IPv6, | | it doesn't allow for RTCP to be used with held streams, doesn't | |||
and breaks with connection oriented media. However, it can be useful | | work with IPv6, and breaks with connection oriented media. | |||
in an initial offer when the offerer knows it wants to use a | | However, it can be useful in an initial offer when the offerer | |||
particular set of media streams and formats, but doesn't know the | | knows it wants to use a particular set of media streams and | |||
addresses and ports at the time of the offer. Of course, when used, | | formats, but doesn't know the addresses and ports at the time of | |||
the port number MUST NOT be zero, if it would specify that the stream | | the offer. Of course, when used, the port number MUST NOT be | |||
has been disabled. However, an extension mechanism might specify | | zero, if it would specify that the stream has been disabled. | |||
different semantics of the zero port number usage. An agent MUST be | | However, an extension mechanism might specify different semantics | |||
capable of receiving SDP with a connection address of 0.0.0.0, in | | of the zero port number usage. An agent MUST be capable of | |||
which case it means that neither RTP nor RTCP is to be sent to the | | receiving SDP with a connection address of 0.0.0.0, in which case | |||
peer. | | it means that neither RTP nor RTCP is to be sent to the peer. | |||
14. Update to RFC 5888 | 14. Update to RFC 5888 | |||
This section updates RFC 5888 [RFC5888], in order for extensions to | This section updates RFC 5888 [RFC5888] in order for extensions to | |||
allow an SDP 'group' attribute containing an identification-tag that | allow an SDP 'group' attribute containing an identification-tag that | |||
identifies an "m=" section with the port set to zero. "Group Value | identifies an "m=" section with the port set to zero. "Group Value | |||
in Answers" (Section 9.2 of [RFC5888]) is updated. | in Answers" (Section 9.2 of [RFC5888]) is updated. | |||
14.1. Original Text from RFC 5888, Section 9.2, 3rd Paragraph | 14.1. Original Text from RFC 5888, Section 9.2, Paragraph 3 | |||
| SIP entities refuse media streams by setting the port to zero in | | SIP entities refuse media streams by setting the port to zero in | |||
| the corresponding "m" line. "a=group" lines MUST NOT contain | | the corresponding "m" line. "a=group" lines MUST NOT contain | |||
| identification-tags that correspond to "m" lines with the port set | | identification-tags that correspond to "m" lines with the port set | |||
| to zero. | | to zero. | |||
14.2. New Text Replacing RFC 5888, Section 9.2, 3rd Paragraph | 14.2. New Text Replacing RFC 5888, Section 9.2, Paragraph 3 | |||
SIP entities refuse media streams by setting the port to zero in the | | SIP entities refuse media streams by setting the port to zero in | |||
corresponding "m" line. "a=group" lines MUST NOT contain | | the corresponding "m" line. "a=group" lines MUST NOT contain | |||
identification-tags that correspond to "m" lines with the port set to | | identification-tags that correspond to "m" lines with the port set | |||
zero, but an extension mechanism might specify different semantics | | to zero, but an extension mechanism might specify different | |||
for including identification-tags that correspond to such "m=" lines. | | semantics for including identification-tags that correspond to | |||
| such "m=" lines. | ||||
15. RTP/RTCP Extensions for identification-tag Transport | 15. RTP/RTCP Extensions for identification-tag Transport | |||
Offerers and answerers [RFC3264] can associate identification-tags | Offerers and answerers [RFC3264] can associate identification-tags | |||
with "m=" sections within offers and answers, using the procedures in | with "m=" sections within offers and answers using the procedures in | |||
[RFC5888]. Each identification-tag uniquely represents an "m=" | [RFC5888]. Each identification-tag uniquely represents an "m=" | |||
section. | section. | |||
This section defines a new RTCP SDES item [RFC3550], 'MID', which is | This section defines a new RTCP SDES item [RFC3550], 'MID', which is | |||
used to carry identification-tags within RTCP SDES packets. This | used to carry identification-tags within RTCP SDES packets. This | |||
section also defines a new RTP SDES header extension [RFC7941], which | section also defines a new RTP SDES header extension [RFC7941], which | |||
is used to carry the 'MID' RTCP SDES item in RTP packets. | 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 | The SDES item and RTP SDES header extension make it possible for a | |||
receiver to associate each RTP stream with a specific "m=" section, | receiver to associate each RTP stream with a specific "m=" section | |||
with which the receiver has associated an identification-tag, even if | with which the receiver has associated an identification-tag, even if | |||
those "m=" sections are part of the same RTP session. The RTP SDES | those "m=" sections are part of the same RTP session. The RTP SDES | |||
header extension also ensures that the media recipient gets the | header extension also ensures that the media recipient gets the | |||
identification-tag upon receipt of the first decodable media and is | identification-tag upon receipt of the first decodable media and is | |||
able to associate the media with the correct application. | able to associate the media with the correct application. | |||
A media recipient informs the media sender about the identification- | A media recipient informs the media sender about the identification- | |||
tag associated with an "m=" section through the use of a 'mid' | tag associated with an "m=" section through the use of a 'mid' | |||
attribute [RFC5888]. The media sender then inserts the | attribute [RFC5888]. The media sender then inserts the | |||
identification-tag in RTCP and RTP packets sent to the media | identification-tag in RTCP and RTP packets sent to the media | |||
recipient. | recipient. | |||
NOTE: The text above defines how identification-tags are carried in | NOTE: The text above defines how identification-tags are carried | |||
offers and answers. The usage of other signaling protocols for | in offers and answers. The usage of other signaling protocols for | |||
carrying identification-tags is not prevented, but the usage of such | carrying identification-tags is not prevented, but the usage of | |||
protocols is outside the scope of this document. | such protocols is outside the scope of this document. | |||
[RFC3550] defines general procedures regarding the RTCP transmission | [RFC3550] defines general procedures regarding the RTCP transmission | |||
interval. The RTCP MID SDES item SHOULD be sent in the first few | interval. The RTCP MID SDES item SHOULD be sent in the first few | |||
RTCP packets after joining the session and SHOULD be sent regularly | RTCP packets after joining the session and SHOULD be sent regularly | |||
thereafter. The exact number of RTCP packets in which this SDES item | 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 | is sent is intentionally not specified here, as it will depend on the | |||
expected packet-loss rate, the RTCP reporting interval, and the | expected packet-loss rate, the RTCP reporting interval, and the | |||
allowable overhead. | allowable overhead. | |||
The RTP SDES header extension for carrying the 'MID' RTCP SDES SHOULD | The RTP SDES header extension for carrying the 'MID' RTCP SDES SHOULD | |||
skipping to change at page 41, line 5 ¶ | skipping to change at line 1873 ¶ | |||
0 1 2 3 | 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 | 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 ... | | MID=15 | length | identification-tag ... | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
The identification-tag payload is UTF-8 encoded [RFC3629], as in SDP. | The identification-tag payload is UTF-8 encoded [RFC3629], as in SDP. | |||
The identification-tag is not zero terminated. | The identification-tag is not zero terminated. | |||
15.2. RTP SDES Header Extension For MID | 15.2. RTP SDES Header Extension for MID | |||
The payload, containing the identification-tag, of the RTP SDES | The payload, containing the identification-tag, of the RTP SDES | |||
header extension element can be encoded using either the 1-byte or | header extension element can be encoded using either the 1-byte or | |||
the 2-byte header [RFC7941]. The identification-tag payload is UTF-8 | the 2-byte header [RFC7941]. The identification-tag payload is UTF-8 | |||
encoded, as in SDP. | encoded, as in SDP. | |||
The identification-tag is not zero terminated. Note that the set of | The identification-tag is not zero terminated. Note that the set of | |||
header extensions included in the packet needs to be padded to the | header extensions included in the packet needs to be padded to the | |||
next 32-bit boundary using zero bytes [RFC8285]. | next 32-bit boundary using zero bytes [RFC8285]. | |||
skipping to change at page 41, line 27 ¶ | skipping to change at line 1895 ¶ | |||
SDES header extension, or both, there needs to be some consideration | SDES header extension, or both, there needs to be some consideration | |||
about the packet expansion caused by the identification-tag. To | about the packet expansion caused by the identification-tag. To | |||
avoid Maximum Transmission Unit (MTU) issues for the RTP packets, the | avoid Maximum Transmission Unit (MTU) issues for the RTP packets, the | |||
header extension's size needs to be taken into account when encoding | header extension's size needs to be taken into account when encoding | |||
the media. | the media. | |||
It is recommended that the identification-tag be kept short. Due to | It is recommended that the identification-tag be kept short. Due to | |||
the properties of the RTP header extension mechanism, when using the | 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 | 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 | 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, | case no other header extensions are included at the same time. Note: | |||
do take into account that some single characters when UTF-8 encoded | do take into account that some single characters when UTF-8 encoded | |||
will result in multiple octets. The identification-tag MUST NOT | will result in multiple octets. The identification-tag MUST NOT | |||
contain any user information, and applications SHALL avoid generating | contain any user information, and applications SHALL avoid generating | |||
the identification-tag using a pattern that enables user or | the identification-tag using a pattern that enables user or | |||
application identification. | application identification. | |||
16. IANA Considerations | 16. IANA Considerations | |||
16.1. New SDES Item | NOTE: Apart from the references, the IANA considerations in this | |||
section are identical to those in [RFC8843]. | ||||
This document updates the MID SDES item to the IANA "RTP SDES Item | ||||
Types" registry as follows: | ||||
Value: 15 | ||||
Abbrev.: MID | ||||
Name: Media Identification | ||||
Reference: RFC XXXX | ||||
16.2. New RTP SDES Header Extension URI | 16.1. SDES Item | |||
This document updates the extension URI in the RTP SDES Compact | This document updates the MID SDES entry in the "RTP SDES Item Types" | |||
Header Extensions sub-registry of the RTP Compact Header Extensions | registry as follows: | |||
registry sub-registry, according to the following data: | ||||
Extension URI: urn:ietf:params:rtp-hdrext:sdes:mid | Value: 15 | |||
Abbrev.: MID | ||||
Name: Media Identification | ||||
Reference: RFC 9143 | ||||
Description: Media identification | 16.2. RTP SDES Header Extension URI | |||
Contact: IESG (iesg@ietf.org) | This document updates the extension URI in the "RTP SDES Compact | |||
Header Extensions" subregistry of the "RTP Compact Header Extensions" | ||||
sub-registry, according to the following data: | ||||
Reference: RFC XXXX | Extension URI: urn:ietf:params:rtp-hdrext:sdes:mid | |||
Description: Media identification | ||||
Contact: IESG (iesg@ietf.org) | ||||
Reference: RFC 9143 | ||||
The SDES item does not reveal privacy information about the users. | The SDES item does not reveal privacy information about the users. | |||
It is simply used to associate RTP-based media with the correct SDP | 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 description ("m=" section) in the SDP used to negotiate the | |||
media. | media. | |||
The purpose of the extension is for the offerer to be able to | The purpose of the extension is for the offerer to be able to | |||
associate received multiplexed RTP-based media before the offerer | associate received multiplexed RTP-based media before the offerer | |||
receives the associated answer. | receives the associated answer. | |||
16.3. New SDP Attribute | 16.3. SDP Attribute | |||
This document updates the SDP media-level attribute, 'bundle-only', | This document updates the SDP media-level attribute, 'bundle-only', | |||
according to the following data: | in the "attribute-name (formerly 'att-field')" subregistry of the | |||
"Session Description Protocol (SDP) Parameters" registry according to | ||||
Attribute name: bundle-only | the following data: | |||
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 | 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 9143 | ||||
Mux category: NORMAL | ||||
16.4. New SDP Group Semantics | 16.4. SDP Group Semantics | |||
This document updates the following semantics in the "Semantics for | This document updates the following semantics in the "Semantics for | |||
the 'group' SDP Attribute" subregistry (under the "Session | the 'group' SDP Attribute" subregistry (under the "Session | |||
Description Protocol (SDP) Parameters" registry): | Description Protocol (SDP) Parameters" registry): | |||
+================+========+==============+===========+ | +================+========+==============+===========+ | |||
| Semantics | Token | Mux Category | Reference | | | Semantics | Token | Mux Category | Reference | | |||
+================+========+==============+===========+ | +================+========+==============+===========+ | |||
| Media bundling | BUNDLE | NORMAL | RFC XXXX | | | Media bundling | BUNDLE | NORMAL | RFC 9143 | | |||
+----------------+--------+--------------+-----------+ | +----------------+--------+--------------+-----------+ | |||
Table 1 | Table 1: Update to SDP Group Semantics | |||
17. Security Considerations | 17. Security Considerations | |||
The security considerations defined in [RFC3264] and [RFC5888] apply | The security considerations defined in [RFC3264] and [RFC5888] apply | |||
to the BUNDLE extension. BUNDLE does not change which information, | to the BUNDLE extension. BUNDLE does not change which information, | |||
e.g., RTP streams, flows over the network, except for the usage of | e.g., RTP streams, flows over the network, except for the usage of | |||
the MID SDES item as discussed below. Primarily, it changes which | the MID SDES item as discussed below. Primarily, it changes which | |||
addresses and ports, and thus in which (RTP) sessions, the | addresses and ports, and thus in which (RTP) sessions, the | |||
information flows to. This affects the security contexts being used | information flows to. This affects the security contexts being used | |||
and can cause previously separated information flows to share the | and can cause previously separated information flows to share the | |||
same security context. This has very little impact on the | same security context. This has very little impact on the | |||
performance of the security mechanism of the RTP sessions. In cases | performance of the security mechanism of the RTP sessions. In cases | |||
where one would have applied different security policies on the | where one would have applied different security policies on the | |||
different RTP streams being bundled, or where the parties having | different RTP streams being bundled or where the parties having | |||
access to the security contexts would have differed between the RTP | access to the security contexts would have differed between the RTP | |||
streams, additional analysis of the implications are needed before | streams, additional analysis of the implications is needed before | |||
selecting to apply BUNDLE. | selecting to apply BUNDLE. | |||
The identification-tag, independent of transport, RTCP SDES packet, | The identification-tag, independent of transport, RTCP SDES packet, | |||
or RTP header extension, can expose the value to parties beyond the | or RTP header extension, can expose the value to parties beyond the | |||
signaling chain. Therefore, the identification-tag values MUST be | signaling chain. Therefore, the identification-tag values MUST be | |||
generated in a fashion that does not leak user information, e.g., | 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 | randomly or using a per-bundle group counter, and SHOULD be 3 bytes | |||
or fewer to allow them to efficiently fit into the MID RTP header | or fewer to allow them to efficiently fit into the MID RTP header | |||
extension. Note that if implementations use different methods for | extension. Note that if implementations use different methods for | |||
generating identification-tags, this could enable fingerprinting of | generating identification-tags, this could enable fingerprinting of | |||
the implementation making it vulnerable to targeted attacks. The | the implementation, making it vulnerable to targeted attacks. The | |||
identification-tag is exposed on the RTP stream level when included | identification-tag is exposed on the RTP stream level when included | |||
in the RTP header extensions; however, what it reveals of the RTP | in the RTP header extensions; however, what it reveals of the RTP | |||
media stream structure of the endpoint and application was already | media stream structure of the endpoint and application was already | |||
possible to deduce from the RTP streams without the MID SDES header | possible to deduce from the RTP streams without the MID SDES header | |||
extensions. As the identification-tag is also used to route the | extensions. As the identification-tag is also used to route the | |||
media stream to the right application functionality, it is important | media stream to the right application functionality, it is important | |||
that the value received is the one intended by the sender; thus, | that the value received is the one intended by the sender; thus, | |||
integrity and the authenticity of the source are important to prevent | integrity and the authenticity of the source are important to prevent | |||
denial of service on the application. Existing SRTP configurations | denial of service on the application. Existing SRTP configurations | |||
and other security mechanisms protecting the whole RTP/RTCP packets | and other security mechanisms protecting the whole RTP/RTCP packets | |||
skipping to change at page 44, line 24 ¶ | skipping to change at line 2023 ¶ | |||
their classification in [RFC8859]. | their classification in [RFC8859]. | |||
The security considerations of "RTP Header Extension for the RTP | The security considerations of "RTP Header Extension for the RTP | |||
Control Protocol (RTCP) Source Description Items" [RFC7941] require | Control Protocol (RTCP) Source Description Items" [RFC7941] require | |||
that when RTCP is confidentiality protected, any SDES RTP header | that when RTCP is confidentiality protected, any SDES RTP header | |||
extension carrying an SDES item, such as the MID RTP header | extension carrying an SDES item, such as the MID RTP header | |||
extension, is also protected using commensurate strength algorithms. | extension, is also protected using commensurate strength algorithms. | |||
However, assuming the above requirements and recommendations are | However, assuming the above requirements and recommendations are | |||
followed, there are no known significant security risks with leaving | followed, there are no known significant security risks with leaving | |||
the MID RTP header extension without confidentiality protection. | the MID RTP header extension without confidentiality protection. | |||
Therefore, this specification updates RFC 7941 by adding the | Therefore, this specification updates [RFC7941] by adding the | |||
exception that this requirement MAY be ignored for the MID RTP header | exception that this requirement MAY be ignored for the MID RTP header | |||
extension. Security mechanisms for RTP/RTCP are discussed in | extension. Security mechanisms for RTP/RTCP are discussed in | |||
"Options for Securing RTP Sessions" [RFC7201], for example, SRTP | "Options for Securing RTP Sessions" [RFC7201]; for example, SRTP | |||
[RFC3711] can provide the necessary security functions of ensuring | [RFC3711] can provide the necessary security functions of ensuring | |||
the integrity and source authenticity. | the integrity and source authenticity. | |||
18. Examples | 18. Examples | |||
18.1. Example: Tagged "m=" Section Selections | 18.1. Example: Tagged "m=" Section Selections | |||
The example below shows: | The example below shows: | |||
* An initial BUNDLE offer, in which the offerer wants to negotiate a | * An initial BUNDLE offer, in which the offerer wants to negotiate a | |||
skipping to change at page 55, line 16 ¶ | skipping to change at line 2453 ¶ | |||
Mechanism for RTP Header Extensions", RFC 8285, | Mechanism for RTP Header Extensions", RFC 8285, | |||
DOI 10.17487/RFC8285, October 2017, | DOI 10.17487/RFC8285, October 2017, | |||
<https://www.rfc-editor.org/info/rfc8285>. | <https://www.rfc-editor.org/info/rfc8285>. | |||
[RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive | [RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive | |||
Connectivity Establishment (ICE): A Protocol for Network | Connectivity Establishment (ICE): A Protocol for Network | |||
Address Translator (NAT) Traversal", RFC 8445, | Address Translator (NAT) Traversal", RFC 8445, | |||
DOI 10.17487/RFC8445, July 2018, | DOI 10.17487/RFC8445, July 2018, | |||
<https://www.rfc-editor.org/info/rfc8445>. | <https://www.rfc-editor.org/info/rfc8445>. | |||
[RFC8839] Petit-Huguenin, M., Nandakumar, S., Holmberg, C., Keranen, | [RFC8839] Petit-Huguenin, M., Nandakumar, S., Holmberg, C., Keränen, | |||
A., and R. Shpount, "Session Description Protocol (SDP) | A., and R. Shpount, "Session Description Protocol (SDP) | |||
Offer/Answer Procedures for Interactive Connectivity | Offer/Answer Procedures for Interactive Connectivity | |||
Establishment (ICE)", RFC 8839, DOI 10.17487/RFC8839, | Establishment (ICE)", RFC 8839, DOI 10.17487/RFC8839, | |||
January 2021, <https://www.rfc-editor.org/info/rfc8839>. | January 2021, <https://www.rfc-editor.org/info/rfc8839>. | |||
[RFC8840] Ivov, E., Stach, T., Marocco, E., and C. Holmberg, "A | [RFC8840] Ivov, E., Stach, T., Marocco, E., and C. Holmberg, "A | |||
Session Initiation Protocol (SIP) Usage for Incremental | Session Initiation Protocol (SIP) Usage for Incremental | |||
Provisioning of Candidates for the Interactive | Provisioning of Candidates for the Interactive | |||
Connectivity Establishment (Trickle ICE)", RFC 8840, | Connectivity Establishment (Trickle ICE)", RFC 8840, | |||
DOI 10.17487/RFC8840, January 2021, | DOI 10.17487/RFC8840, January 2021, | |||
skipping to change at page 55, line 42 ¶ | skipping to change at line 2479 ¶ | |||
DOI 10.17487/RFC8858, January 2021, | DOI 10.17487/RFC8858, January 2021, | |||
<https://www.rfc-editor.org/info/rfc8858>. | <https://www.rfc-editor.org/info/rfc8858>. | |||
[RFC8859] Nandakumar, S., "A Framework for Session Description | [RFC8859] Nandakumar, S., "A Framework for Session Description | |||
Protocol (SDP) Attributes When Multiplexing", RFC 8859, | Protocol (SDP) Attributes When Multiplexing", RFC 8859, | |||
DOI 10.17487/RFC8859, January 2021, | DOI 10.17487/RFC8859, January 2021, | |||
<https://www.rfc-editor.org/info/rfc8859>. | <https://www.rfc-editor.org/info/rfc8859>. | |||
19.2. Informative References | 19.2. Informative References | |||
[Err6431] RFC Errata, Erratum ID 6431, RFC 8843, | ||||
<https://www.rfc-editor.org/errata/eid6431>. | ||||
[Err6437] RFC Errata, Erratum ID 6437, RFC 8843, | ||||
<https://www.rfc-editor.org/errata/eid6437>. | ||||
[LLR-RTCP] Lennox, J., Hong, D., Uberti, J., Holmer, S., and M. | [LLR-RTCP] Lennox, J., Hong, D., Uberti, J., Holmer, S., and M. | |||
Flodman, "The Layer Refresh Request (LRR) RTCP Feedback | Flodman, "The Layer Refresh Request (LRR) RTCP Feedback | |||
Message", Work in Progress, Internet-Draft, draft-ietf- | Message", Work in Progress, Internet-Draft, draft-ietf- | |||
avtext-lrr-07, 2 July 2017, | avtext-lrr-07, 2 July 2017, | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-avtext- | <https://datatracker.ietf.org/doc/html/draft-ietf-avtext- | |||
lrr-07>. | lrr-07>. | |||
[RFC2543] Handley, M., Schulzrinne, H., Schooler, E., and J. | [RFC2543] Handley, M., Schulzrinne, H., Schooler, E., and J. | |||
Rosenberg, "SIP: Session Initiation Protocol", RFC 2543, | Rosenberg, "SIP: Session Initiation Protocol", RFC 2543, | |||
DOI 10.17487/RFC2543, March 1999, | DOI 10.17487/RFC2543, March 1999, | |||
skipping to change at page 57, line 16 ¶ | skipping to change at line 2555 ¶ | |||
"JavaScript Session Establishment Protocol (JSEP)", | "JavaScript Session Establishment Protocol (JSEP)", | |||
RFC 8829, DOI 10.17487/RFC8829, January 2021, | RFC 8829, DOI 10.17487/RFC8829, January 2021, | |||
<https://www.rfc-editor.org/info/rfc8829>. | <https://www.rfc-editor.org/info/rfc8829>. | |||
[RFC8838] Ivov, E., Uberti, J., and P. Saint-Andre, "Trickle ICE: | [RFC8838] Ivov, E., Uberti, J., and P. Saint-Andre, "Trickle ICE: | |||
Incremental Provisioning of Candidates for the Interactive | Incremental Provisioning of Candidates for the Interactive | |||
Connectivity Establishment (ICE) Protocol", RFC 8838, | Connectivity Establishment (ICE) Protocol", RFC 8838, | |||
DOI 10.17487/RFC8838, January 2021, | DOI 10.17487/RFC8838, January 2021, | |||
<https://www.rfc-editor.org/info/rfc8838>. | <https://www.rfc-editor.org/info/rfc8838>. | |||
[RFC8843] Holmberg, C., Alvestrand, H., and C. Jennings, | ||||
"Negotiating Media Multiplexing Using the Session | ||||
Description Protocol (SDP)", RFC 8843, | ||||
DOI 10.17487/RFC8843, January 2021, | ||||
<https://www.rfc-editor.org/info/rfc8843>. | ||||
Appendix A. Design Considerations | Appendix A. Design Considerations | |||
One of the main issues regarding the BUNDLE grouping extensions has | One of the main issues regarding the BUNDLE grouping extensions has | |||
been whether, in offers and answers, the same port value can be | been whether, in offers and answers, the same port value can be | |||
inserted in "m=" lines associated with a BUNDLE group, as the purpose | 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 | of the extension is to negotiate the usage of a single transport for | |||
media specified by the "m=" sections. Issues with both approaches, | media specified by the "m=" sections. Issues with both approaches, | |||
discussed in the Appendix, have been raised. The outcome was to | discussed in Appendix A, have been raised. The outcome was to | |||
specify a mechanism that uses offers with both different and | specify a mechanism that uses offers with both different and | |||
identical port values. | identical port values. | |||
Below are the primary issues that have been considered when defining | Below are the primary issues that have been considered when defining | |||
the "BUNDLE" grouping extension: | the "BUNDLE" grouping extension: | |||
1) Interoperability with existing User Agents (UAs). | 1) Interoperability with existing User Agents (UAs). | |||
2) Interoperability with intermediary Back-to-Back User Agent | 2) Interoperability with intermediary Back-to-Back User Agent | |||
(B2BUA) and proxy entities. | (B2BUA) and proxy entities. | |||
3) Time to gather, and the number of, ICE candidates. | 3) The number of ICE candidates and the time to gather them. | |||
4) Different error scenarios and when they occur. | 4) Different error scenarios and when they occur. | |||
5) SDP offer/answer impacts, including usage of port number value | 5) SDP offer/answer impacts, including usage of port number value | |||
zero. | zero. | |||
A.1. UA Interoperability | A.1. UA Interoperability | |||
Consider the following SDP offer/answer exchange, where Alice sends | Consider the following SDP offer/answer exchange, where Alice sends | |||
an offer to Bob: | an offer to Bob: | |||
skipping to change at page 58, line 28 ¶ | skipping to change at line 2618 ¶ | |||
o=bob 2808844564 2808844564 IN IP4 biloxi.example.com | o=bob 2808844564 2808844564 IN IP4 biloxi.example.com | |||
s= | s= | |||
c=IN IP4 biloxi.example.com | c=IN IP4 biloxi.example.com | |||
t=0 0 | t=0 0 | |||
m=audio 20000 RTP/AVP 97 | m=audio 20000 RTP/AVP 97 | |||
a=rtpmap:97 iLBC/8000 | a=rtpmap:97 iLBC/8000 | |||
m=video 20002 RTP/AVP 97 | m=video 20002 RTP/AVP 97 | |||
a=rtpmap:97 H261/90000 | a=rtpmap:97 H261/90000 | |||
RFC 4961 specifies a way of doing symmetric RTP, but that is a later | [RFC4961] specifies a way of doing symmetric RTP, but that is a later | |||
extension to RTP, and Bob cannot assume that Alice supports RFC 4961. | extension to RTP, and Bob cannot assume that Alice supports | |||
This means that Alice may be sending RTP from a different port than | [RFC4961]. This means that Alice may be sending RTP from a different | |||
10000 or 10002 -- some implementations simply send the RTP from an | port than 10000 or 10002 -- some implementations simply send the RTP | |||
ephemeral port. When Bob's endpoint receives an RTP packet, the only | from an ephemeral port. When Bob's endpoint receives an RTP packet, | |||
way that Bob knows if the packet is to be passed to the video or | the only way that Bob knows if the packet is to be passed to the | |||
audio codec is by looking at the port it was received on. This | video or audio codec is by looking at the port it was received on. | |||
prompted some SDP implementations to use a port number as an index to | This prompted some SDP implementations to use a port number as an | |||
find the correct "m=" line in the SDP, since each "m"= section | index to find the correct "m=" line in the SDP, since each "m"= | |||
contains a different port number. As a result, some implementations | section contains a different port number. As a result, some | |||
that do support symmetric RTP and ICE still use an SDP data structure | implementations that do support symmetric RTP and ICE still use an | |||
where SDP with "m=" sections with the same port such as: | SDP data structure where SDP with "m=" sections with the same port | |||
such as: | ||||
SDP Offer | SDP Offer | |||
v=0 | v=0 | |||
o=alice 2890844526 2890844526 IN IP4 atlanta.example.com | o=alice 2890844526 2890844526 IN IP4 atlanta.example.com | |||
s= | s= | |||
c=IN IP4 atlanta.example.com | c=IN IP4 atlanta.example.com | |||
t=0 0 | t=0 0 | |||
m=audio 10000 RTP/AVP 97 | m=audio 10000 RTP/AVP 97 | |||
a=rtpmap:97 iLBC/8000 | a=rtpmap:97 iLBC/8000 | |||
m=video 10000 RTP/AVP 98 | m=video 10000 RTP/AVP 98 | |||
a=rtpmap:98 H261/90000 | a=rtpmap:98 H261/90000 | |||
skipping to change at page 59, line 26 ¶ | skipping to change at line 2656 ¶ | |||
because it has the same port as the first line. | because it has the same port as the first line. | |||
A.2. Usage of Port Number Value Zero | A.2. Usage of Port Number Value Zero | |||
In an offer or answer, the media specified by an "m=" section can be | 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 | disabled/rejected by setting the port number value to zero. This is | |||
different from, e.g., using the SDP direction attributes, where RTCP | different from, e.g., using the SDP direction attributes, where RTCP | |||
traffic will continue even if the SDP 'inactive' attribute is | traffic will continue even if the SDP 'inactive' attribute is | |||
indicated for the associated "m=" section. | indicated for the associated "m=" section. | |||
If each "m=" section associated with a BUNDLE group would contain | If each "m=" section associated with a BUNDLE group were to contain | |||
different port values, and one of those port values would be used for | different port values and one of those port values were used for a | |||
a BUNDLE address:port associated with the BUNDLE group, problems | BUNDLE address:port associated with the BUNDLE group, problems would | |||
would occur if an endpoint wants to disable/reject the "m=" section | occur if an endpoint wants to disable/reject the "m=" section | |||
associated with that port, by setting the port value to zero. After | 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 | that, no "m=" section would contain the port value that is used for | |||
the BUNDLE address:port. In addition, it is unclear what would | the BUNDLE address:port. In addition, it is unclear what would | |||
happen to the ICE candidates associated with the "m=" section, as | happen to the ICE candidates associated with the "m=" section, as | |||
they are also used for the BUNDLE address:port. | they are also used for the BUNDLE address:port. | |||
A.3. B2BUA and Proxy Interoperability | A.3. B2BUA and Proxy Interoperability | |||
Some back-to-back user agents may be configured in a mode where if | 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 | the incoming call leg contains an SDP attribute the B2BUA does not | |||
understand, the B2BUA still generates that SDP attribute in the offer | understand, the B2BUA still generates that SDP attribute in the Offer | |||
for the outgoing call leg. Consider a B2BUA that did not understand | for the outgoing call leg. Consider a B2BUA that did not understand | |||
the SDP 'rtcp' attribute, defined in RFC 3605, yet acted this way. | the SDP 'rtcp' attribute, defined in [RFC3605], yet acted this way. | |||
Further, assume that the B2BUA was configured to tear down any call | 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 | where it did not see any RTCP for 5 minutes. In this case, if the | |||
B2BUA received an offer like: | B2BUA received an Offer like: | |||
SDP Offer | SDP Offer | |||
v=0 | v=0 | |||
o=alice 2890844526 2890844526 IN IP4 atlanta.example.com | o=alice 2890844526 2890844526 IN IP4 atlanta.example.com | |||
s= | s= | |||
c=IN IP4 atlanta.example.com | c=IN IP4 atlanta.example.com | |||
t=0 0 | t=0 0 | |||
m=audio 49170 RTP/AVP 0 | m=audio 49170 RTP/AVP 0 | |||
a=rtcp:53020 | a=rtcp:53020 | |||
It would be looking for RTCP on port 49171 but would not see any | 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 | 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 | 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 | 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 | 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 | generated an Offer with capabilities it does not understand is not | |||
compliant with the specifications. | compliant with the specifications. | |||
A.3.1. Traffic Policing | A.3.1. Traffic Policing | |||
Sometimes intermediaries do not act as B2BUAs, in the sense that they | Sometimes intermediaries do not act as B2BUAs, in the sense that they | |||
don't modify SDP bodies nor do they terminate SIP dialogs. However, | 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 | they may still use SDP information (e.g., IP address and port) in | |||
order to control traffic gating functions and to set traffic policing | order to control traffic gating functions and to set traffic policing | |||
rules. There might be rules that will trigger a session to be | rules. There might be rules that will trigger a session to be | |||
terminated in case media is not sent or received on the ports | terminated in case media is not sent or received on the ports | |||
skipping to change at page 60, line 40 ¶ | skipping to change at line 2715 ¶ | |||
already established and ongoing. | already established and ongoing. | |||
A.3.2. Bandwidth Allocation | A.3.2. Bandwidth Allocation | |||
Sometimes, intermediaries do not act as B2BUAs, in the sense that | Sometimes, intermediaries do not act as B2BUAs, in the sense that | |||
they don't modify SDP bodies nor do they terminate SIP dialogs. | they don't modify SDP bodies nor do they terminate SIP dialogs. | |||
However, they may still use SDP information (e.g., codecs and media | However, they may still use SDP information (e.g., codecs and media | |||
types) in order to control bandwidth allocation functions. The | types) in order to control bandwidth allocation functions. The | |||
bandwidth allocation is done per "m=" section, which means that it | bandwidth allocation is done per "m=" section, which means that it | |||
might not be enough if media specified by all "m=" sections try to | might not be enough if media specified by all "m=" sections try to | |||
use that bandwidth. That may simply lead to either bad user | use that bandwidth. That may simply lead to either a bad user | |||
experience or termination of the call. | experience or termination of the call. | |||
A.4. Candidate Gathering | A.4. Candidate Gathering | |||
When using ICE, a candidate needs to be gathered for each port. This | 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 | takes approximately 20 ms extra for each extra "m=" section due to | |||
the NAT pacing requirements. All of this gathering can be overlapped | 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 | 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 | impact. If the client only wants to generate Traversal Using Relays | |||
around NAT (TURN) or STUN ICE candidates for one of the "m=" lines | around NAT (TURN) or STUN ICE candidates for one of the "m=" lines | |||
skipping to change at page 61, line 27 ¶ | skipping to change at line 2750 ¶ | |||
is based on similar alternatives proposed by Harald Alvestrand and | is based on similar alternatives proposed by Harald Alvestrand and | |||
Cullen Jennings. The BUNDLE extension described in this document is | Cullen Jennings. The BUNDLE extension described in this document is | |||
based on the different alternative proposals, and text (e.g., SDP | based on the different alternative proposals, and text (e.g., SDP | |||
examples) has been borrowed (and, in some cases, modified) from those | examples) has been borrowed (and, in some cases, modified) from those | |||
alternative proposals. | alternative proposals. | |||
The SDP examples are also modified versions from the ones in the | The SDP examples are also modified versions from the ones in the | |||
Alvestrand proposal. | Alvestrand proposal. | |||
Thanks to Paul Kyzivat, Martin Thomson, Flemming Andreasen, Thomas | Thanks to Paul Kyzivat, Martin Thomson, Flemming Andreasen, Thomas | |||
Stach, Ari Keranen, Adam Roach, Christian Groves, Roman Shpount, | Stach, Ari Keränen, Adam Roach, Christian Groves, Roman Shpount, | |||
Suhas Nandakumar, Nils Ohlmeier, Jens Guballa, Raju Makaraju, Justin | Suhas Nandakumar, Nils Ohlmeier, Jens Guballa, Raju Makaraju, Justin | |||
Uberti, Taylor Brandstetter, Byron Campen, and Eric Rescorla for | Uberti, Taylor Brandstetter, Byron Campen, and Eric Rescorla for | |||
reading the text and providing useful feedback. | reading the text and providing useful feedback. | |||
Thanks to Bernard Aboba, Peter Thatcher, Justin Uberti, and Magnus | Thanks to Bernard Aboba, Peter Thatcher, Justin Uberti, and Magnus | |||
Westerlund for providing the text for the section on RTP/RTCP stream | Westerlund for providing the text for the section on RTP/RTCP stream | |||
association. | association. | |||
Thanks to Magnus Westerlund, Colin Perkins, and Jonathan Lennox for | Thanks to Magnus Westerlund, Colin Perkins, and Jonathan Lennox for | |||
providing help and text on the RTP/RTCP procedures. | providing help and text on the RTP/RTCP procedures. | |||
skipping to change at page 62, line 4 ¶ | skipping to change at line 2770 ¶ | |||
providing help and text on the RTP/RTCP procedures. | providing help and text on the RTP/RTCP procedures. | |||
Thanks to Charlie Kaufman for performing the Sec-Dir review. | Thanks to Charlie Kaufman for performing the Sec-Dir review. | |||
Thanks to Linda Dunbar for performing the Gen-ART review. | Thanks to Linda Dunbar for performing the Gen-ART review. | |||
Thanks to Spotify for providing music for the countless hours of | Thanks to Spotify for providing music for the countless hours of | |||
document editing. | document editing. | |||
Authors' Addresses | Authors' Addresses | |||
Christer Holmberg | Christer Holmberg | |||
Ericsson | Ericsson | |||
Hirsalantie 11 | Hirsalantie 11 | |||
FI-02420 Jorvas | FI-02420 Jorvas | |||
Finland | Finland | |||
Email: christer.holmberg@ericsson.com | Email: christer.holmberg@ericsson.com | |||
Harald Tveit Alvestrand | Harald Tveit Alvestrand | |||
Kungsbron 2 | Kungsbron 2 | |||
SE-11122 Stockholm | SE-11122 Stockholm | |||
Sweden | Sweden | |||
Email: harald@alvestrand.no | Email: harald@alvestrand.no | |||
Cullen Jennings | Cullen Jennings | |||
Cisco | Cisco | |||
400 3rd Avenue SW, Suite 350 | Suite 350 | |||
400 3rd Avenue SW | ||||
Calgary AB T2P 4H2 | Calgary AB T2P 4H2 | |||
Canada | Canada | |||
Email: fluffy@iii.ca | Email: fluffy@iii.ca | |||
End of changes. 204 change blocks. | ||||
584 lines changed or deleted | 589 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |