rfc8848.original | rfc8848.txt | |||
---|---|---|---|---|
Network Working Group R. Hanton | Internet Engineering Task Force (IETF) R. Hanton | |||
Internet-Draft Cisco Systems | Request for Comments: 8848 Cisco Systems | |||
Intended status: Standards Track P. Kyzivat | Category: Experimental P. Kyzivat | |||
Expires: June 11, 2020 | ISSN: 2070-1721 | |||
L. Xiao | L. Xiao | |||
Huawei | Beijing Chuangshiyoulian | |||
C. Groves | C. Groves | |||
December 9, 2019 | January 2021 | |||
Session Signaling for Controlling Multiple Streams for Telepresence | Session Signaling for Controlling Multiple Streams for Telepresence | |||
(CLUE) | (CLUE) | |||
draft-ietf-clue-signaling-15 | ||||
Abstract | Abstract | |||
This document specifies how CLUE-specific signaling such as the CLUE | This document is about Controlling Multiple Streams for Telepresence | |||
protocol and the CLUE data channel are used in conjunction with each | (CLUE) signaling. It specifies how the CLUE protocol and the CLUE | |||
other and with existing signaling mechanisms such as SIP and SDP to | data channel are used in conjunction with each other and with | |||
produce a telepresence call. | existing signaling mechanisms, such as SIP and the Session | |||
Description Protocol (SDP), to produce a telepresence call. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
provisions of BCP 78 and BCP 79. | published for examination, experimental implementation, and | |||
evaluation. | ||||
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 defines an Experimental Protocol for the Internet | |||
and may be updated, replaced, or obsoleted by other documents at any | community. This document is a product of the Internet Engineering | |||
time. It is inappropriate to use Internet-Drafts as reference | Task Force (IETF). It represents the consensus of the IETF | |||
material or to cite them other than as "work in progress." | community. It has received public review and has been approved for | |||
publication by the Internet Engineering Steering Group (IESG). Not | ||||
all documents approved by the IESG are candidates for any level of | ||||
Internet Standard; see Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on June 11, 2020. | 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/rfc8848. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2021 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 | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology | |||
3. Media Feature Tag Definition . . . . . . . . . . . . . . . . 4 | 3. Media Feature Tag Definition | |||
4. SDP Grouping Framework CLUE Extension Semantics . . . . . . . 4 | 4. SDP Grouping Framework CLUE Extension Semantics | |||
4.1. General . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 4.1. General | |||
4.2. The CLUE data channel and the CLUE grouping semantic . . 5 | 4.2. The CLUE Data Channel and the CLUE Grouping Semantic | |||
4.3. CLUE-controlled media and the CLUE grouping semantic . . 5 | 4.3. CLUE-Controlled Media and the CLUE Grouping Semantic | |||
4.4. SDP semantics for CLUE-controlled media . . . . . . . . . 5 | 4.4. SDP Semantics for CLUE-Controlled Media | |||
4.4.1. Signaling CLUE Encodings . . . . . . . . . . . . . . 6 | 4.4.1. Signaling CLUE Encodings | |||
4.4.1.1. Referencing Encodings in the CLUE protocol . . . 6 | 4.4.1.1. Referencing Encodings in the CLUE Protocol | |||
4.4.2. Negotiating receipt of CLUE Capture Encodings in SDP 7 | 4.4.2. Negotiating Receipt of CLUE Capture Encodings in SDP | |||
4.5. SDP Offer/Answer Procedures . . . . . . . . . . . . . . . 7 | 4.5. SDP Offer/Answer Procedures | |||
4.5.1. Generating the Initial Offer . . . . . . . . . . . . 7 | 4.5.1. Generating the Initial Offer | |||
4.5.2. Generating the Answer . . . . . . . . . . . . . . . . 8 | 4.5.2. Generating the Answer | |||
4.5.2.1. Negotiating use of CLUE and the CLUE data channel 8 | 4.5.2.1. Negotiating Use of CLUE and the CLUE Data Channel | |||
4.5.2.2. Negotiating CLUE-controlled media . . . . . . . . 8 | 4.5.2.2. Negotiating CLUE-Controlled Media | |||
4.5.2.3. Negotiating non-CLUE controlled media . . . . . . 9 | 4.5.2.3. Negotiating Non-CLUE-controlled Media | |||
4.5.3. Processing the initial Offer/Answer negotiation . . . 9 | 4.5.3. Processing the Initial Offer/Answer Negotiation | |||
4.5.3.1. Successful CLUE negotiation . . . . . . . . . . . 9 | 4.5.3.1. Successful CLUE Negotiation | |||
4.5.3.2. CLUE negotiation failure . . . . . . . . . . . . 10 | 4.5.3.2. CLUE Negotiation Failure | |||
4.5.4. Modifying the session . . . . . . . . . . . . . . . . 10 | 4.5.4. Modifying the Session | |||
4.5.4.1. Adding and removing CLUE-controlled media . . . . 10 | 4.5.4.1. Adding and Removing CLUE-Controlled Media | |||
4.5.4.2. Enabling CLUE mid-call . . . . . . . . . . . . . 10 | 4.5.4.2. Enabling CLUE Mid-Call | |||
4.5.4.3. Disabling CLUE mid-call . . . . . . . . . . . . . 10 | 4.5.4.3. Disabling CLUE Mid-Call | |||
4.5.4.4. CLUE protocol failure mid-call . . . . . . . . . 11 | 4.5.4.4. CLUE Protocol Failure Mid-Call | |||
5. Interaction of CLUE protocol and SDP negotiations . . . . . . 11 | 5. Interaction of the CLUE Protocol and SDP Negotiations | |||
5.1. Independence of SDP and CLUE negotiation . . . . . . . . 12 | 5.1. Independence of SDP and CLUE Negotiation | |||
5.2. Constraints on sending media . . . . . . . . . . . . . . 13 | 5.2. Constraints on Sending Media | |||
5.3. Recommendations for operating with non-atomic operations 13 | 5.3. Recommendations for Operating with Non-atomic Operations | |||
6. Interaction of CLUE protocol and RTP/RTCP CaptureID . . . . . 14 | 6. Interaction of the CLUE Protocol and RTP/RTCP CaptureID | |||
6.1. CaptureID reception during MCC redefinition . . . . . . . 14 | 6.1. CaptureID Reception during MCC Redefinition | |||
7. Multiplexing of CLUE-controlled media using BUNDLE . . . . . 15 | 7. Multiplexing of CLUE-Controlled Media Using BUNDLE | |||
7.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 15 | 7.1. Overview | |||
7.2. Usage of BUNDLE with CLUE . . . . . . . . . . . . . . . . 15 | 7.2. Usage of BUNDLE with CLUE | |||
7.2.1. Generating the Initial Offer . . . . . . . . . . . . 16 | 7.2.1. Generating the Initial Offer | |||
7.2.2. Multiplexing of the data channel and RTP media . . . 16 | 7.2.2. Multiplexing of the Data Channel and RTP Media | |||
8. Example: A call between two CLUE-capable Endpoints . . . . . 16 | 8. Example: A Call between Two CLUE-Capable Endpoints | |||
9. Example: A call between a CLUE-capable and non-CLUE Endpoint 26 | 9. Example: A Call between a CLUE-Capable and Non-CLUE Endpoint | |||
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 27 | 10. IANA Considerations | |||
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27 | 10.1. New SDP Grouping Framework Attribute | |||
11.1. New SDP Grouping Framework Attribute . . . . . . . . . . 27 | 10.2. New SIP Media Feature Tag | |||
11.2. New SIP Media Feature Tag . . . . . . . . . . . . . . . 28 | 11. Security Considerations | |||
12. Security Considerations . . . . . . . . . . . . . . . . . . . 28 | 12. References | |||
13. Change History . . . . . . . . . . . . . . . . . . . . . . . 29 | 12.1. Normative References | |||
14. References . . . . . . . . . . . . . . . . . . . . . . . . . 39 | 12.2. Informative References | |||
14.1. Normative References . . . . . . . . . . . . . . . . . . 39 | Acknowledgements | |||
14.2. Informative References . . . . . . . . . . . . . . . . . 41 | Authors' Addresses | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 42 | ||||
1. Introduction | 1. Introduction | |||
To enable devices to participate in a telepresence call, selecting | To enable devices to participate in a telepresence call, where they | |||
the sources they wish to view, receiving those media sources and | select the sources they wish to view, receive those media sources, | |||
displaying them in an optimal fashion, CLUE (ControLling mUltiple | and display them in an optimal fashion, Controlling Multiple Streams | |||
streams for tElepresence) employs two principal and inter-related | for Telepresence (CLUE) employs two principal and interrelated | |||
protocol negotiations. SDP [RFC4566], conveyed via SIP [RFC3261], is | protocol negotiations. SDP [RFC4566], conveyed via SIP [RFC3261], is | |||
used to negotiate the specific media capabilities that can be | used to negotiate the specific media capabilities that can be | |||
delivered to specific addresses on a device. Meanwhile, CLUE | delivered to specific addresses on a device. Meanwhile, CLUE | |||
protocol [I-D.ietf-clue-protocol] messages, transported via a CLUE | protocol messages [RFC8847], transported via a CLUE data channel | |||
data channel [I-D.ietf-clue-datachannel], are used to negotiate the | [RFC8850], are used to negotiate the Capture Sources available, their | |||
Capture Sources available, their attributes and any constraints in | attributes, and any constraints in their use. They also allow the | |||
their use. They also allow the far end device to specify which | far-end device to specify which Captures they wish to receive. It is | |||
Captures they wish to receive. It is recommended that those | recommended that those documents be read prior to this one as this | |||
documents be read prior to this one as this document assumes | document assumes familiarity with those protocols and hence uses | |||
familiarity with those protocols and hence uses terminology from each | terminology from each with limited introduction. | |||
with limited introduction. | ||||
Beyond negotiating the CLUE channel, SDP is also used to negotiate | Beyond negotiating the CLUE channel, SDP is also used to negotiate | |||
the details of supported media streams and the maximum capability of | the details of supported media streams and the maximum capability of | |||
each of those streams. As the CLUE Framework | each of those streams. As the CLUE Framework [RFC8845] defines a | |||
[I-D.ietf-clue-framework] defines a manner in which the Media | manner in which the Media Provider expresses their maximum Encoding | |||
Provider expresses their maximum encoding group capabilities, SDP is | Group capabilities, SDP is also used to express the encoding limits | |||
also used to express the encoding limits for each potential Encoding. | for each potential Encoding. | |||
Backwards-compatibility is an important consideration of the | Backwards compatibility is an important consideration of the | |||
protocol: it is vital that a CLUE-capable device contacting a device | protocol: it is vital that a CLUE-capable device contacting a device | |||
that does not support CLUE is able to fall back to a fully functional | that does not support CLUE is able to fall back to a fully functional | |||
non-CLUE call. The document also defines how a non-CLUE call may be | non-CLUE call. The document also defines how a non-CLUE call may be | |||
upgraded to CLUE in mid-call, and similarly how CLUE functionality | upgraded to CLUE mid-call and, similarly, how CLUE functionality can | |||
can be removed mid-call to return to a standard non-CLUE call. | be removed mid-call to return to a standard non-CLUE call. | |||
2. Terminology | 2. Terminology | |||
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 BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
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. | |||
This document uses terminology defined in the CLUE Framework | This document uses terminology defined in the CLUE Framework | |||
[I-D.ietf-clue-framework]. | [RFC8845]. | |||
A few additional terms specific to this document are defined as | A few additional terms specific to this document are defined as | |||
follows: | follows: | |||
non-CLUE device: A device that supports standard SIP and SDP, but | ||||
either does not support CLUE, or that does but does not currently | ||||
wish to invoke CLUE capabilities. | ||||
CLUE-controlled media: A media "m=" line that is under CLUE control; | CLUE-controlled media: A media "m=" line that is under CLUE control; | |||
the Capture Source that provides the media on this "m=" line is | the Capture Source that provides the media on this "m=" line is | |||
negotiated in CLUE. See Section 4 for details of how this control | negotiated in CLUE. See Section 4 for details on how this control | |||
is signaled in SDP. There is a corresponding "non-CLUE- | is signaled in SDP. There is a corresponding "non-CLUE- | |||
controlled" media term. | controlled" media term. | |||
non-CLUE device: A device that supports standard SIP and SDP but | ||||
either does not support CLUE or does support CLUE but does not | ||||
currently wish to invoke CLUE capabilities. | ||||
RTCP: RTP Control Protocol. | ||||
SCTP: Stream Control Transmission Protocol. | ||||
STUN: Session Traversal Utilities for NAT. | ||||
3. Media Feature Tag Definition | 3. Media Feature Tag Definition | |||
The "sip.clue" media feature tag [RFC3840] indicates support for CLUE | The "sip.clue" media feature tag [RFC3840] indicates support for CLUE | |||
in SIP [RFC3261] calls. A CLUE-capable device SHOULD include this | in SIP [RFC3261] calls. A CLUE-capable device SHOULD include this | |||
media feature tag in its REGISTER requests and OPTION responses. It | media feature tag in its REGISTER requests and OPTION responses. It | |||
SHOULD also include the media feature tag in INVITE and UPDATE | SHOULD also include the media feature tag in INVITE and UPDATE | |||
[RFC3311] requests and responses. | [RFC3311] requests and responses. | |||
Presence of the media feature tag in the contact field of a request | Presence of the media feature tag in the contact field of a request | |||
or response can be used to determine that the far end supports CLUE. | or response can be used to determine that the far end supports CLUE. | |||
4. SDP Grouping Framework CLUE Extension Semantics | 4. SDP Grouping Framework CLUE Extension Semantics | |||
4.1. General | 4.1. General | |||
This section defines a new SDP Grouping Framework [RFC5888] extension | This section defines a new SDP Grouping Framework [RFC5888] extension | |||
called 'CLUE'. | called 'CLUE'. | |||
The CLUE extension can be indicated using an SDP session-level | The CLUE extension can be indicated using an SDP session-level | |||
'group' attribute. Each SDP media "m=" line that is included in this | 'group' attribute. Each SDP media "m=" line that is included in this | |||
group, using SDP media-level mid attributes, is CLUE-controlled, by a | group, using SDP media-level mid attributes, is CLUE controlled by a | |||
CLUE data channel also included in this CLUE group. | CLUE data channel that is also included in this CLUE group. | |||
Currently only support for a single CLUE group is specified; support | Currently, only support for a single CLUE group is specified; support | |||
for multiple CLUE groups in a single session is outside the scope of | for multiple CLUE groups in a single session is outside the scope of | |||
this document. A device MUST NOT include more than one CLUE group in | this document. A device MUST NOT include more than one CLUE group in | |||
its SDP message unless it is following a specification that defines | its SDP message unless it is following a specification that defines | |||
how multiple CLUE channels are signaled, and is either able to | how multiple CLUE channels are signaled and is able to either | |||
determine that the other side of the SDP exchange supports multiple | determine that the other side of the SDP exchange supports multiple | |||
CLUE channels, or is able to fail gracefully in the event it does | CLUE channels or fail gracefully in the event it does not. | |||
not. | ||||
4.2. The CLUE data channel and the CLUE grouping semantic | 4.2. The CLUE Data Channel and the CLUE Grouping Semantic | |||
The CLUE data channel [I-D.ietf-clue-datachannel] is a bidirectional | The CLUE data channel [RFC8850] is a bidirectional data channel | |||
data channel [I-D.ietf-rtcweb-data-channel] used for the transport of | [RFC8831] used for the transport of CLUE messages, conveyed within an | |||
CLUE messages, conveyed within an SCTP over DTLS connection. This | SCTP over DTLS connection. This channel must be established before | |||
channel must be established before CLUE protocol messages can be | CLUE protocol messages can be exchanged and CLUE-controlled media can | |||
exchanged and CLUE-controlled media can be sent. | be sent. | |||
The data channel is negotiated over SDP as described in | The data channel is negotiated over SDP as described in [RFC8864]. A | |||
[I-D.ietf-mmusic-data-channel-sdpneg]. A CLUE-capable device wishing | CLUE-capable device wishing to negotiate CLUE MUST also include a | |||
to negotiate CLUE MUST also include a CLUE group in their SDP offer | CLUE group in their SDP Offer or Answer and include the "mid" of the | |||
or answer and include the "mid" of the "m=" line for the data channel | "m=" line for the data channel in that group. The CLUE group MUST | |||
in that group. The CLUE group MUST include the "mid" of the "m=" | include the "mid" of the "m=" line for one (and only one) data | |||
line for one (and only one) data channel. | channel. | |||
Presence of the data channel in the CLUE group in an SDP offer or | Presence of the data channel in the CLUE group in an SDP Offer or | |||
answer also serves, along with the "sip.clue" media feature tag, as | Answer also serves, along with the "sip.clue" media feature tag, as | |||
an indication that the device supports CLUE and wishes to upgrade the | an indication that the device supports CLUE and wishes to upgrade the | |||
call to include CLUE-controlled media. A CLUE-capable device SHOULD | call to include CLUE-controlled media. A CLUE-capable device SHOULD | |||
include a data channel "m=" line in offers and, when allowed by | include a data channel "m=" line in offers and, when allowed by | |||
[RFC3264], answers. | [RFC3264], answers. | |||
4.3. CLUE-controlled media and the CLUE grouping semantic | 4.3. CLUE-Controlled Media and the CLUE Grouping Semantic | |||
CLUE-controlled media lines in an SDP are "m=" lines in which the | CLUE-controlled media lines in an SDP are "m=" lines in which the | |||
content of the media streams to be sent is negotiated via the CLUE | content of the media streams to be sent is negotiated via the CLUE | |||
protocol [I-D.ietf-clue-protocol]. For an "m=" line to be CLUE- | protocol [RFC8847]. For an "m=" line to be CLUE controlled, its | |||
controlled, its "mid" value MUST be included in the CLUE group. | "mid" attribute value MUST be included in the CLUE group. CLUE- | |||
CLUE-controlled media is controlled by the CLUE protocol as | controlled media is controlled by the CLUE protocol as negotiated on | |||
negotiated on the CLUE data channel with an "mid" included in the | the CLUE data channel with a "mid" included in the CLUE group. | |||
CLUE group. | ||||
"m=" lines not specified as under CLUE control follow normal rules | "m=" lines not specified as being under CLUE control follow normal | |||
for media streams negotiated in SDP as defined in documents such as | rules for media streams negotiated in SDP as defined in documents | |||
[RFC3264]. | such as [RFC3264]. | |||
The restrictions on CLUE-controlled media that are defined below | The restrictions on CLUE-controlled media that are defined below | |||
always apply to "m=" lines in an SDP offer or answer, even if | always apply to "m=" lines in an SDP Offer or Answer, even if | |||
negotiation of the data channel in SDP failed due to lack of CLUE | negotiation of the data channel in SDP failed due to lack of CLUE | |||
support by the remote device or for any other reason, or in an offer | support by the remote device or for any other reason, or in an offer | |||
if the recipient does not include the "mid" of the corresponding "m=" | if the recipient does not include the "mid" of the corresponding "m=" | |||
line in their CLUE group. | line in their CLUE group. | |||
4.4. SDP semantics for CLUE-controlled media | 4.4. SDP Semantics for CLUE-Controlled Media | |||
4.4.1. Signaling CLUE Encodings | 4.4.1. Signaling CLUE Encodings | |||
The CLUE Framework [I-D.ietf-clue-framework] defines the concept of | The CLUE Framework [RFC8845] defines the concept of "Encodings", | |||
"Encodings", which represent the sender's encode ability. Each | which represent the sender's encode ability. Each Encoding the Media | |||
Encoding the Media Provider wishes to signal is signaled via an "m=" | Provider wishes to signal is done so via an "m=" line of the | |||
line of the appropriate media type, which MUST be marked as sendonly | appropriate media type, which MUST be marked as sendonly with the | |||
with the "a=sendonly" attribute or as inactive with the "a=inactive" | "a=sendonly" attribute or as inactive with the "a=inactive" | |||
attribute. | attribute. | |||
The encoder limits of active (eg, "a=sendonly") Encodings can then be | The encoder limits of active (e.g., "a=sendonly") Encodings can then | |||
expressed using existing SDP syntax. For instance, for H.264 see | be expressed using existing SDP syntax. For instance, for H.264, see | |||
Table 6 in [RFC6184] for a list of valid parameters for representing | Table 6 in Section 8.2.2 of [RFC6184] for a list of valid parameters | |||
encoder sender stream limits. | for representing encoder sender stream limits. | |||
These Encodings are CLUE-controlled and hence MUST include an "mid" | These Encodings are CLUE controlled and hence MUST include a "mid" in | |||
in the CLUE group as defined above. | the CLUE group as defined above. | |||
As well as the normal restrictions defined in [RFC3264] the stream | In addition to the normal restrictions defined in [RFC3264], the | |||
MUST be treated as if the "m=" line direction attribute had been set | stream MUST be treated as if the "m=" line direction attribute had | |||
to "a=inactive" until the Media Provider has received a valid CLUE | been set to "a=inactive" until the Media Provider has received a | |||
'configure' message specifying the Capture to be used for this | valid CLUE 'configure' message specifying the Capture to be used for | |||
stream. This means that RTP packets MUST NOT be sent until | this stream. This means that RTP packets MUST NOT be sent until | |||
configuration is complete, while non-media packets such as STUN, RTCP | configuration is complete, while non-media packets such as STUN, | |||
and DTLS MUST be sent as per their relevant specifications if | RTCP, and DTLS MUST be sent as per their relevant specifications, if | |||
negotiated. | negotiated. | |||
Every "m=" line representing a CLUE Encoding MUST contain a "label" | Every "m=" line representing a CLUE Encoding MUST contain a "label" | |||
attribute as defined in [RFC4574]. This label is used to identify | attribute as defined in [RFC4574]. This label is used to identify | |||
the Encoding by the sender in CLUE 'advertisement' messages and by | the Encoding by the sender in CLUE 'advertisement' messages and by | |||
the receiver in CLUE 'configure' messages. Each label used for a | the receiver in CLUE 'configure' messages. Each label used for a | |||
CLUE-controlled "m=" line MUST be different from the label on all | CLUE-controlled "m=" line MUST be different from the label on all | |||
other "m=" lines in the CLUE group, unless an "m=" line represents a | other "m=" lines in the CLUE group, unless an "m=" line represents a | |||
dependent stream related to another "m=" line (such as an FEC | dependent stream related to another "m=" line (such as a Forward | |||
stream), in which case it MUST have the same label value as the "m=" | Error Correction (FEC) stream), in which case it MUST have the same | |||
line on which it depends. | label value as the "m=" line on which it depends. | |||
4.4.1.1. Referencing Encodings in the CLUE protocol | 4.4.1.1. Referencing Encodings in the CLUE Protocol | |||
CLUE Encodings are defined in SDP, but can be referenced from CLUE | CLUE Encodings are defined in SDP but can be referenced from CLUE | |||
protocol messages - this is how the protocol defines which Encodings | protocol messages -- this is how the protocol defines which Encodings | |||
are part of an Encoding Group (in 'advertisement' messages) and which | are a part of an Encoding Group (in 'advertisement' messages) and | |||
Encoding with which to encode a specific Capture (in 'configure' | which Encoding is used to encode a specific Capture (in 'configure' | |||
messages). The labels on the CLUE-controlled "m=" lines are the | messages). The labels on the CLUE-controlled "m=" lines are the | |||
references that are used in the CLUE protocol. | references that are used in the CLUE protocol. | |||
Each <encID> (in encodingIDList) in a CLUE 'advertisement' message | Each <encID> (in encodingIDList) in a CLUE 'advertisement' message | |||
SHOULD represent an Encoding defined in SDP; the specific Encoding | SHOULD represent an Encoding defined in SDP; the specific Encoding | |||
referenced is a CLUE-controlled "m=" line in the most recent SDP | referenced is a CLUE-controlled "m=" line in the most recent SDP | |||
Offer/Answer message sent by the sender of the 'advertisement' | Offer/Answer message sent by the sender of the 'advertisement' | |||
message with a label value corresponding to the text content of the | message with a label value corresponding to the text content of the | |||
<encID>. If the <encID> is not defined in SDP it MUST be one it | <encID>. If the <encID> is not defined in SDP, it MUST be one it | |||
anticipates sending in a subsequent SDP Offer/Answer exchange. | anticipates sending in a subsequent SDP Offer/Answer exchange. | |||
Each <encodingID> (in captureEncodingType) in a CLUE 'configure' | Each <encodingID> (in captureEncodingType) in a CLUE 'configure' | |||
message MUST represent an Encoding defined in SDP; the specific | message MUST represent an Encoding defined in SDP; the specific | |||
Encoding referenced is a CLUE-controlled "m=" line in the most recent | Encoding referenced is a CLUE-controlled "m=" line in the most recent | |||
SDP Offer/Answer message received by the sender of the 'configure' | SDP Offer/Answer message received by the sender of the 'configure' | |||
message with a label value corresponding to the text content of the | message with a label value corresponding to the text content of the | |||
<encodingID>. | <encodingID>. | |||
Note that the non-atomic nature of SDP/CLUE protocol interaction may | Note that the non-atomic nature of SDP/CLUE protocol interaction may | |||
mean that there are temporary periods where an <encID>/<encodingID> | mean that there are temporary periods where an <encID>/<encodingID> | |||
in a CLUE message does not reference an SDP "m=" line, or where an | in a CLUE message does not reference an SDP "m=" line, or where an | |||
Encoding represented in SDP is not referenced in a CLUE protocol | Encoding represented in SDP is not referenced in a CLUE protocol | |||
message. See Section 5 for specifics. | message. See Section 5 for specifics. | |||
4.4.2. Negotiating receipt of CLUE Capture Encodings in SDP | 4.4.2. Negotiating Receipt of CLUE Capture Encodings in SDP | |||
A receiver who wishes to receive a CLUE stream via a specific | A receiver who wishes to receive a CLUE stream via a specific | |||
Encoding requires an "a=recvonly" "m=" line that matches the | Encoding requires an "a=recvonly" "m=" line that matches the | |||
"a=sendonly" Encoding. | "a=sendonly" Encoding. | |||
These "m=" lines are CLUE-controlled and hence MUST include their | These "m=" lines are CLUE controlled and hence MUST include their | |||
"mid" in the CLUE group. They MAY include a "label" attribute, but | "mid" in the CLUE group. They MAY include a "label" attribute, but | |||
this is not required by CLUE, as only label values associated with | this is not required by CLUE, as only label values associated with | |||
"a=sendonly" Encodings are referenced by CLUE protocol messages. | "a=sendonly" Encodings are referenced by CLUE protocol messages. | |||
4.5. SDP Offer/Answer Procedures | 4.5. SDP Offer/Answer Procedures | |||
4.5.1. Generating the Initial Offer | 4.5.1. Generating the Initial Offer | |||
A CLUE-capable device sending an initial SDP offer of a SIP session | A CLUE-capable device sending an initial SDP Offer of a SIP session | |||
and wishing to negotiate CLUE will include an "m=" line for the data | and wishing to negotiate CLUE will include an "m=" line for the data | |||
channel to convey the CLUE protocol, along with a CLUE group | channel to convey the CLUE protocol, along with a CLUE group | |||
containing the "mid" of the data channel "m=" line. | containing the "mid" of the data channel "m=" line. | |||
For interoperability with non-CLUE devices a CLUE-capable device | For interoperability with non-CLUE devices, a CLUE-capable device | |||
sending an initial SDP offer SHOULD NOT include any "m=" line for | sending an initial SDP Offer SHOULD NOT include any "m=" line for | |||
CLUE-controlled media beyond the "m=" line for the CLUE data channel, | CLUE-controlled media beyond the "m=" line for the CLUE data channel, | |||
and SHOULD include at least one non-CLUE-controlled media "m=" line. | and it SHOULD include at least one non-CLUE-controlled media "m=" | |||
line. | ||||
If the device has evidence that the receiver is also CLUE-capable, | If the device has evidence that the receiver is also CLUE capable, | |||
for instance due to receiving an initial INVITE with no SDP but | for instance, due to receiving an initial INVITE with no SDP but | |||
including a "sip.clue" media feature tag, the above recommendation is | including a "sip.clue" media feature tag, the above recommendation is | |||
waived, and the initial offer MAY contain "m=" lines for CLUE- | waived, and the initial offer MAY contain "m=" lines for CLUE- | |||
controlled media. | controlled media. | |||
With the same interoperability recommendations as for Encodings, the | With the same interoperability recommendations as for Encodings, the | |||
sender of the initial SDP offer MAY also include "a=recvonly" media | sender of the initial SDP Offer MAY also include "a=recvonly" media | |||
lines to preallocate "m=" lines to receive media. Alternatively, it | lines to preallocate "m=" lines to receive media. Alternatively, it | |||
MAY wait until CLUE protocol negotiation has completed before | MAY wait until CLUE protocol negotiation has completed before | |||
including these lines in a new offer/answer exchange - see Section 5 | including these lines in a new offer/answer exchange -- see Section 5 | |||
for recommendations. | for recommendations. | |||
4.5.2. Generating the Answer | 4.5.2. Generating the Answer | |||
4.5.2.1. Negotiating use of CLUE and the CLUE data channel | 4.5.2.1. Negotiating Use of CLUE and the CLUE Data Channel | |||
If the recipient of an initial offer is CLUE-capable, and the offer | If the recipient of an initial offer is CLUE capable, and the offer | |||
contains both an "m=" line for a data channel and a CLUE group | contains both an "m=" line for a data channel and a CLUE group | |||
containing the "mid" for that "m=" line, they SHOULD negotiate data | containing the "mid" for that "m=" line, they SHOULD negotiate data | |||
channel support for an "m=" line, and include the "mid" of that "m=" | channel support for an "m=" line and include the "mid" of that "m=" | |||
line in a corresponding CLUE group. | line in a corresponding CLUE group. | |||
A CLUE-capable recipient that receives an "m=" line for a data | A CLUE-capable recipient that receives an "m=" line for a data | |||
channel but no corresponding CLUE group containing the "mid" of that | channel but no corresponding CLUE group containing the "mid" of that | |||
"m=" line MAY still include a corresponding data channel "m=" line if | "m=" line MAY still include a corresponding data channel "m=" line if | |||
there are any other non-CLUE protocols it can convey over that | there are any other non-CLUE protocols it can convey over that | |||
channel, but MUST NOT negotiate use of the CLUE protocol on this | channel, but the use of the CLUE protocol MUST NOT be negotiated on | |||
channel. | this channel. | |||
4.5.2.2. Negotiating CLUE-controlled media | 4.5.2.2. Negotiating CLUE-Controlled Media | |||
If the initial offer contained "a=recvonly" CLUE-controlled media | If the initial offer contained "a=recvonly" CLUE-controlled media | |||
lines the recipient SHOULD include corresponding "a=sendonly" CLUE- | lines, the recipient SHOULD include corresponding "a=sendonly" CLUE- | |||
controlled media lines for accepted Encodings, up to the maximum | controlled media lines for accepted Encodings, up to the maximum | |||
number of Encodings it wishes to advertise. As CLUE-controlled | number of Encodings it wishes to advertise. As CLUE-controlled | |||
media, the "mid" of these "m=" lines MUST be included in the | media, the "mid" of these "m=" lines MUST be included in the | |||
corresponding CLUE group. The recipient MUST set the direction of | corresponding CLUE group. The recipient MUST set the direction of | |||
the corresponding "m=" lines of any remaining "a=recvonly" CLUE- | the corresponding "m=" lines of any remaining "a=recvonly" CLUE- | |||
controlled media lines received in the offer to "a=inactive". | controlled media lines received in the offer to "a=inactive". | |||
If the initial offer contained "a=sendonly" CLUE-controlled media | If the initial offer contained "a=sendonly" CLUE-controlled media | |||
lines the recipient MAY include corresponding "a=recvonly" CLUE- | lines, the recipient MAY include corresponding "a=recvonly" CLUE- | |||
controlled media lines, up to the maximum number of Capture Encodings | controlled media lines, up to the maximum number of Capture Encodings | |||
it wishes to receive. Alternatively, it MAY wait until CLUE protocol | it wishes to receive. Alternatively, it MAY wait until CLUE protocol | |||
negotiation has completed before including these lines in a new | negotiation has completed before including these lines in a new | |||
offer/answer exchange - see Section 5 for recommendations. The | offer/answer exchange -- see Section 5 for recommendations. The | |||
recipient MUST set the direction of the corresponding "m=" lines of | recipient MUST set the direction of the corresponding "m=" lines of | |||
any remaining "a=sendonly" CLUE-controlled media lines received in | any remaining "a=sendonly" CLUE-controlled media lines received in | |||
the offer to "a=inactive" | the offer to "a=inactive". | |||
4.5.2.3. Negotiating non-CLUE controlled media | 4.5.2.3. Negotiating Non-CLUE-controlled Media | |||
A CLUE-controlled device implementation MAY prefer to render initial, | A CLUE-controlled device implementation MAY prefer to render initial, | |||
single-stream audio and/or video for the user as rapidly as possible, | single-stream audio and/or video for the user as rapidly as possible, | |||
transitioning to CLUE-controlled media once that has been negotiated. | transitioning to CLUE-controlled media once that has been negotiated. | |||
Alternatively, an implementation MAY wish to suppress initial media, | Alternatively, an implementation MAY wish to suppress initial media, | |||
only providing media once the final, CLUE-controlled streams have | only providing media once the final, CLUE-controlled streams have | |||
been negotiated. | been negotiated. | |||
The receiver of the initial offer, if making the call CLUE-enabled | The receiver of the initial offer, if making the call CLUE-enabled | |||
with their SDP answer, can make their preference clear by their | with their SDP Answer, can make their preference clear by their | |||
action in accepting or rejecting non-CLUE-controlled media lines. | action in accepting or rejecting non-CLUE-controlled media lines. | |||
Rejecting these "m=" lines will ensure that no non-CLUE-controlled | Rejecting these "m=" lines will ensure that no non-CLUE-controlled | |||
media flows before the CLUE-controlled media is negotiated. In | media flows before the CLUE-controlled media is negotiated. In | |||
contrast, accepting one or more non-CLUE-controlled "m=" lines in | contrast, accepting one or more non-CLUE-controlled "m=" lines in | |||
this initial answer will enable initial media to flow. | this initial answer will enable initial media to flow. | |||
If the answerer chooses to send initial non-CLUE-controlled media in | If the answerer chooses to send initial non-CLUE-controlled media in | |||
a CLUE-enabled call, Section 4.5.4.1 addresses the need to disable it | a CLUE-enabled call, Section 4.5.4.1 addresses the need to disable it | |||
once CLUE-controlled media is fully negotiated. | once the CLUE-controlled media is fully negotiated. | |||
4.5.3. Processing the initial Offer/Answer negotiation | 4.5.3. Processing the Initial Offer/Answer Negotiation | |||
In the event that both offer and answer include a data channel "m=" | In the event that both the offer and answer include a data channel | |||
line with a mid value included in corresponding CLUE groups, CLUE has | "m=" line with a "mid" value included in corresponding CLUE groups, | |||
been successfully negotiated and the call is now CLUE-enabled. If | CLUE has been successfully negotiated, and the call is now CLUE | |||
not then the call is not CLUE-enabled. | enabled. If not, then the call is not CLUE enabled. | |||
4.5.3.1. Successful CLUE negotiation | 4.5.3.1. Successful CLUE Negotiation | |||
In the event of successful CLUE-enablement of the call, devices MUST | In the event of successful CLUE enablement of the call, devices MUST | |||
now begin negotiation of the CLUE channel, see | now begin negotiation of the CLUE channel; see [RFC8850] for | |||
[I-D.ietf-clue-datachannel] for negotiation details. If negotiation | negotiation details. If negotiation is successful, the sending of | |||
is successful, sending of CLUE protocol [I-D.ietf-clue-protocol] | CLUE protocol messages [RFC8847] can begin. | |||
messages can begin. | ||||
A CLUE-capable device MAY choose not to send RTP on the non-CLUE- | A CLUE-capable device MAY choose not to send RTP on the non-CLUE- | |||
controlled channels during the period in which control of the CLUE- | controlled channels during the period in which control of the CLUE- | |||
controlled media lines is being negotiated (though RTCP MUST still be | controlled media lines is being negotiated (though RTCP MUST still be | |||
sent and received as normal). However, a CLUE-capable device MUST | sent and received as normal). However, a CLUE-capable device MUST | |||
still be prepared to receive media on non-CLUE-controlled media lines | still be prepared to receive media on non-CLUE-controlled media lines | |||
that have been successfully negotiated as defined in [RFC3264]. | that have been successfully negotiated as defined in [RFC3264]. | |||
If either side of the call wishes to add additional CLUE-controlled | If either side of the call wishes to add additional CLUE-controlled | |||
"m=" lines to send or receive CLUE-controlled media they MAY now send | "m=" lines to send or receive CLUE-controlled media, they MAY now | |||
a SIP request with a new SDP offer following the normal rules of SDP | send a SIP request with a new SDP Offer following the normal rules of | |||
offer/answer and any negotiated extensions. | SDP Offer/Answer and any negotiated extensions. | |||
4.5.3.2. CLUE negotiation failure | 4.5.3.2. CLUE Negotiation Failure | |||
In the event that the negotiation of CLUE fails and the call is not | In the event that the negotiation of CLUE fails and the call is not | |||
CLUE-enabled once the initial offer/answer negotiation completes then | CLUE enabled once the initial offer/answer negotiation completes, | |||
CLUE is not in use in the call. The CLUE-capable devices MUST either | then CLUE is not in use in the call. CLUE-capable devices MUST | |||
revert to non-CLUE behaviour or terminate the call. | either revert to non-CLUE behavior or terminate the call. | |||
4.5.4. Modifying the session | 4.5.4. Modifying the Session | |||
4.5.4.1. Adding and removing CLUE-controlled media | 4.5.4.1. Adding and Removing CLUE-Controlled Media | |||
Subsequent offer/answer exchanges MAY add additional "m=" lines for | Subsequent offer/answer exchanges MAY add additional "m=" lines for | |||
CLUE-controlled media, or activate or deactivate existing "m=" lines | CLUE-controlled media or activate or deactivate existing "m=" lines | |||
per the standard SDP mechanisms. | per the standard SDP mechanisms. | |||
In most cases at least one additional exchange after the initial | In most cases, at least one additional exchange after the initial | |||
offer/answer exchange will be required before both sides have added | offer/answer exchange will be required before both sides have added | |||
all the Encodings and ability to receive Encodings that they desire. | all the Encodings and the ability to receive Encodings that they | |||
Devices MAY delay adding "a=recvonly" CLUE-controlled "m=" lines | desire. Devices MAY delay adding "a=recvonly" CLUE-controlled "m=" | |||
until after CLUE protocol negotiation completes - see Section 5 for | lines until after CLUE protocol negotiation completes -- see | |||
recommendations. | Section 5 for recommendations. | |||
Once CLUE media has been successfully negotiated devices SHOULD | Once CLUE media has been successfully negotiated, devices SHOULD | |||
ensure that non-CLUE-controlled media is deactivated by setting their | ensure that non-CLUE-controlled media is deactivated by setting their | |||
ports to 0 in cases where it corresponds to the media type of CLUE- | ports to 0 in cases where it corresponds to the media type of CLUE- | |||
controlled media that has been successfully negotiated. This | controlled media that has been successfully negotiated. This | |||
deactivation may require an additional SDP exchange, or may be | deactivation may require an additional SDP exchange or may be | |||
incorporated into one that is part of the CLUE negotiation. | incorporated into one that is part of the CLUE negotiation. | |||
4.5.4.2. Enabling CLUE mid-call | 4.5.4.2. Enabling CLUE Mid-Call | |||
A CLUE-capable device that receives an initial SDP offer from a non- | A CLUE-capable device that receives an initial SDP Offer from a non- | |||
CLUE device SHOULD include a new data channel "m=" line and | CLUE device SHOULD include a new data channel "m=" line and | |||
corresponding CLUE group in any subsequent offers it sends, to | corresponding CLUE group in any subsequent offers it sends, to | |||
indicate that it is CLUE-capable. | indicate that it is CLUE capable. | |||
If, in an ongoing non-CLUE call, an SDP offer/answer exchange | If, in an ongoing non-CLUE call, an SDP Offer/Answer exchange | |||
completes with both sides having included a data channel "m=" line in | completes with both sides having included a data channel "m=" line in | |||
their SDP and with the "mid" for that channel in a corresponding CLUE | their SDP and with the "mid" for that channel in a corresponding CLUE | |||
group then the call is now CLUE-enabled; negotiation of the data | group, then the call is now CLUE enabled; negotiation of the data | |||
channel and subsequently the CLUE protocol begins. | channel and subsequently the CLUE protocol begins. | |||
4.5.4.3. Disabling CLUE mid-call | 4.5.4.3. Disabling CLUE Mid-Call | |||
If, during an ongoing CLUE-enabled call a device wishes to disable | If, during an ongoing CLUE-enabled call, a device wishes to disable | |||
CLUE, it can do so by following the procedures for closing a data | CLUE, it can do so by following the procedures for closing a data | |||
channel defined in Section 5.2.4 of | channel as defined in Section 6.6.1 of [RFC8864]: sending a new SDP | |||
[I-D.ietf-mmusic-data-channel-sdpneg]: sending a new SDP offer/answer | Offer/Answer exchange and subsequent SCTP Stream Sequence Number | |||
exchange and subsequent SCTP SSN reset for the CLUE channel. It MUST | (SSN) reset for the CLUE channel. It MUST also remove the CLUE | |||
also remove the CLUE group. Without the CLUE group any "m=" lines | group. Without the CLUE group, any "m=" lines that were previously | |||
that were previously CLUE-controlled no longer are; implementations | CLUE controlled no longer are; implementations MAY disable them by | |||
MAY disable them by setting their ports to 0 or MAY continue to use | setting their ports to 0 or MAY continue to use them -- in the latter | |||
them - in the latter case how they are used is outside the scope of | case, how they are used is outside the scope of this document. | |||
this document. | ||||
If a device follows the procedure above, or an SDP offer-answer | If a device follows the procedure above, or an SDP Offer/Answer | |||
negotiation completes in a fashion in which either the "m=" CLUE data | negotiation completes in a fashion in which either the "m=" CLUE data | |||
channel line was not successfully negotiated, and/or one side did not | channel line was not successfully negotiated and/or one side did not | |||
include the data channel in the CLUE group then CLUE for this call is | include the data channel in the CLUE group, then CLUE for this call | |||
disabled. In the event that this occurs, CLUE is no longer enabled. | is disabled. In the event that this occurs, CLUE is no longer | |||
Any active "m=" lines still included in the CLUE group are no longer | enabled. Any active "m=" lines still included in the CLUE group are | |||
CLUE-controlled and the implementation MAY either disable them in a | no longer CLUE controlled, and the implementation MAY either disable | |||
subsequent negotiation or continue to use them in some other fashion. | them in a subsequent negotiation or continue to use them in some | |||
If the data channel is still present but not included in the CLUE | other fashion. If the data channel is still present but not included | |||
group semantic CLUE protocol messages MUST no longer be sent. | in the CLUE group semantic, CLUE protocol messages MUST no longer be | |||
sent. | ||||
4.5.4.4. CLUE protocol failure mid-call | 4.5.4.4. CLUE Protocol Failure Mid-Call | |||
In contrast to the specific disablement of the use of CLUE described | In contrast to the specific disablement of the use of CLUE described | |||
above, the CLUE channel may fail unexpectedly. Two circumstances | above, the CLUE channel may fail unexpectedly. Two circumstances | |||
where this can occur are: | where this can occur are: | |||
o The CLUE data channel terminates, either gracefully or | * The CLUE data channel terminates, either gracefully or | |||
ungracefully, without any corresponding SDP renegotiation. | ungracefully, without any corresponding SDP renegotiation. | |||
o A channel error of the CLUE protocol causes it to return to the | * A channel error of the CLUE protocol causes it to return to the | |||
IDLE state as defined in Section 6. of [I-D.ietf-clue-protocol]. | IDLE state as defined in Section 6 of [RFC8847]. | |||
In this circumstance implementations SHOULD continue to transmit and | In this circumstance, implementations SHOULD continue to transmit and | |||
receive CLUE-controlled media on the basis of the last negotiated | receive CLUE-controlled media on the basis of the last negotiated | |||
CLUE messages, until the CLUE protocol is re-established (in the | CLUE messages, until the CLUE protocol is re-established (in the | |||
event of a channel error) or disabled mid-call by an SDP exchange as | event of a channel error) or disabled mid-call by an SDP exchange as | |||
defined in Section 4.5.4.3. Implementations MAY choose to send such | defined in Section 4.5.4.3. Implementations MAY choose to send such | |||
an SDP request to disable CLUE immediately or MAY continue on in a | an SDP request to disable CLUE immediately or MAY continue on in a | |||
call-preservation mode. | call-preservation mode. | |||
5. Interaction of CLUE protocol and SDP negotiations | 5. Interaction of the CLUE Protocol and SDP Negotiations | |||
Information about media streams in CLUE is split between two message | Information about media streams in CLUE is split between two message | |||
types: SDP, which defines media addresses and limits, and the CLUE | types: SDP, which defines media addresses and limits, and the CLUE | |||
channel, which defines properties of Capture Devices available, scene | channel, which defines properties of Capture Devices available, scene | |||
information and additional constraints. As a result certain | information, and additional constraints. As a result, certain | |||
operations, such as advertising support for a new transmissible | operations, such as advertising support for a new transmissible | |||
Capture with associated stream, cannot be performed atomically, as | Capture with an associated stream, cannot be performed atomically, as | |||
they require changes to both SDP and CLUE messaging. | they require changes to both SDP and CLUE messaging. | |||
This section defines how the negotiation of the two protocols | This section defines how the negotiation of the two protocols | |||
interact, provides some recommendations on dealing with intermediate | interact, provides some recommendations on dealing with intermediate | |||
stages in non-atomic operations, and mandates additional constraints | stages in non-atomic operations, and mandates additional constraints | |||
on when CLUE-configured media can be sent. | on when CLUE-configured media can be sent. | |||
5.1. Independence of SDP and CLUE negotiation | 5.1. Independence of SDP and CLUE Negotiation | |||
To avoid the need to implement interlocking state machines with the | To avoid the need to implement interlocking state machines with the | |||
potential to reach invalid states if messages were to be lost, or be | potential to reach invalid states if messages were to be lost, or be | |||
rewritten en-route by middle boxes, the state machines in SDP and | rewritten en route by middleboxes, the state machines in SDP and CLUE | |||
CLUE operate independently. The state of the CLUE channel does not | operate independently. The state of the CLUE channel does not | |||
restrict when an implementation may send a new SDP offer or answer, | restrict when an implementation may send a new SDP Offer or Answer; | |||
and likewise the implementation's ability to send a new CLUE | likewise, the implementation's ability to send a new CLUE | |||
'advertisement' or 'configure' message is not restricted by the | 'advertisement' or 'configure' message is not restricted by the | |||
results of or the state of the most recent SDP negotiation (unless | results of or the state of the most recent SDP negotiation (unless | |||
the SDP negotiation has removed the CLUE channel). | the SDP negotiation has removed the CLUE channel). | |||
The primary implication of this is that a device may receive an SDP | The primary implication of this is that a device may receive an SDP | |||
Offer/Answer message with a CLUE Encoding for which it does not yet | Offer/Answer message with a CLUE Encoding for which it does not yet | |||
have Capture information, or receive a CLUE 'configure' message | have Capture information or receive a CLUE 'configure' message | |||
specifying a Capture Encoding for which the far end has not | specifying a Capture Encoding for which the far end has not | |||
negotiated a media stream in SDP. | negotiated a media stream in SDP. | |||
CLUE messages contain an <encID> (in encodingIDList) or <encodingID> | CLUE messages contain an <encID> (in encodingIDList) or <encodingID> | |||
(in captureEncodingType), which is used to identify a specific | (in captureEncodingType), which is used to identify a specific | |||
encoding or captureEncoding in SDP; see | Encoding or captureEncoding in SDP; see [RFC8846] for specifics. The | |||
[I-D.ietf-clue-data-model-schema] for specifics. The non-atomic | non-atomic nature of CLUE negotiation means that a sender may wish to | |||
nature of CLUE negotiation means that a sender may wish to send a new | send a new CLUE 'advertisement' message before the corresponding SDP | |||
CLUE 'advertisement' message before the corresponding SDP message. | message. As such, the sender of the CLUE message MAY include an | |||
As such the sender of the CLUE message MAY include an <encID> which | <encID> that does not currently match a CLUE-controlled "m=" line | |||
does not currently match a CLUE-controlled "m=" line label in SDP; A | label in SDP; a CLUE-capable implementation MUST NOT reject a CLUE | |||
CLUE-capable implementation MUST NOT reject a CLUE protocol message | protocol message solely because it contains <encID> elements that do | |||
solely because it contains <encID> elements that do not match a label | not match a label in SDP. | |||
in SDP. | ||||
The current state of the CLUE participant or Media Provider/Consumer | The current state of the CLUE Participant or Media Provider/Consumer | |||
state machines do not affect compliance with any of the normative | state machines does not affect compliance with any of the normative | |||
language of [RFC3264]. That is, they MUST NOT delay an ongoing SDP | language of [RFC3264]. That is, they MUST NOT delay an ongoing SDP | |||
exchange as part of a SIP server or client transaction; an | exchange as part of a SIP server or client transaction; an | |||
implementation MUST NOT delay an SDP exchange while waiting for CLUE | implementation MUST NOT delay an SDP exchange while waiting for CLUE | |||
negotiation to complete or for a 'configure' message to arrive. | negotiation to complete or for a 'configure' message to arrive. | |||
Similarly, a device in a CLUE-enabled call MUST NOT delay any | Similarly, a device in a CLUE-enabled call MUST NOT delay any | |||
mandatory state transitions in the CLUE Participant or Media | mandatory state transitions in the CLUE Participant or Media | |||
Provider/Consumer state machines due to the presence or absence of an | Provider/Consumer state machines due to the presence or absence of an | |||
ongoing SDP exchange. | ongoing SDP exchange. | |||
A device with the CLUE Participant state machine in the ACTIVE state | A device with the CLUE Participant state machine in the ACTIVE state | |||
MAY choose to delay moving from ESTABLISHED to ADV (Media Provider | MAY choose to delay moving from ESTABLISHED to ADV (Media Provider | |||
state machine) or from ESTABLISHED to WAIT FOR CONF RESPONSE (Media | state machine) or from ESTABLISHED to WAIT FOR CONF RESPONSE (Media | |||
Consumer state machine) based on the SDP state. See | Consumer state machine) based on the SDP state. See [RFC8847] for | |||
[I-D.ietf-clue-protocol] for CLUE state machine specifics. | CLUE state machine specifics. Similarly, a device MAY choose to | |||
Similarly, a device MAY choose to delay initiating a new SDP exchange | delay initiating a new SDP exchange based on the state of their CLUE | |||
based on the state of their CLUE state machines. | state machines. | |||
5.2. Constraints on sending media | 5.2. Constraints on Sending Media | |||
While SDP and CLUE message states do not impose constraints on each | While SDP and CLUE message states do not impose constraints on each | |||
other, both impose constraints on the sending of media - CLUE- | other, both impose constraints on the sending of media -- CLUE- | |||
controlled media MUST NOT be sent unless it has been negotiated in | controlled media MUST NOT be sent unless it has been negotiated in | |||
both CLUE and SDP: an implementation MUST NOT send a specific CLUE | both CLUE and SDP: an implementation MUST NOT send a specific CLUE | |||
Capture Encoding unless its most recent SDP exchange contains an | Capture Encoding unless its most recent SDP exchange contains an | |||
active media channel for that Encoding AND it has received a CLUE | active media channel for that Encoding AND it has received a CLUE | |||
'configure' message specifying a valid Capture for that Encoding. | 'configure' message specifying a valid Capture for that Encoding. | |||
5.3. Recommendations for operating with non-atomic operations | 5.3. Recommendations for Operating with Non-atomic Operations | |||
CLUE-capable devices MUST be able to handle states in which CLUE | CLUE-capable devices MUST be able to handle states in which CLUE | |||
messages make reference to EncodingIDs that do not match the most | messages make reference to EncodingIDs that do not match the most | |||
recently received SDP, irrespective of the order in which SDP and | recently received SDP, irrespective of the order in which SDP and | |||
CLUE messages are received. While these mismatches will usually be | CLUE messages are received. While these mismatches will usually be | |||
transitory a device MUST be able to cope with such mismatches | transitory, a device MUST be able to cope with such mismatches | |||
remaining indefinitely. However, this document makes some | remaining indefinitely. However, this document makes some | |||
recommendations on message ordering for these non-atomic transitions. | recommendations on message ordering for these non-atomic transitions. | |||
CLUE-capable devices MUST ensure that any inconsistencies between SDP | CLUE-capable devices MUST ensure that any inconsistencies between SDP | |||
and CLUE signaling are temporary by sending updated SDP or CLUE | and CLUE signaling are temporary by sending updated SDP or CLUE | |||
messages as soon as the relevant state machines and other constraints | messages as soon as the relevant state machines and other constraints | |||
permit. | permit. | |||
Generally, implementations that receive messages for which they have | Generally, implementations that receive messages with incomplete | |||
incomplete information will be most efficient if they wait until they | information will be most efficient if they wait until they have the | |||
have the corresponding information they lack before sending messages | corresponding information they lack before sending messages to make | |||
to make changes related to that information. For example, an | changes related to that information. For example, an answerer that | |||
answerer that receives a new SDP offer with three new "a=sendonly" | receives a new SDP Offer with three new "a=sendonly" CLUE "m=" lines | |||
CLUE "m=" lines for which it has received no CLUE 'advertisement' | for which it has received no CLUE 'advertisement' message providing | |||
message providing the corresponding capture information would | the corresponding capture information would typically include | |||
typically inclue corresponding "a=inactive" lines in its answer, and | corresponding "a=inactive" lines in its answer, and it would only | |||
only make a new SDP offer with "a=recvonly" when and if a new | make a new SDP Offer with "a=recvonly" when and if a new | |||
'advertisement' message arrives with Captures relevant to those | 'advertisement' message arrives with Captures relevant to those | |||
Encodings. | Encodings. | |||
Because of the constraints of SDP offer/answer and because new SDP | Because of the constraints of SDP Offer/Answer and because new SDP | |||
negotiations are generally more 'costly' than sending a new CLUE | negotiations are generally more 'costly' than sending a new CLUE | |||
message, implementations needing to make changes to both channels | message, implementations needing to make changes to both channels | |||
SHOULD prioritize sending the updated CLUE message over sending the | SHOULD prioritize sending the updated CLUE message over sending the | |||
new SDP message. The aim is for the recipient to receive the CLUE | new SDP message. The aim is for the recipient to receive the CLUE | |||
changes before the SDP changes, allowing the recipient to send their | changes before the SDP changes, allowing the recipient to send their | |||
SDP answers without incomplete information, reducing the number of | SDP Answers without incomplete information and reducing the number of | |||
new SDP offers required. | new SDP Offers required. | |||
6. Interaction of CLUE protocol and RTP/RTCP CaptureID | 6. Interaction of the CLUE Protocol and RTP/RTCP CaptureID | |||
The CLUE Framework [I-D.ietf-clue-framework] allows for Multiple | The CLUE Framework [RFC8845] allows for Multiple Content Captures | |||
Content Captures (MCCs): Captures which contain multiple source | (MCCs): Captures that contain multiple source Captures, whether | |||
Captures, whether composited into a single stream or switched based | composited into a single stream or switched based on some metric. | |||
on some metric. | ||||
The Captures that contribute to these MCCs may or may not be defined | The Captures that contribute to these MCCs may or may not be defined | |||
in the 'advertisement' message. If they are defined and the MCC is | in the 'advertisement' message. If they are defined and the MCC is | |||
providing them in a switched format the recipient may wish to | providing them in a switched format, the recipient may wish to | |||
determine which originating source Capture is currently being | determine which originating source Capture is currently being | |||
provided, so that they can apply geometric corrections based on that | provided, so that they can apply geometric corrections based on that | |||
Capture's geometry, or take some other action based on the original | Capture's geometry or take some other action based on the original | |||
Capture information. | Capture information. | |||
To do this, [I-D.ietf-clue-rtp-mapping] allows for the CaptureID of | To do this, [RFC8849] allows for the CaptureID of the originating | |||
the originating Capture to be conveyed via RTP or RTCP. A Media | Capture to be conveyed via RTP or RTCP. A Media Provider sending | |||
Provider sending switched media for an MCC with defined originating | switched media for an MCC with defined originating sources MUST send | |||
sources MUST send the CaptureID in both RTP and RTCP, as described in | the CaptureID in both RTP and RTCP, as described in the mapping | |||
the mapping document. | document. | |||
6.1. CaptureID reception during MCC redefinition | 6.1. CaptureID Reception during MCC Redefinition | |||
Because the RTP/RTCP CaptureID is delivered via a different channel | Because the RTP/RTCP CaptureID is delivered via a different channel | |||
to the 'advertisement' message in which in the contents of the MCC | to the 'advertisement' message in which in the contents of the MCC | |||
are defined there is an intrinsic race condition in cases in which | are defined, there is an intrinsic race condition in cases where the | |||
the contents of an MCC are redefined. | contents of an MCC are redefined. | |||
When a Media Provider redefines an MCC which involves CaptureIDs, the | When a Media Provider redefines an MCC that involves CaptureIDs, the | |||
reception of the relevant CaptureIDs by the recipient will either | reception of the relevant CaptureIDs by the recipient will either | |||
lead or lag reception and processing of the new 'advertisement' | lead or lag reception and the processing of the new 'advertisement' | |||
message by the recipient. As such, a Media Consumer MUST NOT be | message by the recipient. As such, a Media Consumer MUST NOT be | |||
disrupted by any of the following in any CLUE-controlled media stream | disrupted by any of the following scenarios in any CLUE-controlled | |||
it is receiving, whether that stream is for a static Capture or for | media stream it is receiving, whether that stream is for a static | |||
an MCC (as any static Capture may be redefined to an MCC in a later | Capture or for an MCC (as any static Capture may be redefined to an | |||
'advertisement' message): | MCC in a later 'advertisement' message): | |||
o Receiving RTP or RTCP containing a CaptureID when the most | * By receiving RTP or RTCP containing a CaptureID when the most | |||
recently processed 'advertisement' message means that none are | recently processed 'advertisement' message means that no media | |||
expected. | CaptureIDs are expected. | |||
o Receiving RTP or RTCP without CaptureIDs when the most recently | * By receiving RTP or RTCP without CaptureIDs when the most recently | |||
processed 'advertisement' message means that media CaptureIDs are | processed 'advertisement' message means that media CaptureIDs are | |||
expected. | expected. | |||
o Receiving a CaptureID in RTP or RTCP for a Capture defined in the | * By receiving a CaptureID in RTP or RTCP for a Capture defined in | |||
most recently processed 'advertisement' message, but which the | the most recently processed 'advertisement' message, but which the | |||
same 'advertisement' message does not include in the MCC. | same 'advertisement' message does not include in the MCC. | |||
o Receiving a CaptureID in RTP or RTCP for a Capture not defined in | * By receiving a CaptureID in RTP or RTCP for a Capture not defined | |||
the most recently processed 'advertisement' message. | in the most recently processed 'advertisement' message. | |||
7. Multiplexing of CLUE-controlled media using BUNDLE | 7. Multiplexing of CLUE-Controlled Media Using BUNDLE | |||
7.1. Overview | 7.1. Overview | |||
A CLUE call may involve sending and/or receiving significant numbers | A CLUE call may involve sending and/or receiving significant numbers | |||
of media streams. Conventionally, media streams are sent and | of media streams. Conventionally, media streams are sent and | |||
received on unique ports. However, each separate port used for this | received on unique ports. However, each separate port used for this | |||
purpose may impose costs that a device wishes to avoid, such as the | purpose may impose costs that a device wishes to avoid, such as the | |||
need to open that port on firewalls and NATs, the need to collect ICE | need to open that port on firewalls and NATs, the need to collect | |||
candidates [RFC8445], etc. | Interactive Connectivity Establishment (ICE) candidates [RFC8445], | |||
etc. | ||||
The BUNDLE [I-D.ietf-mmusic-sdp-bundle-negotiation] extension can be | The BUNDLE extension [RFC8843] can be used to negotiate the | |||
used to negotiate the multiplexing of multiple media lines onto a | multiplexing of multiple media lines onto a single 5-tuple for | |||
single 5-tuple for sending and receiving media, allowing devices in | sending and receiving media, allowing devices in calls to another | |||
calls to another BUNDLE-supporting device to potentially avoid some | BUNDLE-supporting device to potentially avoid some of the above | |||
of the above costs. | costs. | |||
While CLUE-capable devices MAY support the BUNDLE extension for this | While CLUE-capable devices MAY support the BUNDLE extension for this | |||
purpose supporting the extension is not mandatory for a device to be | purpose, supporting the extension is not mandatory for a device to be | |||
CLUE-compliant. | CLUE compliant. | |||
A CLUE-capable device that supports BUNDLE SHOULD also support rtcp- | A CLUE-capable device that supports BUNDLE SHOULD also support rtcp- | |||
mux [RFC5761]. However, a CLUE-capable device that supports rtcp-mux | mux [RFC5761]. However, a CLUE-capable device that supports rtcp-mux | |||
may or may not support BUNDLE. | may or may not support BUNDLE. | |||
7.2. Usage of BUNDLE with CLUE | 7.2. Usage of BUNDLE with CLUE | |||
This specification imposes no additional requirements or restrictions | This specification imposes no additional requirements or restrictions | |||
on the usage of BUNDLE when used with CLUE. There is no restriction | on the usage of BUNDLE when used with CLUE. There is no restriction | |||
on combining CLUE-controlled media lines and non-CLUE-controlled | on combining CLUE-controlled media lines and non-CLUE-controlled | |||
media lines in the same BUNDLE group or in multiple such groups. | media lines in the same BUNDLE group or in multiple such groups. | |||
However, there are several steps an implementation may wish to take | However, there are several steps an implementation may wish to take | |||
to ameliorate the cost and time requirements of extra SDP offer/ | to ameliorate the cost and time requirements of extra SDP Offer/ | |||
answer exchanges between CLUE and BUNDLE. | Answer exchanges between CLUE and BUNDLE. | |||
7.2.1. Generating the Initial Offer | 7.2.1. Generating the Initial Offer | |||
BUNDLE mandates that the initial SDP offer MUST use a unique address | BUNDLE mandates that the initial SDP Offer MUST use a unique address | |||
for each "m=" line with a non-zero port. Because CLUE | for each "m=" line with a non-zero port. Because CLUE | |||
implementations generally will not include CLUE-controlled media | implementations generally will not include CLUE-controlled media | |||
lines with the exception of the data channel in the initial SDP | lines, with the exception of the data channel in the initial SDP | |||
offer, CLUE devices that support large numbers of streams can avoid | Offer, CLUE devices that support large numbers of streams can avoid | |||
ever having to open large numbers of ports if they successfully | ever having to open large numbers of ports if they successfully | |||
negotiate BUNDLE. | negotiate BUNDLE. | |||
An implementation that does include CLUE-controlled media lines in | An implementation that does include CLUE-controlled media lines in | |||
its initial SDP offer while also using BUNDLE must take care to avoid | its initial SDP Offer while also using BUNDLE must take care to avoid | |||
renderings its CLUE-controlled media lines unusable in the event the | rendering its CLUE-controlled media lines unusable in the event the | |||
far end does not negotiate BUNDLE if it wishes to avoid the risk of | far end does not negotiate BUNDLE if it wishes to avoid the risk of | |||
additional SDP exchanges to resolve this issue. This is best | additional SDP exchanges to resolve this issue. This is best | |||
achieved by not sending any CLUE-controlled media lines in an initial | achieved by not sending any CLUE-controlled media lines in an initial | |||
offer with the 'bundle-only' attribute unless it has been established | offer with the 'bundle-only' attribute unless it has been established | |||
via some other channel that the recipient supports and is able to use | via some other channel that the recipient supports and is able to use | |||
BUNDLE. | BUNDLE. | |||
7.2.2. Multiplexing of the data channel and RTP media | 7.2.2. Multiplexing of the Data Channel and RTP Media | |||
BUNDLE-supporting CLUE-capable devices MAY include the data channel | BUNDLE-supporting CLUE-capable devices MAY include the data channel | |||
in the same BUNDLE group as RTP media. In this case the device MUST | in the same BUNDLE group as RTP media. In this case, the device MUST | |||
be able to demultiplex the various transports - see section 9.2 of | be able to demultiplex the various transports -- see Section 9.2 of | |||
the BUNDLE draft [I-D.ietf-mmusic-sdp-bundle-negotiation]. If the | the BUNDLE specification [RFC8843]. If the BUNDLE group includes | |||
BUNDLE group includes other protocols than the data channel | protocols other than the data channel transported via DTLS, the | |||
transported via DTLS the device MUST also be able to differentiate | device MUST also be able to differentiate the various protocols. | |||
the various protocols. | ||||
8. Example: A call between two CLUE-capable Endpoints | 8. Example: A Call between Two CLUE-Capable Endpoints | |||
This example illustrates a call between two CLUE-capable Endpoints. | This example illustrates a call between two CLUE-capable Endpoints. | |||
Alice, initiating the call, is a system with three cameras and three | Alice, initiating the call, is a system with three cameras and three | |||
screens. Bob, receiving the call, is a system with two cameras and | screens. Bob, receiving the call, is a system with two cameras and | |||
two screens. A call-flow diagram is presented, followed by a summary | two screens. A call-flow diagram is presented, followed by a summary | |||
of each message. | of each message. | |||
To manage the size of this section the SDP snippets only illustrate | To manage the size of this section, the SDP snippets only illustrate | |||
video "m=" lines. SIP ACKs are not always discussed. Note that | video "m=" lines. SIP ACKs are not always discussed. Note that | |||
BUNDLE is not in use. | BUNDLE is not in use. | |||
+----------+ +-----------+ | +----------+ +-----------+ | |||
| Alice | | Bob | | | Alice | | Bob | | |||
| | | | | | | | | | |||
+----+-----+ +-----+-----+ | +----+-----+ +-----+-----+ | |||
| | | | | | |||
| | | | | | |||
| SIP INVITE 1 | | | SIP INVITE 1 | | |||
skipping to change at page 19, line 17 ¶ | skipping to change at line 864 ¶ | |||
| | | | | | |||
| | | | | | |||
|<########### MEDIA 3 ############>| | |<########### MEDIA 3 ############>| | |||
| 2 video A->B, 2 video B->A | | | 2 video A->B, 2 video B->A | | |||
|<################################>| | |<################################>| | |||
| | | | | | |||
| | | | | | |||
| | | | | | |||
v v | v v | |||
In SIP INVITE 1, Alice sends Bob a SIP INVITE including in the SDP | In SIP INVITE 1, Alice sends Bob a SIP INVITE with the basic audio | |||
body the basic audio and video capabilities and the data channel as | and video capabilities and data channel included in the SIP body as | |||
per [I-D.ietf-mmusic-sctp-sdp]. Alice also includes the "sip.clue" | per [RFC8841]. Alice also includes the "sip.clue" media feature tag | |||
media feature tag in the INVITE. A snippet of the SDP showing the | in the INVITE. A snippet of the SDP showing the grouping attribute | |||
grouping attribute and the video "m=" line are shown below. Alice | and the video "m=" line are shown below. Alice has included a "CLUE" | |||
has included a "CLUE" group, and included the mid corresponding to a | group and the mid corresponding to a data channel in the group (3). | |||
data channel in the group (3). Note that Alice has chosen not to | Note that Alice has chosen not to include any CLUE-controlled media | |||
include any CLUE-controlled media in the initial offer - the mid | in the initial offer -- the "mid" value of the video line is not | |||
value of the video line is not included in the "CLUE" group. | included in the "CLUE" group. | |||
... | ... | |||
a=group:CLUE 3 | a=group:CLUE 3 | |||
... | ... | |||
m=video 6002 RTP/AVP 96 | m=video 6002 RTP/AVP 96 | |||
a=rtpmap:96 H264/90000 | a=rtpmap:96 H264/90000 | |||
a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | |||
a=sendrecv | a=sendrecv | |||
a=mid:2 | a=mid:2 | |||
... | ... | |||
m=application 6100 UDP/DTLS/SCTP webrtc-datachannel | m=application 6100 UDP/DTLS/SCTP webrtc-datachannel | |||
a=setup:actpass | a=setup:actpass | |||
a=sctp-port: 5000 | a=sctp-port: 5000 | |||
a=dcmap:2 subprotocol="CLUE";ordered=true | a=dcmap:2 subprotocol="CLUE";ordered=true | |||
a=mid:3 | a=mid:3 | |||
Bob responds with a similar SDP in SIP 200 OK 1, which also has a | Bob responds with a similar SDP in SIP 200 OK 1, which also has a | |||
"CLUE" group including the mid value of a data channel; due to their | "CLUE" group including the "mid" value of a data channel; due to | |||
similarity no SDP snippet is shown here. Bob wishes to receive | their similarity, no SDP snippet is shown here. Bob wishes to | |||
initial media, and so includes corresponding non-CLUE-controlled | receive initial media and thus includes corresponding non-CLUE- | |||
audio and video lines. Bob also includes the "sip.clue" media | controlled audio and video lines. Bob also includes the "sip.clue" | |||
feature tag in the 200 OK. Alice and Bob are each now able to send a | media feature tag in the 200 OK. Alice and Bob are each now able to | |||
single audio and video stream. This is illustrated as MEDIA 1. | send a single audio and video stream. This is illustrated as MEDIA | |||
1. | ||||
With the successful initial SDP Offer/Answer exchange complete Alice | With the successful initial SDP Offer/Answer exchange complete, Alice | |||
and Bob are also free to negotiate the CLUE data channel. This is | and Bob are also free to negotiate the CLUE data channel. This is | |||
illustrated as CLUE DATA CHANNEL ESTABLISHED. | illustrated as CLUE DATA CHANNEL ESTABLISHED. | |||
Once the data channel is established CLUE protocol negotiation | Once the data channel is established, CLUE protocol negotiation | |||
begins. In this case Bob was the DTLS client (sending a=active in | begins. In this case, Bob was the DTLS client (sending "a=active" in | |||
his SDP answer) and hence is the CLUE Channel Initiator and sends a | his SDP Answer) and hence is the CLUE Channel Initiator. He sends a | |||
CLUE OPTIONS message describing his version support. On receiving | CLUE OPTIONS message describing his version support. On receiving | |||
that message Alice sends her corresponding CLUE OPTIONS RESPONSE. | that message, Alice sends her corresponding CLUE OPTIONS RESPONSE. | |||
With the OPTIONS phase complete Alice now sends her CLUE | With the OPTIONS phase complete, Alice now sends her CLUE | |||
'advertisement' message (CLUE ADVERTISEMENT 1). She advertises three | 'advertisement' message (CLUE ADVERTISEMENT 1). She advertises three | |||
static Captures representing her three cameras. She also includes | static Captures representing her three cameras. She also includes | |||
switched Captures suitable for two- and one-screen systems. All of | switched Captures suitable for systems with one or two screens. All | |||
these Captures are in a single Capture Scene, with suitable Capture | of these Captures are in a single Capture Scene, with suitable | |||
Scene Views to tell Bob that he should either subscribe to the three | Capture Scene Views that tell Bob he should subscribe to the three | |||
static Captures, the two switched Captures or the one switched | static Captures, the two switched Captures, or the one switched | |||
Capture. Alice has no simultaneity constraints, so includes all six | Capture. Alice has no simultaneity constraints, so all six Captures | |||
Captures in one simultaneous set. Finally, Alice includes an | are included in one simultaneous set. Finally, Alice includes an | |||
Encoding Group with three Encoding IDs: "enc1", "enc2" and "enc3". | Encoding Group with three Encoding IDs: "enc1", "enc2", and "enc3". | |||
These Encoding IDs aren't currently valid, but will match the next | These Encoding IDs aren't currently valid but will match the next SDP | |||
SDP offer she sends. | Offer she sends. | |||
Bob received CLUE ADVERTISEMENT 1 but does not yet send a 'configure' | Bob received CLUE ADVERTISEMENT 1 but does not yet send a 'configure' | |||
message, because he has not yet received Alice's Encoding | message, because he has not yet received Alice's Encoding | |||
information, so as yet he does not know if she will have sufficient | information; thus, he does not know if she will have sufficient | |||
resources to send him the two streams he ideally wants at a quality | resources in order to send him the two streams he ideally wants at a | |||
he is happy with. Because Bob is not sending an immediate | quality he is happy with. Because Bob is not sending an immediate | |||
'configure' message with the "ack" element set he must send an | 'configure' message with the "ack" element set, he must send an | |||
explicit 'ack' message (CLUE ACK 1) to signal receipt of CLUE | explicit 'ack' message (CLUE ACK 1) to signal receipt of CLUE | |||
ADVERTISEMENT 1. | ADVERTISEMENT 1. | |||
Bob also sends his CLUE 'advertisement' message (CLUE ADVERTISEMENT | Bob also sends his CLUE 'advertisement' message (CLUE ADVERTISEMENT | |||
2) - though the diagram shows that this occurs after Alice sends CLUE | 2) -- though the diagram shows that this occurs after Alice sends | |||
ADVERTISEMENT 1 Bob sends his 'advertisement' message independently | CLUE ADVERTISEMENT 1, Bob sends his 'advertisement' message | |||
and does not wait for CLUE ADVERTISEMENT 1 to arrive. He advertises | independently and does not wait for CLUE ADVERTISEMENT 1 to arrive. | |||
two static Captures representing his cameras. He also includes a | He advertises two static Captures representing his cameras. He also | |||
single composed Capture for single-screen systems, in which he will | includes a single composed Capture for single-screen systems, in | |||
composite the two camera views into a single video stream. All three | which he will composite the two camera views into a single video | |||
Captures are in a single Capture Scene, with suitable Capture Scene | stream. All three Captures are in a single Capture Scene, with | |||
Views to tell Alice that she should either subscribe to the two | suitable Capture Scene Views that tell Alice she should subscribe to | |||
static Captures, or the single composed Capture. Bob also has no | either the two static Captures or the single composed Capture. Bob | |||
simultaneity constraints, so includes all three Captures in one | also has no simultaneity constraints, so he includes all three | |||
simultaneous set. Bob also includes a single Encoding Group with two | Captures in one simultaneous set. Bob also includes a single | |||
Encoding IDs: "foo" and "bar". | Encoding Group with two Encoding IDs: "foo" and "bar". | |||
Similarly, Alice receives CLUE ADVERTISEMENT 2 but does not yet send | Similarly, Alice receives CLUE ADVERTISEMENT 2 but does not yet send | |||
a 'configure' message, because she has not yet received Bob's | a 'configure' message, because she has not yet received Bob's | |||
Encoding information, sending instead an 'ack' message (CLUE ACK 2). | Encoding information; instead, she sends an 'ack' message (CLUE ACK | |||
2). | ||||
Both sides have now sent their CLUE 'advertisement' messages and an | Both sides have now sent their CLUE 'advertisement' messages, and an | |||
SDP exchange is required to negotiate Encodings. For simplicity, in | SDP exchange is required to negotiate Encodings. For simplicity, in | |||
this case Alice is shown sending an INVITE with a new offer; in many | this case, Alice is shown sending an INVITE with a new offer; in many | |||
implementations both sides might send an INVITE, which would be | implementations, both sides might send an INVITE, which would be | |||
resolved by use of the 491 Request Pending resolution mechanism from | resolved by use of the 491 Request Pending resolution mechanism from | |||
[RFC3261]. | [RFC3261]. | |||
Alice now sends SIP INVITE 2. She maintains the sendrecv audio, | Alice now sends SIP INVITE 2. She maintains the sendrecv audio, | |||
video and CLUE "m=" lines, and she adds three new sendonly "m=" lines | video, and CLUE "m=" lines, and she adds three new sendonly "m=" | |||
to represent the three CLUE-controlled Encodings she can send. Each | lines to represent the three CLUE-controlled Encodings she can send. | |||
of these "m=" lines has a label corresponding to one of the Encoding | Each of these "m=" lines has a label corresponding to one of the | |||
IDs from CLUE ADVERTISEMENT 1. Each also has its mid added to the | Encoding IDs from CLUE ADVERTISEMENT 1. Each also has its mid added | |||
grouping attribute to show they are controlled by the CLUE data | to the grouping attribute to show they are controlled by the CLUE | |||
channel. A snippet of the SDP showing the grouping attribute, data | data channel. A snippet of the SDP showing the grouping attribute, | |||
channel and the video "m=" lines are shown below: | data channel, and video "m=" lines are shown below: | |||
... | ... | |||
a=group:CLUE 3 4 5 6 | a=group:CLUE 3 4 5 6 | |||
... | ... | |||
m=video 6002 RTP/AVP 96 | m=video 6002 RTP/AVP 96 | |||
a=rtpmap:96 H264/90000 | a=rtpmap:96 H264/90000 | |||
a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | |||
a=sendrecv | a=sendrecv | |||
a=mid:2 | a=mid:2 | |||
... | ... | |||
skipping to change at page 22, line 40 ¶ | skipping to change at line 1000 ¶ | |||
a=label:enc2 | a=label:enc2 | |||
m=video 6008 RTP/AVP 96 | m=video 6008 RTP/AVP 96 | |||
a=rtpmap:96 H264/90000 | a=rtpmap:96 H264/90000 | |||
a=fmtp:96 profile-level-id=42e016 | a=fmtp:96 profile-level-id=42e016 | |||
a=sendonly | a=sendonly | |||
a=mid:6 | a=mid:6 | |||
a=label:enc3 | a=label:enc3 | |||
Bob now has all the information he needs to decide which streams to | Bob now has all the information he needs to decide which streams to | |||
configure, allowing him to send both a CLUE 'configure' message and | configure, allowing him to send both a CLUE 'configure' message and | |||
his SDP answer. As such he now sends CLUE CONFIGURE 1. This | his SDP Answer. As such, he now sends CLUE CONFIGURE 1. This | |||
requests the pair of switched Captures that represent Alice's scene, | requests the pair of switched Captures that represent Alice's scene, | |||
and he configures them with encoder ids "enc1" and "enc2". | and he configures them with encoder ids "enc1" and "enc2". | |||
Bob also sends his SDP answer as part of SIP 200 OK 2. Alongside his | Bob also sends his SDP Answer as part of SIP 200 OK 2. Alongside his | |||
original audio, video and CLUE "m=" lines he includes three | original audio, video, and CLUE "m=" lines, he includes three | |||
additional "m=" lines corresponding to the three added by Alice; two | additional "m=" lines corresponding to the three added by Alice: two | |||
active recvonly "m= "lines and an inactive "m=" line for the third. | active recvonly "m= "lines and an inactive "m=" line for the third. | |||
He adds their mid values to the grouping attribute to show they are | He adds their "mid" values to the grouping attribute to show they are | |||
controlled by the CLUE data channel. A snippet of the SDP showing | controlled by the CLUE data channel. A snippet of the SDP showing | |||
the grouping attribute and the video "m=" lines are shown below (mid | the grouping attribute and the video "m=" lines are shown below (mid | |||
100 represents the CLUE data channel, not shown): | 100 represents the CLUE data channel, which is not shown): | |||
... | ... | |||
a=group:CLUE 11 12 13 100 | a=group:CLUE 11 12 13 100 | |||
... | ... | |||
m=video 58722 RTP/AVP 96 | m=video 58722 RTP/AVP 96 | |||
a=rtpmap:96 H264/90000 | a=rtpmap:96 H264/90000 | |||
a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | |||
a=sendrecv | a=sendrecv | |||
a=mid:10 | a=mid:10 | |||
... | ... | |||
skipping to change at page 23, line 30 ¶ | skipping to change at line 1038 ¶ | |||
a=rtpmap:96 H264/90000 | a=rtpmap:96 H264/90000 | |||
a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | |||
a=recvonly | a=recvonly | |||
a=mid:12 | a=mid:12 | |||
m=video 58728 RTP/AVP 96 | m=video 58728 RTP/AVP 96 | |||
a=rtpmap:96 H264/90000 | a=rtpmap:96 H264/90000 | |||
a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | |||
a=inactive | a=inactive | |||
a=mid:13 | a=mid:13 | |||
Alice receives Bob's message CLUE CONFIGURE 1 and sends CLUE | Alice receives Bob's CLUE CONFIGURE 1 message and sends CLUE | |||
CONFIGURE RESPONSE 1 to ack its reception. She does not yet send the | CONFIGURE RESPONSE 1 to acknowledge its reception. She does not yet | |||
Capture Encodings specified, because at this stage she hasn't | send the Capture Encodings specified, because at this stage, she | |||
processed Bob's answer SDP and so hasn't negotiated the ability for | hasn't processed Bob's answer SDP and thus hasn't negotiated the | |||
Bob to receive these streams. | ability for Bob to receive these streams. | |||
On receiving SIP 200 OK 2 from Bob Alice sends her SIP ACK (SIP ACK | On receiving SIP 200 OK 2 from Bob, Alice sends her SIP ACK (SIP ACK | |||
2). She is now able to send the two streams of video Bob requested - | 2). She is now able to send the two streams of video Bob requested | |||
this is illustrated as MEDIA 2. | -- this is illustrated as MEDIA 2. | |||
The constraints of offer/answer meant that Bob could not include his | The constraints of offer/answer meant that Bob could not include his | |||
encoding information as new "m=" lines in SIP 200 OK 2. As such Bob | Encoding information as new "m=" lines in SIP 200 OK 2. As such, Bob | |||
now sends SIP INVITE 3 to generate a new offer. Along with all the | now sends SIP INVITE 3 to generate a new offer. Along with all the | |||
streams from SIP 200 OK 2 Bob also includes two new sendonly streams. | streams from SIP 200 OK 2, Bob also includes two new sendonly | |||
Each stream has a label corresponding to the Encoding IDs in his CLUE | streams. Each stream has a label corresponding to the Encoding IDs | |||
ADVERTISEMENT 2 message. He also adds their mid values to the | in his CLUE ADVERTISEMENT 2 message. He also adds their "mid" values | |||
grouping attribute to show they are controlled by the CLUE data | to the grouping attribute to show they are controlled by the CLUE | |||
channel. A snippet of the SDP showing the grouping attribute and the | data channel. A snippet of the SDP showing the grouping attribute | |||
video "m=" lines are shown below (mid 100 represents the CLUE data | and the video "m=" lines are shown below (mid 100 represents the CLUE | |||
channel, not shown): | data channel, which is not shown): | |||
... | ... | |||
a=group:CLUE 11 12 14 15 100 | a=group:CLUE 11 12 14 15 100 | |||
... | ... | |||
m=video 58722 RTP/AVP 96 | m=video 58722 RTP/AVP 96 | |||
a=rtpmap:96 H264/90000 | a=rtpmap:96 H264/90000 | |||
a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | |||
a=sendrecv | a=sendrecv | |||
a=mid:10 | a=mid:10 | |||
... | ... | |||
skipping to change at page 24, line 40 ¶ | skipping to change at line 1094 ¶ | |||
a=label:foo | a=label:foo | |||
a=mid:14 | a=mid:14 | |||
m=video 58730 RTP/AVP 96 | m=video 58730 RTP/AVP 96 | |||
a=rtpmap:96 H264/90000 | a=rtpmap:96 H264/90000 | |||
a=fmtp:96 profile-level-id=42e016 | a=fmtp:96 profile-level-id=42e016 | |||
a=sendonly | a=sendonly | |||
a=label:bar | a=label:bar | |||
a=mid:15 | a=mid:15 | |||
Having received this, Alice now has all the information she needs to | Having received this, Alice now has all the information she needs to | |||
send her CLUE 'configure' message and her SDP answer. In CLUE | send her CLUE 'configure' message and her SDP Answer. In CLUE | |||
CONFIGURE 2 she requests the two static Captures from Bob, to be sent | CONFIGURE 2, she requests the two static Captures from Bob to be sent | |||
on Encodings "foo" and "bar". | on Encodings "foo" and "bar". | |||
Alice also sends SIP 200 OK 3, matching two recvonly "m=" lines to | Alice also sends SIP 200 OK 3, matching two recvonly "m=" lines to | |||
Bob's new sendonly lines. She includes their mid values in the | Bob's new sendonly lines. She includes their "mid" values in the | |||
grouping attribute to show they are controlled by the CLUE cdata | grouping attribute to show they are controlled by the CLUE data | |||
hannel. Alice also now deactivates the initial non-CLUE-controlled | channel. Alice then deactivates the initial non-CLUE-controlled | |||
media, as bidirectional CLUE-controlled media is now available. A | media, as bidirectional CLUE-controlled media is now available. A | |||
snippet of the SDP showing the grouping attribute and the video "m=" | snippet of the SDP showing the grouping attribute and the video "m=" | |||
lines are shown below (mid 3 represents the data channel, not shown): | lines are shown below (mid 3 represents the data channel, not shown): | |||
... | ... | |||
a=group:CLUE 3 4 5 7 8 | a=group:CLUE 3 4 5 7 8 | |||
... | ... | |||
m=video 0 RTP/AVP 96 | m=video 0 RTP/AVP 96 | |||
a=mid:2 | a=mid:2 | |||
... | ... | |||
skipping to change at page 25, line 36 ¶ | skipping to change at line 1137 ¶ | |||
a=rtpmap:96 H264/90000 | a=rtpmap:96 H264/90000 | |||
a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | |||
a=recvonly | a=recvonly | |||
a=mid:7 | a=mid:7 | |||
m=video 6012 RTP/AVP 96 | m=video 6012 RTP/AVP 96 | |||
a=rtpmap:96 H264/90000 | a=rtpmap:96 H264/90000 | |||
a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | |||
a=recvonly | a=recvonly | |||
a=mid:8 | a=mid:8 | |||
Bob receives Alice's message CLUE CONFIGURE 2 and sends CLUE | Bob receives Alice's CLUE CONFIGURE 2 message and sends CLUE | |||
CONFIGURE RESPONSE 2 to ack its reception. Bob does not yet send the | CONFIGURE RESPONSE 2 to acknowledge its reception. Bob does not yet | |||
Capture Encodings specified, because he hasn't yet received and | send the Capture Encodings specified, because he hasn't yet received | |||
processed Alice's SDP answer and negotiated the ability to send these | and processed Alice's SDP Answer and negotiated the ability to send | |||
streams. | these streams. | |||
Finally, on receiving SIP 200 OK 3 Bob is now able to send the two | Finally, on receiving SIP 200 OK 3, Bob is now able to send the two | |||
streams of video Alice requested - this is illustrated as MEDIA 3. | streams of video Alice requested -- this is illustrated as MEDIA 3. | |||
Both sides of the call are now sending multiple video streams with | Both sides of the call are now sending multiple video streams with | |||
their sources defined via CLUE negotiation. As the call progresses | their sources defined via CLUE negotiation. As the call progresses, | |||
either side can send new 'advertisement' or 'configure' message or | either side can send a new 'advertisement' or 'configure' message or | |||
new SDP offer/answers to add, remove or change what they have | the new SDP Offers/Answers to add, remove, or change what they have | |||
available or want to receive. | available or want to receive. | |||
9. Example: A call between a CLUE-capable and non-CLUE Endpoint | 9. Example: A Call between a CLUE-Capable and Non-CLUE Endpoint | |||
In this brief example Alice is a CLUE-capable Endpoint making a call | In this brief example, Alice is a CLUE-capable Endpoint making a call | |||
to Bob, who is not CLUE-capable (i.e. is not able to use the CLUE | to Bob, who is not CLUE capable (i.e., is not able to use the CLUE | |||
protocol). | protocol). | |||
+----------+ +-----------+ | +----------+ +-----------+ | |||
| Alice | | Bob | | | Alice | | Bob | | |||
| | | | | | | | | | |||
+----+-----+ +-----+-----+ | +----+-----+ +-----+-----+ | |||
| | | | | | |||
| | | | | | |||
| SIP INVITE 1 | | | SIP INVITE 1 | | |||
|--------------------------------->| | |--------------------------------->| | |||
skipping to change at page 26, line 39 ¶ | skipping to change at line 1186 ¶ | |||
| | | | | | |||
|<########### MEDIA 1 ############>| | |<########### MEDIA 1 ############>| | |||
| 1 video A->B, 1 video B->A | | | 1 video A->B, 1 video B->A | | |||
|<################################>| | |<################################>| | |||
| | | | | | |||
| | | | | | |||
| | | | | | |||
| | | | | | |||
v v | v v | |||
In SIP INVITE 1, Alice sends Bob a SIP INVITE including in the SDP | In SIP INVITE 1, Alice sends Bob a SIP INVITE including the basic | |||
body the basic audio and video capabilities and the data channel as | audio and video capabilities and data channel in the SDP body as per | |||
per [I-D.ietf-mmusic-sctp-sdp]. Alice also includes the "sip.clue" | [RFC8841]. Alice also includes the "sip.clue" media feature tag in | |||
media feature tag in the INVITE. A snippet of the SDP showing the | the INVITE. A snippet of the SDP showing the grouping attribute and | |||
grouping attribute and the video "m=" line are shown below. Alice | the video "m=" line are shown below. Alice has included a "CLUE" | |||
has included a "CLUE" group, and included the mid corresponding to a | group and the mid corresponding to a data channel in the group (3). | |||
data channel in the group (3). Note that Alice has chosen not to | Note that Alice has chosen not to include any CLUE-controlled media | |||
include any CLUE-controlled media in the initial offer - the mid | in the initial offer -- the "mid" value of the video line is not | |||
value of the video line is not included in the "CLUE" group. | included in the "CLUE" group. | |||
... | ... | |||
a=group:CLUE 3 | a=group:CLUE 3 | |||
... | ... | |||
m=video 6002 RTP/AVP 96 | m=video 6002 RTP/AVP 96 | |||
a=rtpmap:96 H264/90000 | a=rtpmap:96 H264/90000 | |||
a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | a=fmtp:96 profile-level-id=42e016;max-mbps=108000;max-fs=3600 | |||
a=sendrecv | a=sendrecv | |||
a=mid:2 | a=mid:2 | |||
... | ... | |||
m=application 6100 UDP/DTLS/SCTP webrtc-datachannel | m=application 6100 UDP/DTLS/SCTP webrtc-datachannel | |||
a=sctp-port: 5000 | a=sctp-port: 5000 | |||
a=dcmap:2 subprotocol="CLUE";ordered=true | a=dcmap:2 subprotocol="CLUE";ordered=true | |||
a=mid:3 | a=mid:3 | |||
Bob is not CLUE-capable, and hence does not recognize the "CLUE" | Bob is not CLUE capable and hence does not recognize the "CLUE" | |||
semantic for grouping attribute, nor does he support the data | semantic for the grouping attribute, nor does he support the data | |||
channel. IN SIP 200 OK 1 he responds with an answer with audio and | channel. IN SIP 200 OK 1, he responds with an answer that includes | |||
video, but with the data channel zeroed. | audio and video, but with the data channel zeroed. | |||
From the lack of a CLUE group Alice understands that Bob does not | From the lack of a CLUE group, Alice understands that Bob does not | |||
support CLUE, or does not wish to use it. Both sides are now able to | support CLUE, or does not wish to use it. Both sides are now able to | |||
send a single audio and video stream to each other. Alice at this | send a single audio and video stream to each other. At this point, | |||
point begins to send her fallback video: in this case likely a | Alice begins to send her fallback video: in this case, it's likely a | |||
switched view from whichever camera shows the current loudest | switched view from whichever camera shows the current loudest | |||
participant on her side. | participant on her side. | |||
10. Acknowledgements | 10. IANA Considerations | |||
Besides the authors, the team focusing on this draft consists of: | ||||
Roni Even, Simon Pietro-Romano, Roberta Presta. | ||||
Christian Groves, Jonathan Lennox and Adam Roach have contributed | ||||
detailed comments and suggestions. | ||||
11. IANA Considerations | ||||
11.1. New SDP Grouping Framework Attribute | 10.1. New SDP Grouping Framework Attribute | |||
This document registers the following semantics with IANA in the | This document registers the following semantics with IANA in the | |||
"Semantics for the "group" SDP Attribute" subregistry (under the | "Semantics for the 'group' SDP Attribute" subregistry (under the | |||
"Session Description Protocol (SDP) Parameters" registry per | "Session Description Protocol (SDP) Parameters" registry) per | |||
[RFC5888]: | [RFC5888]: | |||
Semantics Token Reference | +===========================+=======+==============+===========+ | |||
------------------------------------- ------ --------- | | Semantics | Token | Mux Category | Reference | | |||
CLUE-controlled m-line CLUE [this draft] | +===========================+=======+==============+===========+ | |||
| CLUE-controlled "m=" line | CLUE | NORMAL | RFC 8848 | | ||||
+---------------------------+-------+--------------+-----------+ | ||||
11.2. New SIP Media Feature Tag | Table 1 | |||
10.2. New SIP Media Feature Tag | ||||
This specification registers a new media feature tag in the SIP | This specification registers a new media feature tag in the SIP | |||
[RFC3261] tree per the procedures defined in [RFC2506] and [RFC3840]. | [RFC3261] tree per the procedures defined in [RFC2506] and [RFC3840]. | |||
Media feature tag name: sip.clue | Media feature tag name: sip.clue | |||
ASN.1 Identifier: [to be assigned] | ASN.1 Identifier: 30 | |||
Summary of the media feature indicated by this tag: This feature tag | Summary of the media feature indicated by this tag: This feature tag | |||
indicates that the device supports CLUE-controlled media. | indicates that the device supports CLUE-controlled media. | |||
Values appropriate for use with this feature tag: Boolean. | Values appropriate for use with this feature tag: Boolean. | |||
The feature tag is intended primarily for use in the following | The feature tag is intended primarily for use in the following | |||
applications, protocols, services, or negotiation mechanisms: | applications, protocols, services, or negotiation mechanisms: | |||
This feature tag is most useful in a communications application | ||||
for describing the capabilities of a device to use the CLUE | ||||
control protocol to negotiate the use of multiple media streams. | ||||
This feature tag is most useful in a communications application for | Related standards or documents: RFC 8848 | |||
describing the capabilities of a device to use the CLUE control | ||||
protocol to negotiate the use of multiple media streams. | ||||
Related standards or documents: [this draft] | ||||
Security Considerations: Security considerations for this media | Security Considerations: Security considerations for this media | |||
feature tag are discussed in Section 12 of [this draft]. | feature tag are discussed in Section 11 of RFC 8848. | |||
Name(s) & email address(es) of person(s) to contact for further | Name(s) & email address(es) of person(s) to contact for further | |||
information: | information: Internet Engineering Steering Group <iesg@ietf.org> | |||
o Internet Engineering Steering Group: iesg@ietf.org | ||||
Intended usage: COMMON | Intended usage: COMMON | |||
12. Security Considerations | 11. Security Considerations | |||
CLUE makes use of a number of protocols and mechanisms, either | CLUE makes use of a number of protocols and mechanisms, either | |||
defined by CLUE or long-standing. The security considerations | defined by CLUE or long-standing. The Security Considerations | |||
section of the CLUE Framework [I-D.ietf-clue-framework] addresses the | section of the CLUE Framework document [RFC8845] addresses the need | |||
need to secure these mechanisms by following the recommendations of | to secure these mechanisms by following the recommendations of the | |||
the individual protocols. | individual protocols. | |||
Beyond the need to secure the constituent protocols, the use of CLUE | Beyond the need to secure the constituent protocols, the use of CLUE | |||
does impose additional security concerns. One area of increased risk | does impose additional security concerns. One area of increased risk | |||
involves the potential for a malicious party to subvert a CLUE- | involves the potential for a malicious party to subvert a CLUE- | |||
capable device to attack a third party by driving large volumes of | capable device to attack a third party by driving large volumes of | |||
media (particularly video) traffic at them by establishing a | media (particularly video) traffic at them by establishing a | |||
connection to the CLUE-capable device and directing the media to the | connection to the CLUE-capable device and directing the media to the | |||
victim. While this is a risk for all media devices, a CLUE-capable | victim. While this is a risk for all media devices, a CLUE-capable | |||
device may allow the attacker to configure multiple media streams to | device may allow the attacker to configure multiple media streams to | |||
be sent, significantly increasing the volume of traffic directed at | be sent, significantly increasing the volume of traffic directed at | |||
the victim. | the victim. | |||
This attack can be prevented by ensuring that the media recipient | This attack can be prevented by ensuring that the media recipient | |||
intends to receive the media packets. As such all CLUE-capable | intends to receive the media packets. As such, all CLUE-capable | |||
devices MUST support key negotiation and receiver intent assurance | devices MUST support key negotiation and receiver intent assurance | |||
via DTLS-SRTP [RFC5763] on CLUE-controlled RTP "m=" lines, and MUST | via DTLS / Secure Real-time Transport Protocol (SRTP) [RFC5763] on | |||
use it or some other mechanism that provides receiver intent | CLUE-controlled RTP "m=" lines, and they MUST use it or some other | |||
assurance. All CLUE-controlled RTP "m" lines must be secured and | mechanism that provides receiver intent assurance. All CLUE- | |||
implemented using mechanisms such as SRTP [RFC3711]. CLUE | controlled RTP "m" lines must be secured and implemented using | |||
implementations MAY choose not to require the use of SRTP to secure | mechanisms such as SRTP [RFC3711]. CLUE implementations MAY choose | |||
legacy (non-CLUE-controlled) media for backwards compatibility with | not to require the use of SRTP to secure legacy (non-CLUE-controlled) | |||
older SIP clients that are incapable of supporting it. | media for backwards compatibility with older SIP clients that are | |||
incapable of supporting it. | ||||
CLUE also defines a new media feature tag that indicates CLUE | CLUE also defines a new media feature tag that indicates CLUE | |||
support. This tag may be present even in non-CLUE calls, which | support. This tag may be present even in non-CLUE calls, which | |||
increases the metadata available about the sending device, which can | increases the metadata available about the sending device; this can | |||
help an attacker differentiate between multiple devices and help them | help an attacker differentiate between multiple devices and identify | |||
identify otherwise anonymised users via the fingerprint of features | otherwise anonymized users via the fingerprint of features their | |||
their device supports. To prevent this, SIP signaling used to set up | device supports. To prevent this, SIP signaling used to set up CLUE | |||
CLUE sessions SHOULD always be encrypted using TLS [RFC5630]. | sessions SHOULD always be encrypted using TLS [RFC5630]. | |||
The CLUE protocol also carries additional information that could be | The CLUE protocol also carries additional information that could be | |||
used to help fingerprint a particular user or to identify the | used to help fingerprint a particular user or to identify the | |||
specific version of software being used. CLUE Framework | specific version of software being used. The CLUE Framework | |||
[I-D.ietf-clue-protocol] provides details of these issues and how to | [RFC8847] provides details about these issues and how to mitigate | |||
mitigate them. | them. | |||
13. Change History | ||||
Note to RFC Editor: please remove this section prior to publication | ||||
-15: Revision by Rob Hanton | ||||
* Clarified that using an 'EncID' defined in SDP in an CLUE | ||||
ADVERTISEMENT message is only a SHOULD because of the inherent | ||||
race conditions about the ordering of the SDP and CLUE message. | ||||
In contrast, changed the use of 'EncID' in a CLUE CONFIGURE | ||||
message to a MUST as that is defined by the far end and so | ||||
there is no way for the sending of the CONFIGURE to anticipate | ||||
it. | ||||
* Updated the description of handling the failure of the CLUE | ||||
channel to reflect the fact that the protocol state machine now | ||||
returns to the IDLE state on failure rather than a specific | ||||
termination state, which also means defining an allowance for | ||||
the CLUE channel being recovered. | ||||
* Updated all instances of advertisment, configure and ack | ||||
messages throughout to match the styling of the protocol | ||||
document | ||||
* Security section updated to make DTLs-SRTP mandatory to use as | ||||
well as support unless intent assurance is provided by some | ||||
other mechanism per mailing list proposal (to resolve the | ||||
concern from a previous IETF session of those wanting to use | ||||
CLUE in a closed environment where intent assurance was | ||||
provided by other prorietary mechanisms). | ||||
* Removed OID value for "sip.clue" media feature tag pending its | ||||
actual assignment on registration, leaving a placeholder | ||||
* All lower-case uses of 'must', 'should' and 'may' reviewed and | ||||
a few made normative | ||||
* Fixed various spelling mistakes, clarified grammar, and fixed a | ||||
copy/paste error. | ||||
* Updated boilerplate to RFC 8174 | ||||
* Some informative references moved to normative. | ||||
-14: Revision by Rob Hanton | ||||
* Reference to RFC5245 updated to RFC8445 | ||||
* Updated my name to reflect surname change (Hansen to Hanton). | ||||
* Reviewed recent changes to clue protocol document and concluded | ||||
that none affected this document | ||||
* Added recommendation that the SDP O/A spec and clue protocol be | ||||
read prior to this document | ||||
* Several acronyms expanded at the point of initial use | ||||
* Some unnecessary normative language replaced with prose | ||||
-13: Revision by Rob Hansen | ||||
* Added a section on handling failures of the protocol channel or | ||||
data channel mid-call - instructions are that media must | ||||
continue as if the clue channel were still established and | ||||
unchanged until CLUE is disabled by either side via SDP | ||||
exchange. | ||||
* Example in section on efficient operation with non-atomic | ||||
transactions has had all normative language removed and is now | ||||
entirely descriptive (normative language retained in the non- | ||||
example portion). | ||||
* draft-ietf-clue-protocol-14 reviewed for relevant changes, and | ||||
use of CLUE ACK and RESPONSE messages made consistent with that | ||||
document (ADVERTISEMENT ACKNOWLEDGEMENT and CONFIGURE RESPONSE | ||||
respectively). | ||||
* Order of authors revised to reflect updates since Jan 2014. | ||||
-12: Revision by Rob Hansen | ||||
* Title change to expand and elucidate our totally-not-contrived | ||||
acronym | ||||
* Explicit reference to RFC3840 added when first mentioning media | ||||
feature tags | ||||
* Have standardised references to Clue protocol messages to | ||||
ADVERTISEMENT, CONFIGURE and ACK, in line with section 12.4.1. | ||||
of the protocol document (though the protocol document also | ||||
uses ADV and CONF). | ||||
* 'MUST' in opening paragraph of 4.2 changed from normative | ||||
'MUST' to logical 'must' | ||||
* Per his request, removed Cristian's company affiliation and | ||||
changed his email address | ||||
* Clarified that an implementation that chooses not to send media | ||||
during the initial negotiation process must still send RTCP as | ||||
normal | ||||
* Rewrote the section on adding/remove clue m-lines after the | ||||
initial exchange to make clear that this is just standard SDP. | ||||
For non-clue controlled lines, recommended they are deactivated | ||||
by zeroing the port when turning them off after clue is | ||||
successfully negotiated. | ||||
* Added guidance that an initial offer containing clue-controlled | ||||
m-lines MUST NOT set them bundle-only unless they somehow know | ||||
the far end actually supports BUNDLE | ||||
* Added section saying that CLUE devices that do BUNDLE SHOULD do | ||||
rtcp-mux, but that the requirement doesn't exist in the other | ||||
direction (eg, supporting rtcp-mux does not require or imply | ||||
the need to implement BUNDLE) | ||||
* For clue-controlled m-lines where the sender included more | ||||
encodings than the recipient wants, have standardised on using | ||||
"a=inactive" to not receive RTP on them (previously had a mix | ||||
of "a=inactive" or port 0, or in some cases did not specify). | ||||
* Page break added before the big ladder diagram in the example | ||||
* Have added a direction attribute to the SDP example in the data | ||||
channel, and made explicit that Bob is the DTLS client and | ||||
hence the CLUE Channel Initiator. | ||||
* Have removed all language that referenced the possibility of | ||||
having multiple CLUE groups | ||||
* Removed names appearing in the authors list from the | ||||
acknowledgements | ||||
* Changed the contact for the IANA registration to iesg@ietf.org | ||||
* Security section updated to clarify that DTLS-SRTP must be | ||||
supported (as opposed to DTLS) and removed the reference to | ||||
RFC7202. | ||||
* Other syntactic tweaks based on Paul and Adam's feedback | ||||
-11: Revision by Rob Hansen | ||||
* Some informative references added for SIP and SDP. | ||||
* 'a=mid' lines added to example m-lines with port 0, per RFC5888 | ||||
section 6. | ||||
* Instace of 'must' changed to normative 'MUST', along with | ||||
various minor clarifications and corrections. | ||||
* Abstract made standalone without citations, per RFC7322 section | ||||
4.3. | ||||
* RFC editor note added to remove this section. | ||||
-10: Revision by Rob Hansen | ||||
* Changes to draft-ietf-clue-protocol between 07 and 11 reviewed | ||||
to ensure compatibility between documents has been maintained. | ||||
* Expanded the portion of the document related to fingerprinting | ||||
with info on the CLUE channel as well as SIP. | ||||
-09: Revision by Rob Hansen | ||||
* A few minor spelling tweaks | ||||
* Made removing the CLUE group mandatory when disabling CLUE mid- | ||||
call. Made clear that any CLUE-controlled m-lines should be | ||||
disabled or else how they're used is up to the implementation. | ||||
-08: Revision by Rob Hansen | ||||
* Spelling and grammar fixes from Paul and Christian gratefully | ||||
adopted | ||||
* Expanded the section on disabling CLUE mid-call to make | ||||
explicit the actions required to disable the CLUE channel | ||||
gracefully, or to handle someone else doing the same. | ||||
* Made a number of fixes to the example call flow to better | ||||
reflect the recommendations in the document. | ||||
-07: Revision by Rob Hansen | ||||
* Removed the entire 'Media line directionality' section as a | ||||
discussion of the pros/cons of using bidirectional vs | ||||
unidirectional schemes wasn't suitable for a finalised version. | ||||
The unidirectionality requirement is covered normatively in an | ||||
earlier section. | ||||
* BUNDLE no longer includes an address synchronisation step so | ||||
the suggestion to wait until that done has been replaced with | ||||
some general language about following any negotiated | ||||
extensions. | ||||
* Added OPTIONS negotiation to the example flow, and revised the | ||||
flow to ensure it matched protocol document. | ||||
* Section on not sending CLUE control media until CLUE | ||||
negotiation completes narrowed to notify that only RTP should | ||||
not be sent until negotiation completes and add RTCP to the | ||||
list of things that should be sent as normal, in line with | ||||
a=inactive. | ||||
* Make explicit that m=recvonly lines don't need to have a label, | ||||
as only m=sendonly lines are referenced by CLUE protocol | ||||
messages. | ||||
* Fix formatting of IANA sections. Improve syntax of feature tag | ||||
section in line with Paul's suggestions. Definition of feature | ||||
tag narrowed to be multiple media lines *negotiated via CLUE | ||||
protocol* rather than more generic 'multiple media lines'. | ||||
* General corrections to grammar, spelling and readability based | ||||
on Christian, Paul and Mark; in many cases suggested text was | ||||
gratefully accepted. | ||||
-06: Revision by Rob Hansen | ||||
* State machine interactions updated to match versions in -04 of | ||||
protocol doc. | ||||
* Section on encoding updated to specify both encID and | ||||
encodingID from data model doc. | ||||
* Removed the limitations on describing H264 encoding limits | ||||
using SDP syntax as an open issue. | ||||
* Previous draft had SRTP and DTLS mandatory to implement and to | ||||
use on CLUE- controlled m lines. Current version has DTLS | ||||
mandatory to implement, and 'security' mandatory to use but | ||||
does not define what that security is. | ||||
* Terminology reference to framework doc reinforced. All | ||||
terminology that duplicates framework removed. All text | ||||
updated with capitalisation that matches framework document's | ||||
terminology. | ||||
* SDP example syntax updated to match that of ietf-clue- | ||||
datachannel and hence ietf-mmusic-data-channel-sdpneg. | ||||
-05: Revision by Rob Hansen | ||||
* SRTP/DTLS made mandatory for CLUE-controlled media lines. | ||||
* IANA consideration section added (text as proposed by Christian | ||||
Groves). | ||||
* Includes provision for dependent streams on seperate "m" lines | ||||
having the same encID as their parent "m" line. | ||||
* References to putting CLUE-controlled media and data channels | ||||
in more than one CLUE group removed, since the document no | ||||
longer supports using more than one CLUE group. | ||||
* Section on CLUE controlled media restrictions still applying | ||||
even if the call does not end up being CLUE enabled being | ||||
rewritten to hopefully be clearer. | ||||
* Other minor syntax improvements. | ||||
-04: Revision by Rob Hansen | ||||
* Updated DTLS/SCTP channel syntax in examples to fix errors and | ||||
match latest format defined in draft-ietf-mmusic-sctp-sdp-07. | ||||
* Clarified the behaviour if an SDP offer includes a CLUE- | ||||
controlled "m" line and the answer accepts that "m" line but | ||||
without CLUE control of that line. | ||||
* Added a new section on the sending and receiving of CaptureIDs | ||||
in RTP and RTCP. Includes a section on the necessity of the | ||||
receiver coping with unexpected CaptureIDs (or the lack | ||||
thereof) due to MCCs being redefined in new Advertisement | ||||
messages. | ||||
* Added reminder on IANA section on registering grouping semantic | ||||
and media feature tag, removed the less formal sections that | ||||
did the same job. | ||||
* Fixed and clarified issues raised by Christian's document | ||||
review. | ||||
* Added a number of security considerations. | ||||
-03: Revision by Rob Hansen | ||||
* Clarified text on not rejecting messages because they contain | ||||
unknown encIDs. | ||||
* Removed normative language in section on accepting/rejecting | ||||
non-CLUE-controlled media in the initial answer. | ||||
* Example SDP updated to include the data channel "m" lines. | ||||
* Example call flow updated to show disablement of non-CLUE- | ||||
controlled media once CLUE-controlled media is flowing. | ||||
-02: Revision by Rob Hansen | ||||
* Added section on not accepting non-CLUE-controlled "m" lines in | ||||
the initial answer when CLUE is to be negotiated. | ||||
* Removed previous language attempting to describe media | ||||
restrictions for CLUE-controlled "m" lines that had not been | ||||
configured, and replaced it with much more accurate 'treat as | ||||
"a=inactive" was set'. | ||||
* Made label element mandatory for CLUE-controlled media (was | ||||
previously "SHOULD include", but there didn't seem a good | ||||
reason for this - anyone wishing to include the "m" line but | ||||
not immediately use it in CLUE can simply leave it out of the | ||||
<encodingIDList>.) | ||||
* Added a section on the specifics of relating encodings in SDP | ||||
to <encID> elements in the CLUE protocol, including the fact | ||||
that both Advertisement and Configure messages reference the | ||||
*encoding* (eg, in the Configure case the sender of the | ||||
Configure message includes the labels of the recipient's "m" | ||||
lines as their <encID> contents). | ||||
* Minor revisions to the section on complying with normative SDP/ | ||||
CLUEstate machine language to clarify that these were not new | ||||
normative language, merely that existing normative language | ||||
still applies. | ||||
* Removed appendices which previously contained information to be | ||||
transferred to the protocol and data channel drafts. Removed | ||||
other text that discussed alternatives to the current approach. | ||||
* Cleaned up some 'todo' text. | ||||
-01: Revision by Rob Hansen | ||||
* Revised terminology - removed the term 'CLUE-enabled' device as | ||||
insufficiently distinct from 'CLUE-capable' and instead added a | ||||
term for 'CLUE-enabled' calls. | ||||
* Removed text forbidding RTCP and instead added text that ICE/ | ||||
DTLS negotiation for CLUE controlled media must be done as | ||||
normal irrespective of CLUE negotiation. | ||||
* Changed 'sip.telepresence' to 'sip.clue' and 'TELEPRESENCE' | ||||
grouping semantic back to CLUE. | ||||
* Made it mandatory to have exactly one mid corresponding to a | ||||
data channel in a CLUE group | ||||
* Forbade having multiple CLUE groups unless a specification for | ||||
doing so is published. | ||||
* Refactored SDP-related text; previously the encoding | ||||
information had been in the "initial offer" section despite the | ||||
fact that we recommend that the initial offer doesn't actually | ||||
include any encodings. I moved the specifications of encodings | ||||
and how they're received to an earlier, seperate section. | ||||
* Added text on how the state machines in CLUE and SDP are | ||||
allowed to affect one another, and further recommendations on | ||||
how a device should handle the sending of CLUE and SDP changes. | ||||
-00: Revision by Rob Hansen | ||||
* Submitted as -00 working group document | ||||
draft-kyzivat-08: Revisions by Rob Hansen | ||||
* Added media feature tag for CLUE support ('sip.telepresence') | ||||
* Changed grouping semantic from 'CLUE' to 'TELEPRESENCE' | ||||
* Restructured document to be more centred on the grouping | ||||
semantic and its use with O/A | ||||
* Lots of additional text on usage of the grouping semantic | ||||
* Stricter definition of CLUE-controlled m lines and how they | ||||
work | ||||
* Some additional text on defining what happens when CLUE | ||||
supports is added or removed | ||||
* Added details on when to not send RTCP for CLUE-controlled "m" | ||||
lines. | ||||
* Added a section on using BUNDLE with CLUE | ||||
* Updated data channel references to point at new WG document | ||||
rather than indivual draft | ||||
draft-kyzivat-07: Revisions by Rob Hansen | ||||
* Removed the text providing arguments for encoding limits being | ||||
in SDP and Encoding Groups in the CLUE protocol in favor of the | ||||
specifics of how to negotiate encodings in SDP | ||||
* Added normative language on the setting up of a CLUE call, and | ||||
added sections on mid-call changes to the CLUE status. | ||||
* Added references to [I-D.ietf-clue-datachannel] where | ||||
appropriate. | ||||
* Added some terminology for various types of CLUE and non-CLUE | ||||
states of operation. | ||||
* Moved language related to topics that should be in | ||||
[I-D.ietf-clue-datachannel] and [I-D.ietf-clue-protocol], but | ||||
that has not yet been resolved in those documents, into an | ||||
appendix. | ||||
draft-kyzivat-06: Revisions by Rob Hansen | ||||
* Removed CLUE message XML schema and details that are now in | ||||
draft-presta-clue-protocol | ||||
* Encoding limits in SDP section updated to note that this has | ||||
been investigated and discussed and is the current working | ||||
assumption of the WG, though consensus has not been fully | ||||
achieved. | ||||
* A section has also been added on the current mandation of | ||||
unidirectional "m" lines. | ||||
* Updated CLUE messaging in example call flow to match draft- | ||||
presta-clue-protocol-03 | ||||
draft-kyzivat-05: Revisions by pkyzivat: | ||||
* Specified versioning model and mechanism. | ||||
* Added explicit response to all messages. | ||||
* Rearranged text to work with the above changes. (Which | ||||
rendered diff almost useless.) | ||||
draft-kyzivat-04: Revisions by Rob Hansen: ??? | ||||
draft-kyzivat-03: Revisions by pkyzivat: | ||||
* Added a syntax section with an XML schema for CLUE messages. | ||||
This is a strawhorse, and is very incomplete, but it | ||||
establishes a template for doing this based on elements defined | ||||
in the data model. (Thanks to Roberta for help with this!) | ||||
* Did some rewording to fit the syntax section in and reference | ||||
it. | ||||
* Did some relatively minor restructuring of the document to make | ||||
it flow better in a logical way. | ||||
draft-kyzivat-02: A bunch of revisions by pkyzivat: | ||||
* Moved roberta's call flows to a more appropriate place in the | ||||
document. | ||||
* New section on versioning. | ||||
* New section on NAK. | ||||
* A couple of possible alternatives for message acknowledgment. | ||||
* Some discussion of when/how to signal changes in provider | ||||
state. | ||||
* Some discussion about the handling of transport errors. | ||||
* Added a change history section. | ||||
These were developed by Lennard Xiao, Christian Groves and Paul, | ||||
so added Lennard and Christian as authors. | ||||
draft-kyzivat-01: Updated by roberta to include some sample call | ||||
flows. | ||||
draft-kyzivat-00: Initial version by pkyzivat. Established general | ||||
outline for the document, and specified a few things thought to | ||||
represent wg consensus. | ||||
14. References | ||||
14.1. Normative References | ||||
[I-D.ietf-clue-data-model-schema] | ||||
Presta, R. and S. Romano, "An XML Schema for the CLUE data | ||||
model", draft-ietf-clue-data-model-schema-17 (work in | ||||
progress), August 2016. | ||||
[I-D.ietf-clue-datachannel] | ||||
Holmberg, C., "CLUE Protocol data channel", draft-ietf- | ||||
clue-datachannel-18 (work in progress), April 2019. | ||||
[I-D.ietf-clue-framework] | ||||
Duckworth, M., Pepperell, A., and S. Wenger, "Framework | ||||
for Telepresence Multi-Streams", draft-ietf-clue- | ||||
framework-25 (work in progress), January 2016. | ||||
[I-D.ietf-clue-protocol] | ||||
Presta, R. and S. Romano, "Protocol for Controlling | ||||
Multiple Streams for Telepresence (CLUE)", draft-ietf- | ||||
clue-protocol-19 (work in progress), July 2019. | ||||
[I-D.ietf-clue-rtp-mapping] | ||||
Even, R. and J. Lennox, "Mapping RTP streams to CLUE Media | ||||
Captures", draft-ietf-clue-rtp-mapping-14 (work in | ||||
progress), February 2017. | ||||
[I-D.ietf-mmusic-data-channel-sdpneg] | ||||
Drage, K., Makaraju, M., Ejzak, R., Marcon, J., and R. | ||||
Even, "SDP-based Data Channel Negotiation", draft-ietf- | ||||
mmusic-data-channel-sdpneg-28 (work in progress), May | ||||
2019. | ||||
[I-D.ietf-mmusic-sctp-sdp] | ||||
Holmberg, C., Shpount, R., Loreto, S., and G. Camarillo, | ||||
"Session Description Protocol (SDP) Offer/Answer | ||||
Procedures For Stream Control Transmission Protocol (SCTP) | ||||
over Datagram Transport Layer Security (DTLS) Transport.", | ||||
draft-ietf-mmusic-sctp-sdp-26 (work in progress), April | ||||
2017. | ||||
[I-D.ietf-mmusic-sdp-bundle-negotiation] | 12. References | |||
Holmberg, C., Alvestrand, H., and C. Jennings, | ||||
"Negotiating Media Multiplexing Using the Session | ||||
Description Protocol (SDP)", draft-ietf-mmusic-sdp-bundle- | ||||
negotiation-54 (work in progress), December 2018. | ||||
[I-D.ietf-rtcweb-data-channel] | 12.1. Normative References | |||
Jesup, R., Loreto, S., and M. Tuexen, "WebRTC Data | ||||
Channels", draft-ietf-rtcweb-data-channel-13 (work in | ||||
progress), January 2015. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K. | [RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K. | |||
Norrman, "The Secure Real-time Transport Protocol (SRTP)", | Norrman, "The Secure Real-time Transport Protocol (SRTP)", | |||
RFC 3711, DOI 10.17487/RFC3711, March 2004, | RFC 3711, DOI 10.17487/RFC3711, March 2004, | |||
<https://www.rfc-editor.org/info/rfc3711>. | <https://www.rfc-editor.org/info/rfc3711>. | |||
skipping to change at page 41, line 36 ¶ | skipping to change at line 1354 ¶ | |||
[RFC5888] Camarillo, G. and H. Schulzrinne, "The Session Description | [RFC5888] Camarillo, G. and H. Schulzrinne, "The Session Description | |||
Protocol (SDP) Grouping Framework", RFC 5888, | Protocol (SDP) Grouping Framework", RFC 5888, | |||
DOI 10.17487/RFC5888, June 2010, | DOI 10.17487/RFC5888, June 2010, | |||
<https://www.rfc-editor.org/info/rfc5888>. | <https://www.rfc-editor.org/info/rfc5888>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
14.2. Informative References | [RFC8831] Jesup, R., Loreto, S., and M. Tüxen, "WebRTC Data | |||
Channels", RFC 8831, DOI 10.17487/RFC8831, January 2021, | ||||
<https://www.rfc-editor.org/info/rfc8831>. | ||||
[RFC8841] Holmberg, C., Shpount, R., Loreto, S., and G. Camarillo, | ||||
"Session Description Protocol (SDP) Offer/Answer | ||||
Procedures for Stream Control Transmission Protocol (SCTP) | ||||
over Datagram Transport Layer Security (DTLS) Transport", | ||||
RFC 8841, DOI 10.17487/RFC8841, January 2021, | ||||
<https://www.rfc-editor.org/info/rfc8841>. | ||||
[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>. | ||||
[RFC8845] Duckworth, M., Ed., Pepperell, A., and S. Wenger, | ||||
"Framework for Telepresence Multi-Streams", RFC 8845, | ||||
DOI 10.17487/RFC8845, January 2021, | ||||
<https://www.rfc-editor.org/info/rfc8845>. | ||||
[RFC8846] Presta, R. and S P. Romano, "An XML Schema for the | ||||
Controlling Multiple Streams for Telepresence (CLUE) Data | ||||
Model", RFC 8846, DOI 10.17487/RFC8846, January 2021, | ||||
<http://www.rfc-editor.org/info/rfc8846>. | ||||
[RFC8847] Presta, R. and S P. Romano, "Protocol for Controlling | ||||
Multiple Streams for Telepresence (CLUE)", RFC 8847, | ||||
DOI 10.17487/RFC8847, January 2021, | ||||
<https://www.rfc-editor.org/info/rfc8847>. | ||||
[RFC8849] Even, R. and J. Lennox, "Mapping RTP Streams to | ||||
Controlling Multiple Streams for Telepresence (CLUE) Media | ||||
Captures", RFC 8849, DOI 10.17487/RFC8849, January 2021, | ||||
<https://www.rfc-editor.org/info/rfc8849>. | ||||
[RFC8850] Holmberg, C., "Controlling Multiple Streams for | ||||
Telepresence (CLUE) Protocol Data Channel", RFC 8850, | ||||
DOI 10.17487/RFC8850, January 2021, | ||||
<https://www.rfc-editor.org/info/rfc8850>. | ||||
[RFC8864] Drage, K., Makaraju, M., Ejzak, R., Marcon, J., and R. | ||||
Even, Ed., "Negotiation Data Channels Using the Session | ||||
Description Protocol (SDP)", RFC 8864, | ||||
DOI 10.17487/RFC8864, January 2021, | ||||
<https://www.rfc-editor.org/info/rfc8864>. | ||||
12.2. Informative References | ||||
[RFC2506] Holtman, K., Mutz, A., and T. Hardie, "Media Feature Tag | [RFC2506] Holtman, K., Mutz, A., and T. Hardie, "Media Feature Tag | |||
Registration Procedure", BCP 31, RFC 2506, | Registration Procedure", BCP 31, RFC 2506, | |||
DOI 10.17487/RFC2506, March 1999, | DOI 10.17487/RFC2506, March 1999, | |||
<https://www.rfc-editor.org/info/rfc2506>. | <https://www.rfc-editor.org/info/rfc2506>. | |||
[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | |||
A., Peterson, J., Sparks, R., Handley, M., and E. | A., Peterson, J., Sparks, R., Handley, M., and E. | |||
Schooler, "SIP: Session Initiation Protocol", RFC 3261, | Schooler, "SIP: Session Initiation Protocol", RFC 3261, | |||
DOI 10.17487/RFC3261, June 2002, | DOI 10.17487/RFC3261, June 2002, | |||
skipping to change at page 42, line 23 ¶ | skipping to change at line 1438 ¶ | |||
[RFC5630] Audet, F., "The Use of the SIPS URI Scheme in the Session | [RFC5630] Audet, F., "The Use of the SIPS URI Scheme in the Session | |||
Initiation Protocol (SIP)", RFC 5630, | Initiation Protocol (SIP)", RFC 5630, | |||
DOI 10.17487/RFC5630, October 2009, | DOI 10.17487/RFC5630, October 2009, | |||
<https://www.rfc-editor.org/info/rfc5630>. | <https://www.rfc-editor.org/info/rfc5630>. | |||
[RFC5761] Perkins, C. and M. Westerlund, "Multiplexing RTP Data and | [RFC5761] Perkins, C. and M. Westerlund, "Multiplexing RTP Data and | |||
Control Packets on a Single Port", RFC 5761, | Control Packets on a Single Port", RFC 5761, | |||
DOI 10.17487/RFC5761, April 2010, | DOI 10.17487/RFC5761, April 2010, | |||
<https://www.rfc-editor.org/info/rfc5761>. | <https://www.rfc-editor.org/info/rfc5761>. | |||
[RFC6184] Wang, Y., Even, R., Kristensen, T., and R. Jesup, "RTP | [RFC6184] Wang, Y.-K., Even, R., Kristensen, T., and R. Jesup, "RTP | |||
Payload Format for H.264 Video", RFC 6184, | Payload Format for H.264 Video", RFC 6184, | |||
DOI 10.17487/RFC6184, May 2011, | DOI 10.17487/RFC6184, May 2011, | |||
<https://www.rfc-editor.org/info/rfc6184>. | <https://www.rfc-editor.org/info/rfc6184>. | |||
[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>. | |||
Acknowledgements | ||||
Besides the authors, the team focusing on this document consists of: | ||||
Roni Even, Simon Pietro Romano, and Roberta Presta. | ||||
Christian Groves, Jonathan Lennox, and Adam Roach have contributed | ||||
detailed comments and suggestions. | ||||
Authors' Addresses | Authors' Addresses | |||
Robert Hanton | Robert Hanton | |||
Cisco Systems | Cisco Systems | |||
Email: rohanse2@cisco.com | Email: rohanse2@cisco.com | |||
Paul Kyzivat | Paul Kyzivat | |||
Email: pkyzivat@alum.mit.edu | Email: pkyzivat@alum.mit.edu | |||
Lennard Xiao | Lennard Xiao | |||
Huawei | Beijing Chuangshiyoulian | |||
Email: lennard.xiao@outlook.com | ||||
Email: lennard.xiao@huawei.com | ||||
Christian Groves | Christian Groves | |||
Email: cngroves.std@gmail.com | Email: cngroves.std@gmail.com | |||
End of changes. 190 change blocks. | ||||
1034 lines changed or deleted | 559 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/ |