rfc8848xml2.original.xml | rfc8848.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | ||||
<?rfc toc='yes'?> | ||||
<?rfc tocdepth='4'?> | ||||
<?rfc compact="yes"?> | ||||
<rfc category="std" ipr="trust200902" docName='draft-ietf-clue-signaling-15'> | ||||
<!--56789012345678901234567890123456789012345678901234567890123456789--> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="exp" ipr="trust200902" | ||||
number="8848" docName="draft-ietf-clue-signaling-15" obsoletes="" updates="" s | ||||
ubmissionType="IETF" consensus="true" xml:lang="en" tocInclude="true" tocDepth=" | ||||
4" symRefs="true" sortRefs="true" version="3"> | ||||
<!-- xml2rfc v2v3 conversion 2.38.1 --> | ||||
<front> | <front> | |||
<title abbrev="CLUE Signaling"> | <title abbrev="CLUE Signaling"> | |||
Session Signaling for Controlling Multiple Streams for Telepresence (CLUE) | Session Signaling for Controlling Multiple Streams for Telepresence (CLUE) | |||
</title> | </title> | |||
<author initials="R." surname="Hanton" fullname="Robert Hanton"> | <seriesInfo name="RFC" value="8848"/> | |||
<author initials="R." surname="Hanton" fullname="Robert Hanton"> | ||||
<organization>Cisco Systems</organization> | <organization>Cisco Systems</organization> | |||
<address> | <address> | |||
<email>rohanse2@cisco.com</email> | <email>rohanse2@cisco.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author initials="P." surname="Kyzivat" fullname="Paul Kyzivat"> | <author initials="P." surname="Kyzivat" fullname="Paul Kyzivat"> | |||
<address> | <address> | |||
<email>pkyzivat@alum.mit.edu</email> | <email>pkyzivat@alum.mit.edu</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author initials="L." surname="Xiao" fullname="Lennard Xiao"> | ||||
<organization>Huawei</organization> | <author initials="L." surname="Xiao" fullname="Lennard Xiao"> | |||
<organization>Beijing Chuangshiyoulian</organization> | ||||
<address> | <address> | |||
<email>lennard.xiao@huawei.com</email> | <email>lennard.xiao@outlook.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author initials="C." surname="Groves" fullname="Christian Groves"> | <author initials="C." surname="Groves" fullname="Christian Groves"> | |||
<address> | <address> | |||
<email>cngroves.std@gmail.com</email> | <email>cngroves.std@gmail.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date month="January" year="2021"/> | ||||
<date year="2019" /> | <abstract> | |||
<abstract> | ||||
<t> | <t> | |||
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 existing | |||
produce a telepresence call. | signaling mechanisms, such as SIP and the Session Description Protocol | |||
(SDP), to produce a telepresence call. | ||||
</t> | </t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section title="Introduction"> | <section numbered="true" toc="default"> | |||
<t> | <name>Introduction</name> | |||
To enable devices to participate in a telepresence call, selecting the sources | <t> | |||
they wish to view, receiving those media sources and displaying them in an | To enable devices to participate in a telepresence call, where they select the s | |||
optimal fashion, CLUE (ControLling mUltiple streams for tElepresence) employs | ources | |||
two principal and inter-related protocol negotiations. | they wish to view, receive those media sources, and display them in an | |||
<xref target="RFC4566">SDP</xref>, conveyed via | optimal fashion, Controlling Multiple Streams for Telepresence (CLUE) employs | |||
<xref target="RFC3261">SIP</xref>, is used to negotiate the specific media | two principal and interrelated protocol negotiations. | |||
SDP <xref target="RFC4566" format="default"/>, conveyed via | ||||
SIP <xref target="RFC3261" format="default"/>, is used to negotiate the specific | ||||
media | ||||
capabilities that can be delivered to specific addresses on a device. | capabilities that can be delivered to specific addresses on a device. | |||
Meanwhile, <xref target="I-D.ietf-clue-protocol">CLUE protocol</xref> | Meanwhile, CLUE protocol messages <xref target="RFC8847" format="default"/>, tra | |||
messages, transported via a | nsported via a | |||
<xref target="I-D.ietf-clue-datachannel">CLUE data channel</xref>, are used to | CLUE data channel <xref target="RFC8850" format="default"/>, are used to | |||
negotiate the Capture Sources available, their attributes and any constraints | negotiate the Capture Sources available, their attributes, and any constraints | |||
in their use. They also allow the far end device to specify which Captures | in their use. They also allow the far-end device to specify which Captures | |||
they wish to receive. It is recommended that those documents be read prior to | they wish to receive. It is recommended that those documents be read prior to | |||
this one as this document assumes familiarity with those protocols and hence | this one as this document assumes familiarity with those protocols and hence | |||
uses terminology from each with limited introduction. | uses terminology from each with limited introduction. | |||
</t> | </t> | |||
<t> | <t> | |||
Beyond negotiating the CLUE channel, SDP is also used to negotiate the details | Beyond negotiating the CLUE channel, SDP is also used to negotiate the details | |||
of supported media streams and the maximum capability of each of those | of supported media streams and the maximum capability of each of those | |||
streams. As the <xref target="I-D.ietf-clue-framework">CLUE Framework</xref> | streams. As the CLUE Framework <xref target="RFC8845" format="default"/> | |||
defines a manner in which the Media Provider expresses their maximum encoding | defines a manner in which the Media Provider expresses their maximum Encoding | |||
group capabilities, SDP is also used to express the encoding limits for each | Group capabilities, SDP is also used to express the encoding limits for each | |||
potential Encoding. | potential Encoding. | |||
</t> | </t> | |||
<t> | <t> | |||
Backwards-compatibility is an important consideration of the protocol: it is | Backwards compatibility is an important consideration of the protocol: it is | |||
vital that a CLUE-capable device contacting a device that does not support | vital that a CLUE-capable device contacting a device that does not support | |||
CLUE is able to fall back to a fully functional non-CLUE call. The document | CLUE is able to fall back to a fully functional non-CLUE call. The document | |||
also defines how a non-CLUE call may be upgraded to CLUE in mid-call, and | also defines how a non-CLUE call may be upgraded to CLUE mid-call and, | |||
similarly how CLUE functionality can be removed mid-call to return to a | similarly, how CLUE functionality can be removed mid-call to return to a | |||
standard non-CLUE call. | standard non-CLUE call. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Terminology"> | <name>Terminology</name> | |||
<t> | <t> | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
"MAY", and "OPTIONAL" in this document are to be interpreted as | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
and only when, they appear in all capitals, as shown here. | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
</t> | be interpreted as | |||
<t> | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | |||
This document uses terminology defined in the | when, and only when, they appear in all capitals, as shown here. | |||
<xref target="I-D.ietf-clue-framework">CLUE Framework</xref>. | ||||
</t> | ||||
<t> | ||||
A few additional terms specific to this document are defined as follows: | ||||
</t> | ||||
<t> | ||||
<list style='hanging'> | ||||
<t hangText="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. | ||||
</t> | </t> | |||
<t hangText="CLUE-controlled media:"> | <t> | |||
This document uses terminology defined in the CLUE Framework | ||||
<xref target="RFC8845" format="default"/>. | ||||
</t> | ||||
<t> | ||||
A few additional terms specific to this document are defined as follows: | ||||
</t> | ||||
<dl newline="false" spacing="normal"> | ||||
<dt>CLUE-controlled media:</dt> | ||||
<dd> | ||||
A media "m=" line that is under CLUE control; the Capture Source that provides | A media "m=" line that is under CLUE control; the Capture Source that provides | |||
the media on this "m=" line is negotiated in CLUE. See | the media on this "m=" line is negotiated in CLUE. See | |||
<xref target="sec.group" /> for details of how this control is signaled in | <xref target="sec.group" format="default"/> for details on how this control is s ignaled in | |||
SDP. There is a corresponding "non-CLUE-controlled" media term. | SDP. There is a corresponding "non-CLUE-controlled" media term. | |||
</t> | </dd> | |||
</list> | <dt>non-CLUE device:</dt> | |||
</t> | <dd> | |||
</section> | 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. | ||||
<section title="Media Feature Tag Definition" anchor="sec.tag"> | </dd> | |||
<t> | <dt>RTCP:</dt><dd>RTP Control Protocol.</dd> | |||
The "sip.clue" media feature tag <xref target="RFC3840"/> indicates | <dt>SCTP:</dt><dd>Stream Control Transmission Protocol.</dd> | |||
support for CLUE in <xref target="RFC3261">SIP</xref> calls. A CLUE-capable | <dt>STUN:</dt><dd>Session Traversal Utilities for NAT.</dd> | |||
device SHOULD include this media feature tag in its REGISTER requests and | </dl> | |||
OPTION responses. It SHOULD also include the media feature tag in INVITE and | </section> | |||
UPDATE <xref target="RFC3311" /> requests and responses. | <section anchor="sec.tag" numbered="true" toc="default"> | |||
</t> | <name>Media Feature Tag Definition</name> | |||
<t> | ||||
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. | ||||
</t> | ||||
</section> | ||||
<section title="SDP Grouping Framework CLUE Extension Semantics" anchor="sec.g | ||||
roup"> | ||||
<section title="General"> | ||||
<t> | <t> | |||
This section defines a new SDP Grouping Framework <xref target="RFC5888" /> | The "sip.clue" media feature tag <xref target="RFC3840" format="default"/> indic | |||
extension called 'CLUE'. | ates | |||
support for CLUE in SIP <xref target="RFC3261" format="default"/> calls. A CLUE- | ||||
capable | ||||
device <bcp14>SHOULD</bcp14> include this media feature tag in its REGISTER requ | ||||
ests and | ||||
OPTION responses. It <bcp14>SHOULD</bcp14> also include the media feature tag in | ||||
INVITE and | ||||
UPDATE <xref target="RFC3311" format="default"/> requests and responses. | ||||
</t> | </t> | |||
<t> | <t> | |||
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. | ||||
</t> | ||||
</section> | ||||
<section anchor="sec.group" numbered="true" toc="default"> | ||||
<name>SDP Grouping Framework CLUE Extension Semantics</name> | ||||
<section numbered="true" toc="default"> | ||||
<name>General</name> | ||||
<t> | ||||
This section defines a new SDP Grouping Framework <xref target="RFC5888" format= | ||||
"default"/> | ||||
extension called 'CLUE'. | ||||
</t> | ||||
<t> | ||||
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, | 'group' attribute. Each SDP media "m=" line that is included in this group, | |||
using SDP media-level mid attributes, is CLUE-controlled, by a CLUE data | using SDP media-level mid attributes, is CLUE controlled by a CLUE data | |||
channel also included in this CLUE group. | channel that is also included in this CLUE group. | |||
</t> | </t> | |||
<t> | <t> | |||
Currently only support for a single CLUE group is specified; support for | Currently, only support for a single CLUE group is specified; support for | |||
multiple CLUE groups in a single session is outside the scope of this | 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 its SDP | document. A device <bcp14>MUST NOT</bcp14> include more than one CLUE group in i ts SDP | |||
message unless it is following a specification that defines how multiple CLUE | message unless it is following a specification that defines how multiple CLUE | |||
channels are signaled, and is either able to determine that the other side of | channels are signaled and is able to either determine that the other side of | |||
the SDP exchange supports multiple CLUE channels, or is able to fail | the SDP exchange supports multiple CLUE channels or fail | |||
gracefully in the event it does not. | gracefully in the event it does not. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="The CLUE data channel and the CLUE grouping semantic"> | <name>The CLUE Data Channel and the CLUE Grouping Semantic</name> | |||
<t> | <t> | |||
The <xref target="I-D.ietf-clue-datachannel">CLUE data channel</xref> is a | The CLUE data channel <xref target="RFC8850" format="default"/> is a | |||
bidirectional <xref target="I-D.ietf-rtcweb-data-channel">data channel</xref> | bidirectional data channel <xref target="RFC8831" format="default"/> | |||
used for the transport of CLUE messages, conveyed within an SCTP over DTLS | used for the transport of CLUE messages, conveyed within an SCTP over DTLS | |||
connection. This channel must be established before CLUE protocol messages can | connection. This channel must be established before CLUE protocol messages can | |||
be exchanged and CLUE-controlled media can be sent. | be exchanged and CLUE-controlled media can be sent. | |||
</t> | </t> | |||
<t> | <t> | |||
The data channel is negotiated over SDP as described in | The data channel is negotiated over SDP as described in | |||
<xref target="I-D.ietf-mmusic-data-channel-sdpneg"/>. A CLUE-capable | <xref target="RFC8864" format="default"/>. A CLUE-capable | |||
device wishing to negotiate CLUE MUST also include a CLUE group in their SDP | device wishing to negotiate CLUE <bcp14>MUST</bcp14> also include a CLUE group i | |||
offer or answer and include the "mid" of the "m=" line for the data channel in | n their SDP | |||
that group. The CLUE group MUST include the "mid" of the "m=" line for one | Offer or Answer and include the "mid" of the "m=" line for the data channel in | |||
that group. The CLUE group <bcp14>MUST</bcp14> include the "mid" of the "m=" lin | ||||
e for one | ||||
(and only one) data channel. | (and only one) data channel. | |||
</t> | </t> | |||
<t> | <t> | |||
Presence of the data channel in the CLUE group in an SDP offer or answer also | 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 an indication that the | serves, along with the "sip.clue" media feature tag, as an indication that the | |||
device supports CLUE and wishes to upgrade the call to include CLUE-controlled | device supports CLUE and wishes to upgrade the call to include CLUE-controlled | |||
media. A CLUE-capable device SHOULD include a data channel "m=" line in offers | media. A CLUE-capable device <bcp14>SHOULD</bcp14> include a data channel "m=" l | |||
and, when allowed by <xref target="RFC3264" />, answers. | ine in offers | |||
</t> | and, when allowed by <xref target="RFC3264" format="default"/>, answers. | |||
</section> | </t> | |||
</section> | ||||
<section title="CLUE-controlled media and the CLUE grouping semantic"> | <section numbered="true" toc="default"> | |||
<t> | <name>CLUE-Controlled Media and the CLUE Grouping Semantic</name> | |||
<t> | ||||
CLUE-controlled media lines in an SDP are "m=" lines in which the content of | 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 | the media streams to be sent is negotiated via the CLUE protocol | |||
<xref target="I-D.ietf-clue-protocol">CLUE protocol</xref>. For an "m=" line | <xref target="RFC8847" format="default"/>. For an "m=" line | |||
to be CLUE-controlled, its "mid" value MUST be included in the CLUE group. | to be CLUE controlled, its "mid" attribute value <bcp14>MUST</bcp14> be included | |||
in the CLUE group. | ||||
CLUE-controlled media is controlled by the CLUE protocol as negotiated on the | CLUE-controlled media is controlled by the CLUE protocol as negotiated on the | |||
CLUE data channel with an "mid" included in the CLUE group. | CLUE data channel with a "mid" included in the CLUE group. | |||
</t> | </t> | |||
<t> | <t> | |||
"m=" lines not specified as under CLUE control follow normal rules for media | "m=" lines not specified as being under CLUE control follow normal rules for med | |||
ia | ||||
streams negotiated in SDP as defined in documents such as | streams negotiated in SDP as defined in documents such as | |||
<xref target="RFC3264" />. | <xref target="RFC3264" format="default"/>. | |||
</t> | </t> | |||
<t> | <t> | |||
The restrictions on CLUE-controlled media that are defined below always apply | The restrictions on CLUE-controlled media that are defined below always apply | |||
to "m=" lines in an SDP offer or answer, even if negotiation of the data | to "m=" lines in an SDP Offer or Answer, even if negotiation of the data | |||
channel in SDP failed due to lack of CLUE support by the remote device or for | channel in SDP failed due to lack of CLUE support by the remote device or for | |||
any other reason, or in an offer if the recipient does not include the "mid" | any other reason, or in an offer if the recipient does not include the "mid" | |||
of the corresponding "m=" line in their CLUE group. | of the corresponding "m=" line in their CLUE group. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="SDP semantics for CLUE-controlled media"> | <name>SDP Semantics for CLUE-Controlled Media</name> | |||
<section title="Signaling CLUE Encodings" anchor="sec.sdp_encodings" | <section anchor="sec.sdp_encodings" numbered="true" toc="default"> | |||
> | <name>Signaling CLUE Encodings</name> | |||
<t> | <t> | |||
The <xref target="I-D.ietf-clue-framework">CLUE Framework</xref> defines the | The CLUE Framework <xref target="RFC8845" format="default"/> defines the | |||
concept of "Encodings", which represent the sender's encode ability. Each | concept of "Encodings", which represent the sender's encode ability. Each | |||
Encoding the Media Provider wishes to signal is signaled via an "m=" line of | Encoding the Media Provider wishes to signal is done so via an "m=" line of | |||
the appropriate media type, which MUST be marked as sendonly with the | the appropriate media type, which <bcp14>MUST</bcp14> be marked as sendonly with | |||
the | ||||
"a=sendonly" attribute or as inactive with the "a=inactive" attribute. | "a=sendonly" attribute or as inactive with the "a=inactive" attribute. | |||
</t> | </t> | |||
<t> | <t> | |||
The encoder limits of active (eg, "a=sendonly") Encodings can then be | The encoder limits of active (e.g., "a=sendonly") Encodings can then be | |||
expressed using existing SDP syntax. For instance, for H.264 see Table 6 in | expressed using existing SDP syntax. For instance, for H.264, see Table 6 in | |||
<xref target="RFC6184" /> for a list of valid parameters for representing | <xref target="RFC6184" sectionFormat="of" section="8.2.2"/> for a list of valid | |||
parameters for representing | ||||
encoder sender stream limits. | encoder sender stream limits. | |||
</t> | </t> | |||
<t> | <t> | |||
These Encodings are CLUE-controlled and hence MUST include an "mid" in the | These Encodings are CLUE controlled and hence <bcp14>MUST</bcp14> include a "mid | |||
" in the | ||||
CLUE group as defined above. | CLUE group as defined above. | |||
</t> | </t> | |||
<t> | <t> | |||
As well as the normal restrictions defined in <xref target="RFC3264" /> the | In addition to the normal restrictions defined in <xref target="RFC3264" format= | |||
stream MUST be treated as if the "m=" line direction attribute had been set to | "default"/>, the | |||
stream <bcp14>MUST</bcp14> be treated as if the "m=" line direction attribute ha | ||||
d been set to | ||||
"a=inactive" until the Media Provider has received a valid CLUE 'configure' | "a=inactive" until the Media Provider has received a valid CLUE 'configure' | |||
message specifying the Capture to be used for this stream. This means that | message specifying the Capture to be used for this stream. This means that | |||
RTP packets MUST NOT be sent until configuration is complete, while | RTP packets <bcp14>MUST NOT</bcp14> be sent until configuration is complete, whi | |||
non-media packets such as STUN, RTCP and DTLS MUST be sent as per their | le | |||
relevant specifications if negotiated. | non-media packets such as STUN, RTCP, and DTLS <bcp14>MUST</bcp14> be sent as pe | |||
</t> | r their | |||
<t> | relevant specifications, if negotiated. | |||
Every "m=" line representing a CLUE Encoding MUST contain a "label" attribute | </t> | |||
as defined in <xref target="RFC4574" />. This label is used to identify the | <t> | |||
Every "m=" line representing a CLUE Encoding <bcp14>MUST</bcp14> contain a "labe | ||||
l" attribute | ||||
as defined in <xref target="RFC4574" format="default"/>. This label is used to i | ||||
dentify the | ||||
Encoding by the sender in CLUE 'advertisement' messages and by the receiver in | Encoding by the sender in CLUE 'advertisement' messages and by the receiver in | |||
CLUE 'configure' messages. Each label used for a CLUE-controlled "m=" line | CLUE 'configure' messages. Each label used for a CLUE-controlled "m=" line | |||
MUST be different from the label on all other "m=" lines in the CLUE group, | <bcp14>MUST</bcp14> be different from the label on all other "m=" lines in the C LUE group, | |||
unless an "m=" line represents a dependent stream related to another "m=" line | unless an "m=" line represents a dependent stream related to another "m=" line | |||
(such as an FEC stream), in which case it MUST have the same label value as | (such as a Forward Error Correction (FEC) stream), in which case it <bcp14>MUST< /bcp14> have the same label value as | |||
the "m=" line on which it depends. | the "m=" line on which it depends. | |||
</t> | </t> | |||
<section title="Referencing Encodings in the CLUE protocol"> | <section numbered="true" toc="default"> | |||
<t> | <name>Referencing Encodings in the CLUE Protocol</name> | |||
CLUE Encodings are defined in SDP, but can be referenced from CLUE protocol | <t> | |||
messages - this is how the protocol defines which Encodings are part of an | CLUE Encodings are defined in SDP but can be referenced from CLUE protocol | |||
Encoding Group (in 'advertisement' messages) and which Encoding with which to | messages -- this is how the protocol defines which Encodings are a part of an | |||
encode a specific Capture (in 'configure' messages). The labels on the | Encoding Group (in 'advertisement' messages) and which Encoding is used to encod | |||
e | ||||
a specific Capture (in 'configure' messages). The labels on the | ||||
CLUE-controlled "m=" lines are the references that are used in the CLUE | CLUE-controlled "m=" lines are the references that are used in the CLUE | |||
protocol. | protocol. | |||
</t> | </t> | |||
<t> | <t> | |||
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 referenced | <bcp14>SHOULD</bcp14> represent an Encoding defined in SDP; the specific Encodin g referenced | |||
is a CLUE-controlled "m=" line in the most recent SDP Offer/Answer message | is a CLUE-controlled "m=" line in the most recent SDP Offer/Answer message | |||
sent by the sender of the 'advertisement' message with a label value | sent by the sender of the 'advertisement' message with a label value | |||
corresponding to the text content of the <encID>. If the <encID> | corresponding to the text content of the <encID>. If the <encID> | |||
is not defined in SDP it MUST be one it anticipates sending in a subsequent | is not defined in SDP, it <bcp14>MUST</bcp14> be one it anticipates sending in a subsequent | |||
SDP Offer/Answer exchange. | SDP Offer/Answer exchange. | |||
</t> | </t> | |||
<t> | <t> | |||
Each <encodingID> (in captureEncodingType) in a CLUE 'configure' message | Each <encodingID> (in captureEncodingType) in a CLUE 'configure' message | |||
MUST represent an Encoding defined in SDP; the specific Encoding referenced is | <bcp14>MUST</bcp14> represent an Encoding defined in SDP; the specific Encoding referenced is | |||
a CLUE-controlled "m=" line in the most recent SDP Offer/Answer message | a CLUE-controlled "m=" line in the most recent SDP Offer/Answer message | |||
received by the sender of the 'configure' message with a label value | received by the sender of the 'configure' message with a label value | |||
corresponding to the text content of the <encodingID>. | corresponding to the text content of the <encodingID>. | |||
</t> | </t> | |||
<t> | <t> | |||
Note that the non-atomic nature of SDP/CLUE protocol interaction may mean that | Note that the non-atomic nature of SDP/CLUE protocol interaction may mean that | |||
there are temporary periods where an <encID>/<encodingID> in a | there are temporary periods where an <encID>/<encodingID> in a | |||
CLUE message does not reference an SDP "m=" line, or where an Encoding | CLUE message does not reference an SDP "m=" line, or where an Encoding | |||
represented in SDP is not referenced in a CLUE protocol message. | represented in SDP is not referenced in a CLUE protocol message. | |||
See <xref target="sec.coordination" /> for specifics. | See <xref target="sec.coordination" format="default"/> for specifics. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section title="Negotiating receipt of CLUE Capture Encodings in SDP | <section numbered="true" toc="default"> | |||
"> | <name>Negotiating Receipt of CLUE Capture Encodings in SDP</name> | |||
<t> | <t> | |||
A receiver who wishes to receive a CLUE stream via a specific Encoding | A receiver who wishes to receive a CLUE stream via a specific Encoding | |||
requires an "a=recvonly" "m=" line that matches the "a=sendonly" Encoding. | requires an "a=recvonly" "m=" line that matches the "a=sendonly" Encoding. | |||
</t> | </t> | |||
<t> | <t> | |||
These "m=" lines are CLUE-controlled and hence MUST include their "mid" in the | These "m=" lines are CLUE controlled and hence <bcp14>MUST</bcp14> include their | |||
CLUE group. They MAY include a "label" attribute, but this is not required by | "mid" in the | |||
CLUE group. They <bcp14>MAY</bcp14> include a "label" attribute, but this is not | ||||
required by | ||||
CLUE, as only label values associated with "a=sendonly" Encodings are | CLUE, as only label values associated with "a=sendonly" Encodings are | |||
referenced by CLUE protocol messages. | referenced by CLUE protocol messages. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="SDP Offer/Answer Procedures"> | <name>SDP Offer/Answer Procedures</name> | |||
<section title="Generating the Initial Offer"> | <section numbered="true" toc="default"> | |||
<t> | <name>Generating the Initial Offer</name> | |||
A CLUE-capable device sending an initial SDP offer of a SIP session and | <t> | |||
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 channel to | wishing to negotiate CLUE will include an "m=" line for the data channel to | |||
convey the CLUE protocol, along with a CLUE group containing the "mid" of the | convey the CLUE protocol, along with a CLUE group containing the "mid" of the | |||
data channel "m=" line. | data channel "m=" line. | |||
</t> | </t> | |||
<t> | <t> | |||
For interoperability with non-CLUE devices a CLUE-capable device sending an | For interoperability with non-CLUE devices, a CLUE-capable device sending an | |||
initial SDP offer SHOULD NOT include any "m=" line for CLUE-controlled media | initial SDP Offer <bcp14>SHOULD NOT</bcp14> include any "m=" line for CLUE-contr | |||
beyond the "m=" line for the CLUE data channel, and SHOULD include at least | olled media | |||
beyond the "m=" line for the CLUE data channel, and it <bcp14>SHOULD</bcp14> inc | ||||
lude at least | ||||
one non-CLUE-controlled media "m=" line. | one non-CLUE-controlled media "m=" line. | |||
</t> | </t> | |||
<t> | <t> | |||
If the device has evidence that the receiver is also CLUE-capable, for | If the device has evidence that the receiver is also CLUE capable, for | |||
instance due to receiving an initial INVITE with no SDP but including a | instance, due to receiving an initial INVITE with no SDP but including a | |||
"sip.clue" media feature tag, the above recommendation is waived, and the | "sip.clue" media feature tag, the above recommendation is waived, and the | |||
initial offer MAY contain "m=" lines for CLUE-controlled media. | initial offer <bcp14>MAY</bcp14> contain "m=" lines for CLUE-controlled media. | |||
</t> | </t> | |||
<t> | <t> | |||
With the same interoperability recommendations as for Encodings, the sender of | With the same interoperability recommendations as for Encodings, the sender of | |||
the initial SDP offer MAY also include "a=recvonly" media lines to | the initial SDP Offer <bcp14>MAY</bcp14> also include "a=recvonly" media lines t | |||
preallocate "m=" lines to receive media. Alternatively, it MAY wait until CLUE | o | |||
preallocate "m=" lines to receive media. Alternatively, it <bcp14>MAY</bcp14> wa | ||||
it until CLUE | ||||
protocol negotiation has completed before including these lines in a new | protocol negotiation has completed before including these lines in a new | |||
offer/answer exchange - see <xref target="sec.coordination" /> for | offer/answer exchange -- see <xref target="sec.coordination" format="default"/> for | |||
recommendations. | recommendations. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Generating the Answer"> | <name>Generating the Answer</name> | |||
<section title="Negotiating use of CLUE and the CLUE data channe | <section numbered="true" toc="default"> | |||
l"> | <name>Negotiating Use of CLUE and the CLUE Data Channel</name> | |||
<t> | <t> | |||
If the recipient of an initial offer is CLUE-capable, and the offer contains | 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 containing the "mid" for | both an "m=" line for a data channel and a CLUE group containing the "mid" for | |||
that "m=" line, they SHOULD negotiate data channel support for an "m=" line, | that "m=" line, they <bcp14>SHOULD</bcp14> negotiate data channel support for an "m=" line | |||
and include the "mid" of that "m=" line in a corresponding CLUE group. | and include the "mid" of that "m=" line in a corresponding CLUE group. | |||
</t> | </t> | |||
<t> | <t> | |||
A CLUE-capable recipient that receives an "m=" line for a data channel but no | A CLUE-capable recipient that receives an "m=" line for a data channel but no | |||
corresponding CLUE group containing the "mid" of that "m=" line MAY still | corresponding CLUE group containing the "mid" of that "m=" line <bcp14>MAY</bcp1 4> still | |||
include a corresponding data channel "m=" line if there are any other non-CLUE | include a corresponding data channel "m=" line if there are any other non-CLUE | |||
protocols it can convey over that channel, but MUST NOT negotiate use of the | protocols it can convey over that channel, but the use of the CLUE protocol <bcp | |||
CLUE protocol on this channel. | 14>MUST NOT</bcp14> be negotiated on this channel. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Negotiating CLUE-controlled media"> | <section numbered="true" toc="default"> | |||
<t> | <name>Negotiating CLUE-Controlled Media</name> | |||
If the initial offer contained "a=recvonly" CLUE-controlled media lines the | <t> | |||
recipient SHOULD include corresponding "a=sendonly" CLUE-controlled media | If the initial offer contained "a=recvonly" CLUE-controlled media lines, the | |||
recipient <bcp14>SHOULD</bcp14> include corresponding "a=sendonly" CLUE-controll | ||||
ed media | ||||
lines for accepted Encodings, up to the maximum number of Encodings it | lines for accepted Encodings, up to the maximum number of Encodings it | |||
wishes to advertise. As CLUE-controlled media, the "mid" of these "m=" lines | wishes to advertise. As CLUE-controlled media, the "mid" of these "m=" lines | |||
MUST be included in the corresponding CLUE group. The recipient MUST set the | <bcp14>MUST</bcp14> be included in the corresponding CLUE group. The recipient < bcp14>MUST</bcp14> set the | |||
direction of the corresponding "m=" lines of any remaining "a=recvonly" | direction of the corresponding "m=" lines of any remaining "a=recvonly" | |||
CLUE-controlled media lines received in the offer to "a=inactive". | CLUE-controlled media lines received in the offer to "a=inactive". | |||
</t> | </t> | |||
<t> | <t> | |||
If the initial offer contained "a=sendonly" CLUE-controlled media lines the | If the initial offer contained "a=sendonly" CLUE-controlled media lines, the | |||
recipient MAY include corresponding "a=recvonly" CLUE-controlled media lines, | recipient <bcp14>MAY</bcp14> include corresponding "a=recvonly" CLUE-controlled | |||
media lines, | ||||
up to the maximum number of Capture Encodings it wishes to receive. | up to the maximum number of Capture Encodings it wishes to receive. | |||
Alternatively, it MAY wait until CLUE protocol negotiation has completed | Alternatively, it <bcp14>MAY</bcp14> wait until CLUE protocol negotiation has co | |||
before including these lines in a new offer/answer exchange - see | mpleted | |||
<xref target="sec.coordination" /> for recommendations. The recipient MUST set | before including these lines in a new offer/answer exchange -- see | |||
<xref target="sec.coordination" format="default"/> for recommendations. The reci | ||||
pient <bcp14>MUST</bcp14> set | ||||
the direction of the corresponding "m=" lines of any remaining "a=sendonly" | the direction of the corresponding "m=" lines of any remaining "a=sendonly" | |||
CLUE-controlled media lines received in the offer to "a=inactive" | CLUE-controlled media lines received in the offer to "a=inactive". | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Negotiating non-CLUE controlled media"> | <section numbered="true" toc="default"> | |||
<t> | <name>Negotiating Non-CLUE-controlled Media</name> | |||
A CLUE-controlled device implementation MAY prefer to render initial, | <t> | |||
A CLUE-controlled device implementation <bcp14>MAY</bcp14> prefer to render init | ||||
ial, | ||||
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, only | Alternatively, an implementation <bcp14>MAY</bcp14> wish to suppress initial med ia, only | |||
providing media once the final, CLUE-controlled streams have been negotiated. | providing media once the final, CLUE-controlled streams have been negotiated. | |||
</t> | </t> | |||
<t> | <t> | |||
The receiver of the initial offer, if making the call CLUE-enabled with their | The receiver of the initial offer, if making the call CLUE-enabled with their | |||
SDP answer, can make their preference clear by their action in accepting or | SDP Answer, can make their preference clear by their action in accepting or | |||
rejecting non-CLUE-controlled media lines. Rejecting these "m=" lines will | rejecting non-CLUE-controlled media lines. Rejecting these "m=" lines will | |||
ensure that no non-CLUE-controlled media flows before the CLUE-controlled | ensure that no non-CLUE-controlled media flows before the CLUE-controlled | |||
media is negotiated. In contrast, accepting one or more non-CLUE-controlled | media is negotiated. In contrast, accepting one or more non-CLUE-controlled | |||
"m=" lines in this initial answer will enable initial media to flow. | "m=" lines in this initial answer will enable initial media to flow. | |||
</t> | </t> | |||
<t> | <t> | |||
If the answerer chooses to send initial non-CLUE-controlled media in a | If the answerer chooses to send initial non-CLUE-controlled media in a | |||
CLUE-enabled call, <xref target="sec.clue-media" /> addresses the need to | CLUE-enabled call, <xref target="sec.clue-media" format="default"/> addresses th | |||
disable it once CLUE-controlled media is fully negotiated. | e need to | |||
</t> | disable it once the CLUE-controlled media is fully negotiated. | |||
</section> | </t> | |||
</section> | </section> | |||
</section> | ||||
<section title="Processing the initial Offer/Answer negotiation"> | <section numbered="true" toc="default"> | |||
<t> | <name>Processing the Initial Offer/Answer Negotiation</name> | |||
In the event that both offer and answer include a data channel "m=" line with | <t> | |||
a mid value included in corresponding CLUE groups, CLUE has been successfully | In the event that both the offer and answer include a data channel "m=" line wit | |||
negotiated and the call is now CLUE-enabled. If not then the call is not | h | |||
CLUE-enabled. | a "mid" value included in corresponding CLUE groups, CLUE has been successfully | |||
</t> | negotiated, and the call is now CLUE enabled. If not, then the call is not | |||
<section title="Successful CLUE negotiation"> | CLUE enabled. | |||
<t> | </t> | |||
In the event of successful CLUE-enablement of the call, devices MUST now begin | <section numbered="true" toc="default"> | |||
negotiation of the CLUE channel, see | <name>Successful CLUE Negotiation</name> | |||
<xref target="I-D.ietf-clue-datachannel" /> for negotiation details. If | <t> | |||
negotiation is successful, sending of <xref target="I-D.ietf-clue-protocol"> | In the event of successful CLUE enablement of the call, devices <bcp14>MUST</bcp | |||
CLUE protocol</xref> messages can begin. | 14> now begin | |||
</t> | negotiation of the CLUE channel; see | |||
<t> | <xref target="RFC8850" format="default"/> for negotiation details. If | |||
A CLUE-capable device MAY choose not to send RTP on the non-CLUE-controlled | negotiation is successful, the sending of CLUE protocol messages <xref target="R | |||
FC8847" format="default"/> can begin. | ||||
</t> | ||||
<t> | ||||
A CLUE-capable device <bcp14>MAY</bcp14> choose not to send RTP on the non-CLUE- | ||||
controlled | ||||
channels during the period in which control of the CLUE-controlled media lines | channels during the period in which control of the CLUE-controlled media lines | |||
is being negotiated (though RTCP MUST still be sent and received as normal). | is being negotiated (though RTCP <bcp14>MUST</bcp14> still be sent and received | |||
However, a CLUE-capable device MUST still be prepared to receive media on | as normal). | |||
However, a CLUE-capable device <bcp14>MUST</bcp14> still be prepared to receive | ||||
media on | ||||
non-CLUE-controlled media lines that have been successfully negotiated as | non-CLUE-controlled media lines that have been successfully negotiated as | |||
defined in <xref target="RFC3264" />. | defined in <xref target="RFC3264" format="default"/>. | |||
</t> | </t> | |||
<t> | <t> | |||
If either side of the call wishes to add additional CLUE-controlled "m=" lines | 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 a SIP request with | to send or receive CLUE-controlled media, they <bcp14>MAY</bcp14> now send a SIP | |||
a new SDP offer following the normal rules of SDP offer/answer and any | request with | |||
a new SDP Offer following the normal rules of SDP Offer/Answer and any | ||||
negotiated extensions. | negotiated extensions. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="CLUE negotiation failure"> | <section numbered="true" toc="default"> | |||
<t> | <name>CLUE Negotiation Failure</name> | |||
<t> | ||||
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 is | CLUE enabled once the initial offer/answer negotiation completes, then CLUE is | |||
not in use in the call. The CLUE-capable devices MUST either revert to | not in use in the call. CLUE-capable devices <bcp14>MUST</bcp14> either revert t | |||
non-CLUE behaviour or terminate the call. | o | |||
</t> | non-CLUE behavior or terminate the call. | |||
</section> | </t> | |||
</section> | </section> | |||
</section> | ||||
<section title="Modifying the session"> | <section numbered="true" toc="default"> | |||
<section title="Adding and removing CLUE-controlled media" ancho | <name>Modifying the Session</name> | |||
r="sec.clue-media"> | <section anchor="sec.clue-media" numbered="true" toc="default"> | |||
<t> | <name>Adding and Removing CLUE-Controlled Media</name> | |||
Subsequent offer/answer exchanges MAY add additional "m=" lines for | <t> | |||
CLUE-controlled media, or activate or deactivate existing "m=" lines per the | Subsequent offer/answer exchanges <bcp14>MAY</bcp14> add additional "m=" lines f | |||
or | ||||
CLUE-controlled media or activate or deactivate existing "m=" lines per the | ||||
standard SDP mechanisms. | standard SDP mechanisms. | |||
</t> | </t> | |||
<t> | <t> | |||
In most cases at least one additional exchange after the initial offer/answer | In most cases, at least one additional exchange after the initial offer/answer | |||
exchange will be required before both sides have added all the Encodings and | exchange will be required before both sides have added all the Encodings and | |||
ability to receive Encodings that they desire. Devices MAY delay adding | the ability to receive Encodings that they desire. Devices <bcp14>MAY</bcp14> de lay adding | |||
"a=recvonly" CLUE-controlled "m=" lines until after CLUE protocol negotiation | "a=recvonly" CLUE-controlled "m=" lines until after CLUE protocol negotiation | |||
completes - see <xref target="sec.coordination" /> for recommendations. | completes -- see <xref target="sec.coordination" format="default"/> for recommen | |||
</t> | dations. | |||
<t> | </t> | |||
Once CLUE media has been successfully negotiated devices SHOULD ensure that | <t> | |||
Once CLUE media has been successfully negotiated, devices <bcp14>SHOULD</bcp14> | ||||
ensure that | ||||
non-CLUE-controlled media is deactivated by setting their ports to 0 in cases | non-CLUE-controlled media is deactivated by setting their ports to 0 in cases | |||
where it corresponds to the media type of CLUE-controlled media that has been | where it corresponds to the media type of CLUE-controlled media that has been | |||
successfully negotiated. This deactivation may require an additional SDP | successfully negotiated. This deactivation may require an additional SDP | |||
exchange, or may be incorporated into one that is part of the CLUE | exchange or may be incorporated into one that is part of the CLUE | |||
negotiation. | negotiation. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Enabling CLUE mid-call"> | <name>Enabling CLUE Mid-Call</name> | |||
<t> | <t> | |||
A CLUE-capable device that receives an initial SDP offer from a non-CLUE | A CLUE-capable device that receives an initial SDP Offer from a non-CLUE | |||
device SHOULD include a new data channel "m=" line and corresponding CLUE | device <bcp14>SHOULD</bcp14> include a new data channel "m=" line and correspond | |||
group in any subsequent offers it sends, to indicate that it is CLUE-capable. | ing CLUE | |||
</t> | group in any subsequent offers it sends, to indicate that it is CLUE capable. | |||
<t> | </t> | |||
If, in an ongoing non-CLUE call, an SDP offer/answer exchange completes with | <t> | |||
If, in an ongoing non-CLUE call, an SDP Offer/Answer exchange completes with | ||||
both sides having included a data channel "m=" line in their SDP and with the | both sides having included a data channel "m=" line in their SDP and with the | |||
"mid" for that channel in a corresponding CLUE group then the call is now | "mid" for that channel in a corresponding CLUE group, then the call is now | |||
CLUE-enabled; negotiation of the data channel and subsequently the CLUE | CLUE enabled; negotiation of the data channel and subsequently the CLUE | |||
protocol begins. | protocol begins. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec.clue-disable" numbered="true" toc="default"> | ||||
<section title="Disabling CLUE mid-call" anchor="sec.clue-disabl | <name>Disabling CLUE Mid-Call</name> | |||
e"> | <t> | |||
<t> | If, during an ongoing CLUE-enabled call, a device wishes to disable CLUE, it | |||
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 channel as defined in | |||
can do so by following the procedures for closing a data channel defined in | <xref target="RFC8864" sectionFormat="of" section="6.6.1"/>: sending | |||
Section 5.2.4 of <xref target="I-D.ietf-mmusic-data-channel-sdpneg"/>: sending | a new SDP Offer/Answer exchange and subsequent SCTP Stream Sequence Number (SSN) | |||
a new SDP offer/answer exchange and subsequent SCTP SSN reset for the CLUE | reset for the CLUE | |||
channel. It MUST also remove the CLUE group. Without the CLUE group any "m=" | channel. It <bcp14>MUST</bcp14> also remove the CLUE group. Without the CLUE gro | |||
lines that were previously CLUE-controlled no longer are; implementations MAY | up, any "m=" | |||
disable them by setting their ports to 0 or MAY continue to use them - in the | lines that were previously CLUE controlled no longer are; implementations <bcp14 | |||
latter case how they are used is outside the scope of this document. | >MAY</bcp14> | |||
</t> | disable them by setting their ports to 0 or <bcp14>MAY</bcp14> continue to use t | |||
<t> | hem -- in the | |||
If a device follows the procedure above, or an SDP offer-answer negotiation | latter case, how they are used is outside the scope of this document. | |||
</t> | ||||
<t> | ||||
If a device follows the procedure above, or an SDP Offer/Answer negotiation | ||||
completes in a fashion in which either the "m=" CLUE data channel line was not | completes in a fashion in which either the "m=" CLUE data channel line was not | |||
successfully negotiated, and/or one side did not include the data channel in | successfully negotiated and/or one side did not include the data channel in | |||
the CLUE group then CLUE for this call is disabled. In the event that this | the CLUE group, then CLUE for this call is disabled. In the event that this | |||
occurs, CLUE is no longer enabled. Any active "m=" lines still included in the | occurs, CLUE is no longer enabled. Any active "m=" lines still included in the | |||
CLUE group are no longer CLUE-controlled and the implementation MAY either | CLUE group are no longer CLUE controlled, and the implementation <bcp14>MAY</bcp 14> either | |||
disable them in a subsequent negotiation or continue to use them in some other | disable them in a subsequent negotiation or continue to use them in some other | |||
fashion. If the data channel is still present but not included in the CLUE | fashion. If the data channel is still present but not included in the CLUE | |||
group semantic CLUE protocol messages MUST no longer be sent. | group semantic, CLUE protocol messages <bcp14>MUST</bcp14> no longer be sent. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="CLUE protocol failure mid-call"> | <name>CLUE Protocol Failure Mid-Call</name> | |||
<t> | <t> | |||
In contrast to the specific disablement of the use of CLUE described above, | In contrast to the specific disablement of the use of CLUE described above, | |||
the CLUE channel may fail unexpectedly. Two circumstances where this can occur | the CLUE channel may fail unexpectedly. Two circumstances where this can occur | |||
are: | are: | |||
<list style='symbols'> | </t> | |||
<t> | <ul spacing="normal"> | |||
<li> | ||||
The CLUE data channel terminates, either gracefully or ungracefully, without | The CLUE data channel terminates, either gracefully or ungracefully, without | |||
any corresponding SDP renegotiation. | any corresponding SDP renegotiation. | |||
</t> | </li> | |||
<t> | <li> | |||
A channel error of the CLUE protocol causes it to return to the IDLE state as | A channel error of the CLUE protocol causes it to return to the IDLE state as | |||
defined in Section 6. of <xref target="I-D.ietf-clue-protocol" />. | defined in <xref target="RFC8847" sectionFormat="of" section="6"/>. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <t> | |||
<t> | In this circumstance, implementations <bcp14>SHOULD</bcp14> continue to transmit | |||
In this circumstance implementations SHOULD continue to transmit and receive | and receive | |||
CLUE-controlled media on the basis of the last negotiated CLUE messages, | CLUE-controlled media on the basis of the last negotiated CLUE messages, | |||
until the CLUE protocol is re-established (in the event of a channel error) or | until the CLUE protocol is re-established (in the event of a channel error) or | |||
disabled mid-call by an SDP exchange as defined in | disabled mid-call by an SDP exchange as defined in | |||
<xref target="sec.clue-disable" />. Implementations MAY choose to send such | <xref target="sec.clue-disable" format="default"/>. Implementations <bcp14>MAY</ | |||
an SDP request to disable CLUE immediately or MAY continue on in a | bcp14> choose to send such | |||
an SDP request to disable CLUE immediately or <bcp14>MAY</bcp14> continue on in | ||||
a | ||||
call-preservation mode. | call-preservation mode. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | ||||
</section> | </section> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="sec.coordination" numbered="true" toc="default"> | ||||
<section title="Interaction of CLUE protocol and SDP negotiations" anchor="s | <name>Interaction of the CLUE Protocol and SDP Negotiations</name> | |||
ec.coordination"> | ||||
<t> | <t> | |||
Information about media streams in CLUE is split between two message types: | Information about media streams in CLUE is split between two message types: | |||
SDP, which defines media addresses and limits, and the CLUE channel, | SDP, which defines media addresses and limits, and the CLUE channel, | |||
which defines properties of Capture Devices available, scene information and | which defines properties of Capture Devices available, scene information, and | |||
additional constraints. As a result certain operations, such as advertising | additional constraints. As a result, certain operations, such as advertising | |||
support for a new transmissible Capture with associated stream, cannot be | support for a new transmissible Capture with an associated stream, cannot be | |||
performed atomically, as they require changes to both SDP and CLUE messaging. | performed atomically, as they require changes to both SDP and CLUE messaging. | |||
</t> | </t> | |||
<t> | <t> | |||
This section defines how the negotiation of the two protocols interact, | This section defines how the negotiation of the two protocols interact, | |||
provides some recommendations on dealing with intermediate stages in | provides some recommendations on dealing with intermediate stages in | |||
non-atomic operations, and mandates additional constraints on when | non-atomic operations, and mandates additional constraints on when | |||
CLUE-configured media can be sent. | CLUE-configured media can be sent. | |||
</t> | </t> | |||
<section title="Independence of SDP and CLUE negotiation"> | <section numbered="true" toc="default"> | |||
<t> | <name>Independence of SDP and CLUE Negotiation</name> | |||
<t> | ||||
To avoid the need to implement interlocking state machines with the potential | To avoid the need to implement interlocking state machines with the potential | |||
to reach invalid states if messages were to be lost, or be rewritten en-route | to reach invalid states if messages were to be lost, or be rewritten en route | |||
by middle boxes, the state machines in SDP and CLUE operate independently. The | by middleboxes, the state machines in SDP and CLUE operate independently. The | |||
state of the CLUE channel does not restrict when an implementation may send a | state of the CLUE channel does not restrict when an implementation may send a | |||
new SDP offer or answer, and likewise the implementation’s ability to send a | new SDP Offer or Answer; likewise, the implementation's ability to send a | |||
new CLUE 'advertisement' or 'configure' message is not restricted by the | new CLUE 'advertisement' or 'configure' message is not restricted by the | |||
results of or the state of the most recent SDP negotiation (unless the SDP | results of or the state of the most recent SDP negotiation (unless the SDP | |||
negotiation has removed the CLUE channel). | negotiation has removed the CLUE channel). | |||
</t> | </t> | |||
<t> | <t> | |||
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 have | Offer/Answer message with a CLUE Encoding for which it does not yet have | |||
Capture information, or receive a CLUE 'configure' message specifying a | Capture information or receive a CLUE 'configure' message specifying a | |||
Capture Encoding for which the far end has not negotiated a media stream in | Capture Encoding for which the far end has not negotiated a media stream in | |||
SDP. | SDP. | |||
</t> | </t> | |||
<t> | <t> | |||
CLUE messages contain an <encID> (in encodingIDList) or | CLUE messages contain an <encID> (in encodingIDList) or | |||
<encodingID> (in captureEncodingType), which is used to identify a | <encodingID> (in captureEncodingType), which is used to identify a | |||
specific encoding or captureEncoding in SDP; see | specific Encoding or captureEncoding in SDP; see | |||
<xref target="I-D.ietf-clue-data-model-schema" /> for specifics. | <xref target="RFC8846" format="default"/> for specifics. | |||
The non-atomic nature of CLUE negotiation means that a sender may wish to send | The non-atomic nature of CLUE negotiation means that a sender may wish to send | |||
a new CLUE 'advertisement' message before the corresponding SDP message. As | a new CLUE 'advertisement' message before the corresponding SDP message. As | |||
such the sender of the CLUE message MAY include an <encID> which does | such, the sender of the CLUE message <bcp14>MAY</bcp14> include an <encID> | |||
not currently match a CLUE-controlled "m=" line label in SDP; A CLUE-capable | that does | |||
implementation MUST NOT reject a CLUE protocol message solely because it | not currently match a CLUE-controlled "m=" line label in SDP; a CLUE-capable | |||
implementation <bcp14>MUST NOT</bcp14> reject a CLUE protocol message solely bec | ||||
ause it | ||||
contains <encID> elements that do not match a label in SDP. | contains <encID> elements that do not match a label in SDP. | |||
</t> | </t> | |||
<t> | <t> | |||
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 language of | state machines does not affect compliance with any of the normative language of | |||
<xref target="RFC3264" />. That is, they MUST NOT delay an ongoing SDP | <xref target="RFC3264" format="default"/>. That is, they <bcp14>MUST NOT</bcp14> | |||
exchange as part of a SIP server or client transaction; an implementation MUST | delay an ongoing SDP | |||
NOT delay an SDP exchange while waiting for CLUE negotiation to complete or | exchange as part of a SIP server or client transaction; an implementation <bcp14 | |||
>MUST | ||||
NOT</bcp14> delay an SDP exchange while waiting for CLUE negotiation to complete | ||||
or | ||||
for a 'configure' message to arrive. | for a 'configure' message to arrive. | |||
</t> | </t> | |||
<t> | <t> | |||
Similarly, a device in a CLUE-enabled call MUST NOT delay any mandatory state | Similarly, a device in a CLUE-enabled call <bcp14>MUST NOT</bcp14> delay any man datory state | |||
transitions in the CLUE Participant or Media Provider/Consumer state machines | transitions in the CLUE Participant or Media Provider/Consumer state machines | |||
due to the presence or absence of an ongoing SDP exchange. | due to the presence or absence of an ongoing SDP exchange. | |||
</t> | </t> | |||
<t> | <t> | |||
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 | <bcp14>MAY</bcp14> choose to delay moving from ESTABLISHED to ADV (Media Provide r | |||
state machine) or from ESTABLISHED to WAIT FOR CONF RESPONSE (Media Consumer | state machine) or from ESTABLISHED to WAIT FOR CONF RESPONSE (Media Consumer | |||
state machine) based on the SDP state. See | state machine) based on the SDP state. See | |||
<xref target="I-D.ietf-clue-protocol"/> for CLUE state machine specifics. | <xref target="RFC8847" format="default"/> for CLUE state machine specifics. | |||
Similarly, a device MAY choose to delay initiating a new SDP exchange based on | Similarly, a device <bcp14>MAY</bcp14> choose to delay initiating a new SDP exch | |||
ange based on | ||||
the state of their CLUE state machines. | the state of their CLUE state machines. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Constraints on sending media"> | <section numbered="true" toc="default"> | |||
<t> | <name>Constraints on Sending Media</name> | |||
<t> | ||||
While SDP and CLUE message states do not impose constraints on each other, | While SDP and CLUE message states do not impose constraints on each other, | |||
both impose constraints on the sending of media - CLUE-controlled media MUST | both impose constraints on the sending of media -- CLUE-controlled media <bcp14> | |||
NOT be sent unless it has been negotiated in both CLUE and SDP: an | MUST | |||
implementation MUST NOT send a specific CLUE Capture Encoding unless its most | NOT</bcp14> be sent unless it has been negotiated in both CLUE and SDP: an | |||
implementation <bcp14>MUST NOT</bcp14> send a specific CLUE Capture Encoding unl | ||||
ess its most | ||||
recent SDP exchange contains an active media channel for that Encoding AND | recent SDP exchange contains an active media channel for that Encoding AND | |||
it has received a CLUE 'configure' message specifying a valid Capture for that | it has received a CLUE 'configure' message specifying a valid Capture for that | |||
Encoding. | Encoding. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Recommendations for operating with non-atomic operations"> | <section numbered="true" toc="default"> | |||
<name>Recommendations for Operating with Non-atomic Operations</name> | ||||
<t> | <t> | |||
CLUE-capable devices MUST be able to handle states in which CLUE messages make | CLUE-capable devices <bcp14>MUST</bcp14> be able to handle states in which CLUE messages make | |||
reference to EncodingIDs that do not match the most recently received SDP, | reference to EncodingIDs that do not match the most recently received SDP, | |||
irrespective of the order in which SDP and CLUE messages are received. While | irrespective of the order in which SDP and CLUE messages are received. While | |||
these mismatches will usually be transitory a device MUST be able to cope | these mismatches will usually be transitory, a device <bcp14>MUST</bcp14> be abl e to cope | |||
with such mismatches remaining indefinitely. However, this document makes some | with such mismatches 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. | |||
</t> | </t> | |||
<t> | <t> | |||
CLUE-capable devices MUST ensure that any inconsistencies between SDP and | CLUE-capable devices <bcp14>MUST</bcp14> ensure that any inconsistencies between SDP and | |||
CLUE signaling are temporary by sending updated SDP or CLUE messages as soon | CLUE signaling are temporary by sending updated SDP or CLUE messages as soon | |||
as the relevant state machines and other constraints permit. | as the relevant state machines and other constraints permit. | |||
</t> | </t> | |||
<t> | <t> | |||
Generally, implementations that receive messages for which they have | Generally, implementations that receive messages with | |||
incomplete information will be most efficient if they wait until they have the | incomplete information will be most efficient if they wait until they have the | |||
corresponding information they lack before sending messages to make changes | corresponding information they lack before sending messages to make changes | |||
related to that information. For example, an answerer that receives a new SDP | related to that information. For example, an answerer that receives a new SDP | |||
offer with three new "a=sendonly" CLUE "m=" lines for which it has received no | Offer with three new "a=sendonly" CLUE "m=" lines for which it has received no | |||
CLUE 'advertisement' message providing the corresponding capture information | CLUE 'advertisement' message providing the corresponding capture information | |||
would typically inclue corresponding "a=inactive" lines in its answer, and | would typically include corresponding "a=inactive" lines in its answer, and | |||
only make a new SDP offer with "a=recvonly" when and if a new 'advertisement' | it would only make a new SDP Offer with "a=recvonly" when and if a new 'advertis | |||
ement' | ||||
message arrives with Captures relevant to those Encodings. | message arrives with Captures relevant to those Encodings. | |||
</t> | </t> | |||
<t> | <t> | |||
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 message, | negotiations are generally more 'costly' than sending a new CLUE message, | |||
implementations needing to make changes to both channels SHOULD prioritize | implementations needing to make changes to both channels <bcp14>SHOULD</bcp14> p rioritize | |||
sending the updated CLUE message over sending the new SDP message. The aim is | sending the updated CLUE message over sending the new SDP message. The aim is | |||
for the recipient to receive the CLUE changes before the SDP changes, allowing | for the recipient to receive the CLUE changes before the SDP changes, allowing | |||
the recipient to send their SDP answers without incomplete information, | the recipient to send their SDP Answers without incomplete information and | |||
reducing the number of new SDP offers required. | reducing the number of new SDP Offers required. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec.capture-id" numbered="true" toc="default"> | ||||
<section title="Interaction of CLUE protocol and RTP/RTCP CaptureID" anchor=" | <name>Interaction of the CLUE Protocol and RTP/RTCP CaptureID</name> | |||
sec.capture-id"> | ||||
<t> | <t> | |||
The <xref target="I-D.ietf-clue-framework">CLUE Framework</xref> allows for | The CLUE Framework <xref target="RFC8845" format="default"/> allows for | |||
Multiple Content Captures (MCCs): Captures which contain multiple source | Multiple Content Captures (MCCs): Captures that contain multiple source | |||
Captures, whether composited into a single stream or switched based on some | Captures, whether composited into a single stream or switched based on some | |||
metric. | metric. | |||
</t> | </t> | |||
<t> | <t> | |||
The Captures that contribute to these MCCs may or may not be defined in the | 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 providing them in | 'advertisement' message. If they are defined and the MCC is providing them in | |||
a switched format the recipient may wish to determine which originating source | a switched format, the recipient may wish to determine which originating source | |||
Capture is currently being provided, so that they can apply geometric | Capture is currently being provided, so that they can apply geometric | |||
corrections based on that Capture's geometry, or take some other action based | corrections based on that Capture's geometry or take some other action based | |||
on the original Capture information. | on the original Capture information. | |||
</t> | </t> | |||
<t> | <t> | |||
To do this, <xref target="I-D.ietf-clue-rtp-mapping" /> allows for the | To do this, <xref target="RFC8849" format="default"/> allows for the CaptureID o | |||
CaptureID of the originating Capture to be conveyed via RTP or RTCP. A Media | f the originating Capture to be conveyed via RTP or RTCP. A Media | |||
Provider sending switched media for an MCC with defined originating sources | Provider sending switched media for an MCC with defined originating sources | |||
MUST send the CaptureID in both RTP and RTCP, as described | <bcp14>MUST</bcp14> send the CaptureID in both RTP and RTCP, as described | |||
in the mapping document. | in the mapping document. | |||
</t> | </t> | |||
<section title="CaptureID reception during MCC redefinition"> | <section numbered="true" toc="default"> | |||
<t> | <name>CaptureID Reception during MCC Redefinition</name> | |||
<t> | ||||
Because the RTP/RTCP CaptureID is delivered via a different channel to the | Because the RTP/RTCP CaptureID is delivered via a different channel to the | |||
'advertisement' message in which in the contents of the MCC are defined there | 'advertisement' message in which in the contents of the MCC are defined, there | |||
is an intrinsic race condition in cases in which the contents of an MCC are | is an intrinsic race condition in cases where the contents of an MCC are | |||
redefined. | redefined. | |||
</t> | </t> | |||
<t> | <t> | |||
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 lead or lag | reception of the relevant CaptureIDs by the recipient will either lead or lag re | |||
reception and processing of the new 'advertisement' message by the recipient. | ception and the processing of the new 'advertisement' message by the recipient. | |||
As such, a Media Consumer MUST NOT be disrupted by any of the following in any | As such, a Media Consumer <bcp14>MUST NOT</bcp14> be disrupted by any of the fol | |||
lowing scenarios in any | ||||
CLUE-controlled media stream it is receiving, whether that stream is for a | CLUE-controlled media stream it is receiving, whether that stream is for a | |||
static Capture or for an MCC (as any static Capture may be redefined to an MCC | static Capture or for an MCC (as any static Capture may be redefined to an MCC | |||
in a later 'advertisement' message): | in a later 'advertisement' message): | |||
<list style='symbols'> | </t> | |||
<t> | <ul spacing="normal"> | |||
Receiving RTP or RTCP containing a CaptureID when the most recently processed | <li> | |||
'advertisement' message means that none are expected. | By receiving RTP or RTCP containing a CaptureID when the most recently processed | |||
</t> | 'advertisement' message means that no media CaptureIDs are expected. | |||
<t> | </li> | |||
Receiving RTP or RTCP without CaptureIDs when the most recently processed | <li> | |||
By receiving RTP or RTCP without CaptureIDs when the most recently processed | ||||
'advertisement' message means that media CaptureIDs are expected. | 'advertisement' message means that media CaptureIDs are expected. | |||
</t> | </li> | |||
<t> | <li> | |||
Receiving a CaptureID in RTP or RTCP for a Capture defined in the most | By receiving a CaptureID in RTP or RTCP for a Capture defined in the most | |||
recently processed 'advertisement' message, but which the same 'advertisement' | recently processed 'advertisement' message, but which the same 'advertisement' | |||
message does not include in the MCC. | message does not include in the MCC. | |||
</t> | </li> | |||
<t> | <li> | |||
Receiving a CaptureID in RTP or RTCP for a Capture not defined in the most | By receiving a CaptureID in RTP or RTCP for a Capture not defined in the most | |||
recently processed 'advertisement' message. | recently processed 'advertisement' message. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec-bundle" numbered="true" toc="default"> | ||||
<section title="Multiplexing of CLUE-controlled media using BUNDLE" anchor="s | <name>Multiplexing of CLUE-Controlled Media Using BUNDLE</name> | |||
ec-bundle"> | <section numbered="true" toc="default"> | |||
<section title="Overview"> | <name>Overview</name> | |||
<t> | <t> | |||
A CLUE call may involve sending and/or receiving significant numbers of media | A CLUE call may involve sending and/or receiving significant numbers of media | |||
streams. Conventionally, media streams are sent and received on unique ports. | streams. Conventionally, media streams are sent and received on unique ports. | |||
However, each separate port used for this purpose may impose costs that a | However, each separate port used for this purpose may impose costs that a | |||
device wishes to avoid, such as the need to open that port on firewalls and | device wishes to avoid, such as the need to open that port on firewalls and | |||
NATs, the need to collect <xref target="RFC8445">ICE candidates</xref>, etc. | NATs, the need to collect Interactive Connectivity Establishment (ICE) candidate | |||
</t> | s <xref target="RFC8445" format="default"/>, etc. | |||
<t> | </t> | |||
The <xref target="I-D.ietf-mmusic-sdp-bundle-negotiation">BUNDLE</xref> | <t> | |||
extension can be used to negotiate the multiplexing of multiple media lines | The BUNDLE extension <xref target="RFC8843" format="default"/> can be used to ne | |||
gotiate the multiplexing of multiple media lines | ||||
onto a single 5-tuple for sending and receiving media, allowing devices in | onto a single 5-tuple for sending and receiving media, allowing devices in | |||
calls to another BUNDLE-supporting device to potentially avoid some of the | calls to another BUNDLE-supporting device to potentially avoid some of the | |||
above costs. | above costs. | |||
</t> | </t> | |||
<t> | <t> | |||
While CLUE-capable devices MAY support the BUNDLE extension for this purpose | While CLUE-capable devices <bcp14>MAY</bcp14> support the BUNDLE extension for t | |||
supporting the extension is not mandatory for a device to be CLUE-compliant. | his purpose, | |||
</t> | supporting the extension is not mandatory for a device to be CLUE compliant. | |||
<t> | </t> | |||
A CLUE-capable device that supports BUNDLE SHOULD also support | <t> | |||
<xref target="RFC5761">rtcp-mux</xref>. However, a CLUE-capable device that | A CLUE-capable device that supports BUNDLE <bcp14>SHOULD</bcp14> also support rt | |||
cp-mux | ||||
<xref target="RFC5761" format="default"/>. However, a CLUE-capable device that | ||||
supports rtcp-mux may or may not support BUNDLE. | supports rtcp-mux may or may not support BUNDLE. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Usage of BUNDLE with CLUE"> | <section numbered="true" toc="default"> | |||
<t> | <name>Usage of BUNDLE with CLUE</name> | |||
<t> | ||||
This specification imposes no additional requirements or restrictions on the | This specification imposes no additional requirements or restrictions on the | |||
usage of BUNDLE when used with CLUE. There is no restriction on combining | usage of BUNDLE when used with CLUE. There is no restriction on combining | |||
CLUE-controlled media lines and non-CLUE-controlled media lines in the same | CLUE-controlled media lines and non-CLUE-controlled media lines in the same | |||
BUNDLE group or in multiple such groups. However, there are several steps an | BUNDLE group or in multiple such groups. However, there are several steps an | |||
implementation may wish to take to ameliorate the cost and time requirements | implementation may wish to take to ameliorate the cost and time requirements | |||
of extra SDP offer/answer exchanges between CLUE and BUNDLE. | of extra SDP Offer/Answer exchanges between CLUE and BUNDLE. | |||
</t> | </t> | |||
<section title="Generating the Initial Offer"> | <section numbered="true" toc="default"> | |||
<t> | <name>Generating the Initial Offer</name> | |||
BUNDLE mandates that the initial SDP offer MUST use a unique address for each | <t> | |||
BUNDLE mandates that the initial SDP Offer <bcp14>MUST</bcp14> use a unique addr | ||||
ess for each | ||||
"m=" line with a non-zero port. Because CLUE implementations generally will | "m=" line with a non-zero port. Because CLUE implementations generally will | |||
not include CLUE-controlled media lines with the exception of the data | not include CLUE-controlled media lines, with the exception of the data | |||
channel in the initial SDP offer, CLUE devices that support large numbers of | channel in the initial SDP Offer, CLUE devices that support large numbers of | |||
streams can avoid ever having to open large numbers of ports if they | streams can avoid ever having to open large numbers of ports if they | |||
successfully negotiate BUNDLE. | successfully negotiate BUNDLE. | |||
</t> | </t> | |||
<t> | <t> | |||
An implementation that does include CLUE-controlled media lines in its initial | An implementation that does include CLUE-controlled media lines in its initial | |||
SDP offer while also using BUNDLE must take care to avoid renderings its | SDP Offer while also using BUNDLE must take care to avoid rendering its | |||
CLUE-controlled media lines unusable in the event the far end does not | CLUE-controlled media lines unusable in the event the far end does not | |||
negotiate BUNDLE if it wishes to avoid the risk of additional SDP exchanges to | negotiate BUNDLE if it wishes to avoid the risk of additional SDP exchanges to | |||
resolve this issue. This is best achieved by not sending any CLUE-controlled | resolve this issue. This is best achieved by not sending any CLUE-controlled | |||
media lines in an initial offer with the 'bundle-only' attribute unless it has | media lines in an initial offer with the 'bundle-only' attribute unless it has | |||
been established via some other channel that the recipient supports and is | been established via some other channel that the recipient supports and is | |||
able to use BUNDLE. | able to use BUNDLE. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Multiplexing of the data channel and RTP media"> | <section numbered="true" toc="default"> | |||
<t> | <name>Multiplexing of the Data Channel and RTP Media</name> | |||
BUNDLE-supporting CLUE-capable devices MAY include the data channel in the | <t> | |||
same BUNDLE group as RTP media. In this case the device MUST be able to | BUNDLE-supporting CLUE-capable devices <bcp14>MAY</bcp14> include the data chann | |||
demultiplex the various transports - see section 9.2 of the | el in the | |||
<xref target="I-D.ietf-mmusic-sdp-bundle-negotiation">BUNDLE draft</xref>. If | same BUNDLE group as RTP media. In this case, the device <bcp14>MUST</bcp14> be | |||
the BUNDLE group includes other protocols than the data channel transported | able to | |||
via DTLS the device MUST also be able to differentiate the various protocols. | demultiplex the various transports -- see Section <xref target="RFC8843" section | |||
</t> | ="9.2" sectionFormat="bare"/> of the BUNDLE specification <xref target="RFC8843" | |||
</section> | />. If | |||
the BUNDLE group includes protocols other than the data channel transported | ||||
via DTLS, the device <bcp14>MUST</bcp14> also be able to differentiate the vario | ||||
us protocols. | ||||
</t> | ||||
</section> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section title="Example: A call between two CLUE-capable Endpoints" anchor="s | <section anchor="sec-clueexample" numbered="true" toc="default"> | |||
ec-clueexample"> | <name>Example: A Call between Two CLUE-Capable Endpoints</name> | |||
<t> | <t> | |||
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 screens. | Alice, initiating the call, is a system with three cameras and three screens. | |||
Bob, receiving the call, is a system with two cameras and two screens. | Bob, receiving the call, is a system with two cameras and two screens. | |||
A call-flow diagram is presented, followed by a summary of each message. | A call-flow diagram is presented, followed by a summary of each message. | |||
</t> | </t> | |||
<t> | <t keepWithPrevious="true"> | |||
To manage the size of this section the SDP snippets only illustrate video "m=" | To manage the size of this section, the SDP snippets only illustrate video "m=" | |||
lines. SIP ACKs are not always discussed. Note that BUNDLE is not in use. | lines. SIP ACKs are not always discussed. Note that BUNDLE is not in use. | |||
</t> | </t> | |||
<t> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
<vspace blankLines="100" /> | ||||
<figure> | ||||
<artwork> | ||||
<![CDATA[ | ||||
+----------+ +-----------+ | +----------+ +-----------+ | |||
| Alice | | Bob | | | Alice | | Bob | | |||
| | | | | | | | | | |||
+----+-----+ +-----+-----+ | +----+-----+ +-----+-----+ | |||
| | | | | | |||
| | | | | | |||
| SIP INVITE 1 | | | SIP INVITE 1 | | |||
|--------------------------------->| | |--------------------------------->| | |||
| | | | | | |||
| | | | | | |||
skipping to change at line 879 ¶ | skipping to change at line 891 ¶ | |||
|<---------------------------------| | |<---------------------------------| | |||
| | | | | | |||
| | | | | | |||
| | | | | | |||
|<########### MEDIA 3 ############>| | |<########### MEDIA 3 ############>| | |||
| 2 video A->B, 2 video B->A | | | 2 video A->B, 2 video B->A | | |||
|<################################>| | |<################################>| | |||
| | | | | | |||
| | | | | | |||
| | | | | | |||
v v | v v ]]></artwork> | |||
]]> | ||||
</artwork> | ||||
</figure> | ||||
</t> | ||||
<t> | <t> | |||
In SIP INVITE 1, Alice sends Bob a SIP INVITE including in the SDP body the | In SIP INVITE 1, Alice sends Bob a SIP INVITE with the | |||
basic audio and video capabilities and the data channel as per | basic audio and video capabilities and data channel included in the SIP body as | |||
<xref target="I-D.ietf-mmusic-sctp-sdp"/>. Alice also includes the "sip.clue" | per | |||
<xref target="RFC8841" format="default"/>. Alice also includes the "sip.clue" | ||||
media feature tag in the INVITE. A snippet of the SDP showing the grouping | media feature tag in the INVITE. A snippet of the SDP showing the grouping | |||
attribute and the video "m=" line are shown below. Alice has included a "CLUE" | attribute and the video "m=" line are shown below. Alice has included a "CLUE" | |||
group, and included the mid corresponding to a data channel in the group (3). | group and the mid corresponding to a data channel in the group (3). | |||
Note that Alice has chosen not to include any CLUE-controlled media in the | Note that Alice has chosen not to include any CLUE-controlled media in the | |||
initial offer - the mid value of the video line is not included in the "CLUE" | initial offer -- the "mid" value of the video line is not included in the "CLUE" | |||
group. | group. | |||
<figure> | </t> | |||
<artwork> | <sourcecode type="sdp"><![CDATA[ ... | |||
<![CDATA[ | ||||
... | ||||
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 ]]></sourcecode> | |||
]]> | ||||
</artwork> | ||||
</figure> | ||||
</t> | ||||
<t> | <t> | |||
Bob responds with a similar SDP in SIP 200 OK 1, which also has a "CLUE" group | 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 similarity no SDP | including the "mid" value of a data channel; due to their similarity, no SDP | |||
snippet is shown here. Bob wishes to receive initial media, and so includes | snippet is shown here. Bob wishes to receive initial media and thus includes | |||
corresponding non-CLUE-controlled audio and video lines. Bob also includes the | corresponding non-CLUE-controlled audio and video lines. Bob also includes the | |||
"sip.clue" media feature tag in the 200 OK. Alice and Bob are each now able to | "sip.clue" media feature tag in the 200 OK. Alice and Bob are each now able to | |||
send a single audio and video stream. This is illustrated as MEDIA 1. | send a single audio and video stream. This is illustrated as MEDIA 1. | |||
</t> | </t> | |||
<t> | <t> | |||
With the successful initial SDP Offer/Answer exchange complete Alice and Bob | With the successful initial SDP Offer/Answer exchange complete, Alice and Bob | |||
are also free to negotiate the CLUE data channel. This is illustrated as CLUE | are also free to negotiate the CLUE data channel. This is illustrated as CLUE | |||
DATA CHANNEL ESTABLISHED. | DATA CHANNEL ESTABLISHED. | |||
</t> | </t> | |||
<t> | <t> | |||
Once the data channel is established CLUE protocol negotiation begins. In this | Once the data channel is established, CLUE protocol negotiation begins. In this | |||
case Bob was the DTLS client (sending a=active in his SDP answer) and hence is | case, Bob was the DTLS client (sending "a=active" in his SDP Answer) and hence i | |||
the CLUE Channel Initiator and sends a CLUE OPTIONS message describing his | s | |||
version support. On receiving that message Alice sends her corresponding CLUE | the CLUE Channel Initiator. He sends a CLUE OPTIONS message describing his | |||
version support. On receiving that message, Alice sends her corresponding CLUE | ||||
OPTIONS RESPONSE. | OPTIONS RESPONSE. | |||
</t> | </t> | |||
<t> | <t> | |||
With the OPTIONS phase complete Alice now sends her CLUE 'advertisement' | With the OPTIONS phase complete, Alice now sends her CLUE 'advertisement' | |||
message (CLUE ADVERTISEMENT 1). She advertises three static Captures | message (CLUE ADVERTISEMENT 1). She advertises three static Captures | |||
representing her three cameras. She also includes switched Captures suitable | representing her three cameras. She also includes switched Captures suitable | |||
for two- and one-screen systems. All of these Captures are in a single Capture | for systems with one or two screens. All of these Captures are in a single Captu | |||
Scene, with suitable Capture Scene Views to tell Bob that he should either | re | |||
subscribe to the three static Captures, the two switched Captures or the one | Scene, with suitable Capture Scene Views that tell Bob he should | |||
switched Capture. Alice has no simultaneity constraints, so includes all six | subscribe to the three static Captures, the two switched Captures, or the one | |||
Captures in one simultaneous set. Finally, Alice includes an Encoding Group | switched Capture. Alice has no simultaneity constraints, so all six | |||
with three Encoding IDs: "enc1", "enc2" and "enc3". These Encoding IDs aren't | Captures are included in one simultaneous set. Finally, Alice includes an Encodi | |||
currently valid, but will match the next SDP offer she sends. | ng Group | |||
with three Encoding IDs: "enc1", "enc2", and "enc3". These Encoding IDs aren't | ||||
currently valid but will match the next SDP Offer she sends. | ||||
</t> | </t> | |||
<t> | <t> | |||
Bob received CLUE ADVERTISEMENT 1 but does not yet send a 'configure' message, | Bob received CLUE ADVERTISEMENT 1 but does not yet send a 'configure' message, | |||
because he has not yet received Alice's Encoding information, so as yet he | because he has not yet received Alice's Encoding information; thus, he | |||
does not know if she will have sufficient resources to send him the two | does not know if she will have sufficient resources in order to send him the two | |||
streams he ideally wants at a quality he is happy with. Because Bob is not | streams he ideally wants at a quality he is happy with. Because Bob is not | |||
sending an immediate 'configure' message with the "ack" element set he must | sending an immediate 'configure' message with the "ack" element set, he must | |||
send an explicit 'ack' message (CLUE ACK 1) to signal receipt of CLUE | send an explicit 'ack' message (CLUE ACK 1) to signal receipt of CLUE | |||
ADVERTISEMENT 1. | ADVERTISEMENT 1. | |||
</t> | </t> | |||
<t> | <t> | |||
Bob also sends his CLUE 'advertisement' message (CLUE ADVERTISEMENT 2) - | Bob also sends his CLUE 'advertisement' message (CLUE ADVERTISEMENT 2) -- | |||
though the diagram shows that this occurs after Alice sends CLUE ADVERTISEMENT | though the diagram shows that this occurs after Alice sends CLUE ADVERTISEMENT | |||
1 Bob sends his 'advertisement' message independently and does not wait for | 1, Bob sends his 'advertisement' message independently and does not wait for | |||
CLUE ADVERTISEMENT 1 to arrive. He advertises two static Captures representing | CLUE ADVERTISEMENT 1 to arrive. He advertises two static Captures representing | |||
his cameras. He also includes a single composed Capture for single-screen | his cameras. He also includes a single composed Capture for single-screen | |||
systems, in which he will composite the two camera views into a single video | systems, in which he will composite the two camera views into a single video | |||
stream. All three Captures are in a single Capture Scene, with suitable | stream. All three Captures are in a single Capture Scene, with suitable | |||
Capture Scene Views to tell Alice that she should either subscribe to the two | Capture Scene Views that tell Alice she should subscribe to either the two | |||
static Captures, or the single composed Capture. Bob also has no simultaneity | static Captures or the single composed Capture. Bob also has no simultaneity | |||
constraints, so includes all three Captures in one simultaneous set. Bob also | constraints, so he includes all three Captures in one simultaneous set. Bob also | |||
includes a single Encoding Group with two Encoding IDs: "foo" and "bar". | includes a single Encoding Group with two Encoding IDs: "foo" and "bar". | |||
</t> | </t> | |||
<t> | <t> | |||
Similarly, Alice receives CLUE ADVERTISEMENT 2 but does not yet send a | Similarly, Alice receives CLUE ADVERTISEMENT 2 but does not yet send a | |||
'configure' message, because she has not yet received Bob's Encoding | 'configure' message, because she has not yet received Bob's Encoding | |||
information, sending instead an 'ack' message (CLUE ACK 2). | information; instead, she sends an 'ack' message (CLUE ACK 2). | |||
</t> | </t> | |||
<t> | <t> | |||
Both sides have now sent their CLUE 'advertisement' messages and an SDP | Both sides have now sent their CLUE 'advertisement' messages, and an SDP | |||
exchange is required to negotiate Encodings. For simplicity, in this case | exchange is required to negotiate Encodings. For simplicity, in this case, | |||
Alice is shown sending an INVITE with a new offer; in many implementations | Alice is shown sending an INVITE with a new offer; in many implementations, | |||
both sides might send an INVITE, which would be resolved by use of the 491 | both sides might send an INVITE, which would be resolved by use of the 491 | |||
Request Pending resolution mechanism from <xref target="RFC3261"/>. | Request Pending resolution mechanism from <xref target="RFC3261" format="default "/>. | |||
</t> | </t> | |||
<t> | <t> | |||
Alice now sends SIP INVITE 2. She maintains the sendrecv audio, video and CLUE | Alice now sends SIP INVITE 2. She maintains the sendrecv audio, video, and CLUE | |||
"m=" lines, and she adds three new sendonly "m=" lines to represent the three | "m=" lines, and she adds three new sendonly "m=" lines to represent the three | |||
CLUE-controlled Encodings she can send. Each of these "m=" lines has a label | CLUE-controlled Encodings she can send. Each of these "m=" lines has a label | |||
corresponding to one of the Encoding IDs from CLUE ADVERTISEMENT 1. Each also | corresponding to one of the Encoding IDs from CLUE ADVERTISEMENT 1. Each also | |||
has its mid added to the grouping attribute to show they are controlled by the | has its mid added to the grouping attribute to show they are controlled by the | |||
CLUE data channel. A snippet of the SDP showing the grouping attribute, data | CLUE data channel. A snippet of the SDP showing the grouping attribute, data | |||
channel and the video "m=" lines are shown below: | channel, and video "m=" lines are shown below: | |||
<figure> | </t> | |||
<artwork> | <sourcecode type="sdp"><![CDATA[ ... | |||
<![CDATA[ | ||||
... | ||||
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 | |||
... | ... | |||
m=application 6100 UDP/DTLS/SCTP webrtc-datachannel | m=application 6100 UDP/DTLS/SCTP webrtc-datachannel | |||
a=sctp-port: 5000 | a=sctp-port: 5000 | |||
skipping to change at line 1023 ¶ | skipping to change at line 1023 ¶ | |||
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:5 | a=mid:5 | |||
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 ]]></sourcecode> | |||
]]> | ||||
</artwork> | ||||
</figure> | ||||
</t> | ||||
<t> | <t> | |||
Bob now has all the information he needs to decide which streams to configure, | Bob now has all the information he needs to decide which streams to configure, | |||
allowing him to send both a CLUE 'configure' message and his SDP answer. As | allowing him to send both a CLUE 'configure' message and his SDP Answer. As | |||
such he now sends CLUE CONFIGURE 1. This requests the pair of switched | such, he now sends CLUE CONFIGURE 1. This requests the pair of switched | |||
Captures that represent Alice's scene, and he configures them with encoder ids | Captures that represent Alice's scene, and he configures them with encoder ids | |||
"enc1" and "enc2". | "enc1" and "enc2". | |||
</t> | </t> | |||
<t> | <t> | |||
Bob also sends his SDP answer as part of SIP 200 OK 2. Alongside his original | 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 additional "m=" lines | audio, video, and CLUE "m=" lines, he includes three additional "m=" lines | |||
corresponding to the three added by Alice; two active recvonly "m= "lines and | corresponding to the three added by Alice: two active recvonly "m= "lines and | |||
an inactive "m=" line for the third. He adds their mid values to the grouping | an inactive "m=" line for the third. He adds their "mid" values to the grouping | |||
attribute to show they are controlled by the CLUE data channel. A snippet of | attribute to show they are controlled by the CLUE data channel. A snippet of | |||
the SDP showing the grouping attribute and the video "m=" lines are shown | the SDP showing the grouping attribute and the video "m=" lines are shown | |||
below (mid 100 represents the CLUE data channel, not shown): | below (mid 100 represents the CLUE data channel, which is not shown): | |||
<figure> | </t> | |||
<artwork> | <sourcecode type="sdp"><![CDATA[ ... | |||
<![CDATA[ | ||||
... | ||||
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 | |||
... | ... | |||
m=video 58724 RTP/AVP 96 | m=video 58724 RTP/AVP 96 | |||
a=rtpmap:96 H264/90000 | a=rtpmap:96 H264/90000 | |||
skipping to change at line 1069 ¶ | skipping to change at line 1063 ¶ | |||
a=mid:11 | a=mid:11 | |||
m=video 58726 RTP/AVP 96 | m=video 58726 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: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 ]]></sourcecode> | |||
]]> | ||||
</artwork> | ||||
</figure> | ||||
</t> | ||||
<t> | <t> | |||
Alice receives Bob's message CLUE CONFIGURE 1 and sends CLUE CONFIGURE | Alice receives Bob's CLUE CONFIGURE 1 message and sends CLUE CONFIGURE | |||
RESPONSE 1 to ack its reception. She does not yet send the Capture Encodings | RESPONSE 1 to acknowledge its reception. She does not yet send the Capture Encod | |||
specified, because at this stage she hasn't processed Bob's answer SDP and so | ings | |||
specified, because at this stage, she hasn't processed Bob's answer SDP and thus | ||||
hasn't negotiated the ability for Bob to receive these streams. | hasn't negotiated the ability for Bob to receive these streams. | |||
</t> | </t> | |||
<t> | <t> | |||
On receiving SIP 200 OK 2 from Bob Alice sends her SIP ACK (SIP ACK 2). She is | 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 - this is illustrated | now able to send the two streams of video Bob requested -- this is illustrated | |||
as MEDIA 2. | as MEDIA 2. | |||
</t> | </t> | |||
<t> | <t> | |||
The constraints of offer/answer meant that Bob could not include his encoding | 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 now sends SIP | 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 streams from SIP 200 OK 2 | INVITE 3 to generate a new offer. Along with all the streams from SIP 200 OK 2, | |||
Bob also includes two new sendonly streams. Each stream has a label | Bob also includes two new sendonly streams. Each stream has a label | |||
corresponding to the Encoding IDs in his CLUE ADVERTISEMENT 2 message. He also | corresponding to the Encoding IDs in his CLUE ADVERTISEMENT 2 message. He also | |||
adds their mid values to the grouping attribute to show they are controlled by | adds their "mid" values to the grouping attribute to show they are controlled by | |||
the CLUE data channel. A snippet of the SDP showing the grouping attribute and | the CLUE data channel. A snippet of the SDP showing the grouping attribute and | |||
the video "m=" lines are shown below (mid 100 represents the CLUE data | the video "m=" lines are shown below (mid 100 represents the CLUE data | |||
channel, not shown): | channel, which is not shown): | |||
<figure> | </t> | |||
<artwork> | <sourcecode type="sdp"><![CDATA[ ... | |||
<![CDATA[ | ||||
... | ||||
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 | |||
... | ... | |||
m=video 58724 RTP/AVP 96 | m=video 58724 RTP/AVP 96 | |||
a=rtpmap:96 H264/90000 | a=rtpmap:96 H264/90000 | |||
skipping to change at line 1130 ¶ | skipping to change at line 1118 ¶ | |||
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: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 ]]></sourcecode> | |||
]]> | ||||
</artwork> | ||||
</figure> | ||||
</t> | ||||
<t> | <t> | |||
Having received this, Alice now has all the information she needs to send | Having received this, Alice now has all the information she needs to send | |||
her CLUE 'configure' message and her SDP answer. In CLUE CONFIGURE 2 she | her CLUE 'configure' message and her SDP Answer. In CLUE CONFIGURE 2, she | |||
requests the two static Captures from Bob, to be sent on Encodings "foo" and | requests the two static Captures from Bob to be sent on Encodings "foo" and | |||
"bar". | "bar". | |||
</t> | </t> | |||
<t> | <t> | |||
Alice also sends SIP 200 OK 3, matching two recvonly "m=" lines to Bob's new | 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 grouping attribute to | sendonly lines. She includes their "mid" values in the grouping attribute to | |||
show they are controlled by the CLUE cdata hannel. Alice also now deactivates | show they are controlled by the CLUE data channel. Alice then deactivates | |||
the initial non-CLUE-controlled media, as bidirectional CLUE-controlled media | the initial non-CLUE-controlled media, as bidirectional CLUE-controlled media | |||
is now available. A snippet of the SDP showing the grouping attribute and the | is now available. A snippet of the SDP showing the grouping attribute and the | |||
video "m=" lines are shown below (mid 3 represents the data channel, not | video "m=" lines are shown below (mid 3 represents the data channel, not | |||
shown): | shown): | |||
<figure> | </t> | |||
<artwork> | <sourcecode type="sdp"><![CDATA[ ... | |||
<![CDATA[ | ||||
... | ||||
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 | |||
... | ... | |||
m=video 6004 RTP/AVP 96 | m=video 6004 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:4 | a=mid:4 | |||
skipping to change at line 1181 ¶ | skipping to change at line 1163 ¶ | |||
a=mid:6 | a=mid:6 | |||
m=video 6010 RTP/AVP 96 | m=video 6010 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: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 ]]></sourcecode> | |||
]]> | ||||
</artwork> | ||||
</figure> | ||||
</t> | ||||
<t> | <t> | |||
Bob receives Alice's message CLUE CONFIGURE 2 and sends CLUE CONFIGURE | Bob receives Alice's CLUE CONFIGURE 2 message and sends CLUE CONFIGURE | |||
RESPONSE 2 to ack its reception. Bob does not yet send the Capture Encodings | RESPONSE 2 to acknowledge its reception. Bob does not yet send the Capture Encod | |||
specified, because he hasn't yet received and processed Alice's SDP answer | ings | |||
specified, because he hasn't yet received and processed Alice's SDP Answer | ||||
and negotiated the ability to send these streams. | and negotiated the ability to send these streams. | |||
</t> | </t> | |||
<t> | <t> | |||
Finally, on receiving SIP 200 OK 3 Bob is now able to send the two streams of | 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. | video Alice requested -- this is illustrated as MEDIA 3. | |||
</t> | </t> | |||
<t> | <t> | |||
Both sides of the call are now sending multiple video streams with their | Both sides of the call are now sending multiple video streams with their | |||
sources defined via CLUE negotiation. As the call progresses either side can | sources defined via CLUE negotiation. As the call progresses, either side can | |||
send new 'advertisement' or 'configure' message or new SDP offer/answers to | send a new 'advertisement' or 'configure' message or the new SDP Offers/Answers | |||
add, remove or change what they have available or want to receive. | to | |||
add, remove, or change what they have available or want to receive. | ||||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec-nonclueexample" numbered="true" toc="default"> | ||||
<section title="Example: A call between a CLUE-capable and non-CLUE Endpoint" | <name>Example: A Call between a CLUE-Capable and Non-CLUE Endpoint</name> | |||
anchor="sec-nonclueexample"> | ||||
<t> | <t> | |||
In this brief example Alice is a CLUE-capable Endpoint making a call to Bob, | 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 protocol). | who is not CLUE capable (i.e., is not able to use the CLUE protocol). | |||
</t> | </t> | |||
<figure> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
<artwork> | ||||
<![CDATA[ | ||||
+----------+ +-----------+ | +----------+ +-----------+ | |||
| Alice | | Bob | | | Alice | | Bob | | |||
| | | | | | | | | | |||
+----+-----+ +-----+-----+ | +----+-----+ +-----+-----+ | |||
| | | | | | |||
| | | | | | |||
| SIP INVITE 1 | | | SIP INVITE 1 | | |||
|--------------------------------->| | |--------------------------------->| | |||
| | | | | | |||
| | | | | | |||
skipping to change at line 1239 ¶ | skipping to change at line 1214 ¶ | |||
| | | | | | |||
| | | | | | |||
| | | | | | |||
|<########### MEDIA 1 ############>| | |<########### MEDIA 1 ############>| | |||
| 1 video A->B, 1 video B->A | | | 1 video A->B, 1 video B->A | | |||
|<################################>| | |<################################>| | |||
| | | | | | |||
| | | | | | |||
| | | | | | |||
| | | | | | |||
v v | v v ]]></artwork> | |||
]]> | ||||
</artwork> | ||||
</figure> | ||||
<t> | <t> | |||
In SIP INVITE 1, Alice sends Bob a SIP INVITE including in the SDP body the | In SIP INVITE 1, Alice sends Bob a SIP INVITE including the | |||
basic audio and video capabilities and the data channel as per | basic audio and video capabilities and data channel in the SDP body as per | |||
<xref target="I-D.ietf-mmusic-sctp-sdp"/>. Alice also includes the "sip.clue" | <xref target="RFC8841" format="default"/>. Alice also includes the "sip.clue" | |||
media feature tag in the INVITE. A snippet of the SDP showing the grouping | media feature tag in the INVITE. A snippet of the SDP showing the grouping | |||
attribute and the video "m=" line are shown below. Alice has included a "CLUE" | attribute and the video "m=" line are shown below. Alice has included a "CLUE" | |||
group, and included the mid corresponding to a data channel in the group (3). | group and the mid corresponding to a data channel in the group (3). | |||
Note that Alice has chosen not to include any CLUE-controlled media in the | Note that Alice has chosen not to include any CLUE-controlled media in the | |||
initial offer - the mid value of the video line is not included in the "CLUE" | initial offer -- the "mid" value of the video line is not included in the "CLUE" | |||
group. | group. | |||
<figure> | </t> | |||
<artwork> | <sourcecode type="sdp"><![CDATA[ ... | |||
<![CDATA[ | ||||
... | ||||
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 ]]></sourcecode> | |||
]]> | ||||
</artwork> | ||||
</figure> | ||||
</t> | ||||
<t> | <t> | |||
Bob is not CLUE-capable, and hence does not recognize the "CLUE" semantic for | Bob is not CLUE capable and hence does not recognize the "CLUE" semantic for | |||
grouping attribute, nor does he support the data channel. IN SIP 200 OK 1 he | the grouping attribute, nor does he support the data channel. IN SIP 200 OK 1, h | |||
responds with an answer with audio and video, but with the data channel | e | |||
responds with an answer that includes audio and video, but with the data channel | ||||
zeroed. | zeroed. | |||
</t> | </t> | |||
<t> | <t> | |||
From the lack of a CLUE group Alice understands that Bob does not support | 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 send a single | 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 point begins to send her | audio and video stream to each other. At this point, Alice begins to send her | |||
fallback video: in this case likely a switched view from whichever camera | fallback video: in this case, it's likely a switched view from whichever camera | |||
shows the current loudest participant on her side. | shows the current loudest participant on her side. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Acknowledgements"> | ||||
<t> | ||||
Besides the authors, the team focusing on this draft consists of: | ||||
Roni Even, | ||||
Simon Pietro-Romano, | ||||
Roberta Presta. | ||||
</t> | ||||
<t> | ||||
Christian Groves, Jonathan Lennox and Adam Roach have contributed detailed | ||||
comments and suggestions. | ||||
</t> | ||||
</section> | ||||
<section title="IANA Considerations"> | <section numbered="true" toc="default"> | |||
<section title="New SDP Grouping Framework Attribute"> | <name>IANA Considerations</name> | |||
<t> | <section numbered="true" toc="default"> | |||
<name>New SDP Grouping Framework Attribute</name> | ||||
<t> | ||||
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 | |||
<xref target="RFC5888"/>: | <xref target="RFC5888" format="default"/>: | |||
</t> | </t> | |||
<figure> | ||||
<artwork> | <table anchor="IANA_table_1" align="left"> | |||
<![CDATA[ | <thead> | |||
Semantics Token Reference | <tr> | |||
CLUE-controlled m-line CLUE [this draft] | <th align='center'>Semantics</th> | |||
]]> | <th align='center'>Token</th> | |||
</artwork> | <th align='center'>Mux Category</th> | |||
</figure> | <th align='center'>Reference</th> | |||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="center">CLUE-controlled "m=" line</td> | ||||
<td align="left">CLUE</td> | ||||
<td align="left">NORMAL</td> | ||||
<td align="left">RFC 8848</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | </section> | |||
<section title="New SIP Media Feature Tag"> | <section numbered="true" toc="default"> | |||
<t> | <name>New SIP Media Feature Tag</name> | |||
This specification registers a new media feature tag in the | <t> | |||
<xref target="RFC3261">SIP</xref> tree per the procedures defined in | This specification registers a new media feature tag in the SIP | |||
<xref target="RFC2506"/> and <xref target="RFC3840"/>. | <xref target="RFC3261" format="default"/> tree per the procedures defined in | |||
</t> | <xref target="RFC2506" format="default"/> and <xref target="RFC3840" format="def | |||
<t> | ault"/>. | |||
Media feature tag name: sip.clue | </t> | |||
</t> | <dl newline="false" spacing="normal"> | |||
<t> | <dt>Media feature tag name:</dt><dd>sip.clue</dd> | |||
ASN.1 Identifier: [to be assigned] | ||||
</t> | <dt>ASN.1 Identifier:</dt><dd>30</dd> | |||
<t> | ||||
Summary of the media feature indicated by this tag: This feature tag indicates | <dt>Summary of the media feature indicated by this tag:</dt><dd>This feature tag | |||
that the device supports CLUE-controlled media. | indicates | |||
</t> | that the device supports CLUE-controlled media.</dd> | |||
<t> | ||||
Values appropriate for use with this feature tag: Boolean. | <dt>Values appropriate for use with this feature tag:</dt><dd>Boolean.</dd> | |||
</t> | ||||
<t> | <dt>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:</dt> | |||
applications, protocols, services, or negotiation mechanisms: | <dd><t><br/>This feature tag is most useful in a communications application for | |||
</t> | describing the capabilities of a device to use the CLUE control protocol to nego | |||
<t> | tiate the use of multiple media streams.</t></dd> | |||
This feature tag is most useful in a communications application for | ||||
describing the capabilities of a device to use the CLUE control protocol to | <dt>Related standards or documents:</dt><dd>RFC 8848</dd> | |||
negotiate the use of multiple media streams. | ||||
</t> | <dt>Security Considerations:</dt><dd>Security considerations for this media | |||
<t> | feature tag are discussed in <xref target="sec.security" format="default"/> of | |||
Related standards or documents: [this draft] | RFC 8848.</dd> | |||
</t> | ||||
<t> | <dt>Name(s) & email address(es) of person(s) to contact for further | |||
Security Considerations: Security considerations for this media | information:</dt><dd>Internet Engineering Steering Group <iesg@ietf.org></ | |||
feature tag are discussed in <xref target="sec.security" /> of | dd> | |||
[this draft]. | ||||
</t> | <dt>Intended usage:</dt><dd>COMMON</dd> | |||
<t> | </dl> | |||
Name(s) & email address(es) of person(s) to contact for further | ||||
information: | ||||
</t> | ||||
<t><list style='symbols'> | ||||
<t> | ||||
Internet Engineering Steering Group: iesg@ietf.org | ||||
</t> | ||||
</list></t> | ||||
<t> | ||||
Intended usage: COMMON | ||||
</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section title="Security Considerations" anchor="sec.security"> | <section anchor="sec.security" numbered="true" toc="default"> | |||
<name>Security Considerations</name> | ||||
<t> | <t> | |||
CLUE makes use of a number of protocols and mechanisms, either defined by CLUE | CLUE makes use of a number of protocols and mechanisms, either defined by CLUE | |||
or long-standing. The security considerations section of the | or long-standing. The Security Considerations section of the | |||
<xref target="I-D.ietf-clue-framework">CLUE Framework</xref> addresses the | CLUE Framework document <xref target="RFC8845" format="default"/> addresses the | |||
need to secure these mechanisms by following the recommendations of the | need to secure these mechanisms by following the recommendations of the | |||
individual protocols. | individual protocols. | |||
</t> | </t> | |||
<t> | <t> | |||
Beyond the need to secure the constituent protocols, the use of CLUE does | Beyond the need to secure the constituent protocols, the use of CLUE does | |||
impose additional security concerns. One area of increased risk involves the | impose additional security concerns. One area of increased risk involves the | |||
potential for a malicious party to subvert a CLUE-capable device to attack a | potential for a malicious party to subvert a CLUE-capable device to attack a | |||
third party by driving large volumes of media (particularly video) traffic at | third party by driving large volumes of media (particularly video) traffic at | |||
them by establishing a connection to the CLUE-capable device and directing the | them by establishing a connection to the CLUE-capable device and directing the | |||
media to the victim. While this is a risk for all media devices, a | media to the victim. While this is a risk for all media devices, a | |||
CLUE-capable device may allow the attacker to configure multiple media streams | CLUE-capable device may allow the attacker to configure multiple media streams | |||
to be sent, significantly increasing the volume of traffic directed at the | to be sent, significantly increasing the volume of traffic directed at the | |||
victim. | victim. | |||
</t> | </t> | |||
<t> | <t> | |||
This attack can be prevented by ensuring that the media recipient intends to | This attack can be prevented by ensuring that the media recipient intends to | |||
receive the media packets. As such all CLUE-capable devices MUST support key | receive the media packets. As such, all CLUE-capable devices <bcp14>MUST</bcp14> | |||
negotiation and receiver intent assurance via | support key | |||
<xref target="RFC5763">DTLS-SRTP</xref> on CLUE-controlled RTP "m=" lines, and | negotiation and receiver intent assurance via DTLS / Secure Real-time Transport | |||
MUST use it or some other mechanism that provides receiver intent assurance. | Protocol (SRTP) <xref target="RFC5763" format="default"/> on CLUE-controlled RTP | |||
"m=" lines, and they | ||||
<bcp14>MUST</bcp14> use it or some other mechanism that provides receiver intent | ||||
assurance. | ||||
All CLUE-controlled RTP "m" lines must be secured and implemented using | All CLUE-controlled RTP "m" lines must be secured and implemented using | |||
mechanisms such as <xref target="RFC3711">SRTP</xref>. CLUE implementations | mechanisms such as SRTP <xref target="RFC3711" format="default"/>. CLUE implemen | |||
MAY choose not to require the use of SRTP to secure legacy | tations | |||
<bcp14>MAY</bcp14> choose not to require the use of SRTP to secure legacy | ||||
(non-CLUE-controlled) media for backwards compatibility with older SIP clients | (non-CLUE-controlled) media for backwards compatibility with older SIP clients | |||
that are incapable of supporting it. | that are incapable of supporting it. | |||
</t> | </t> | |||
<t> | <t> | |||
CLUE also defines a new media feature tag that indicates CLUE support. This | CLUE also defines a new media feature tag that indicates CLUE support. This | |||
tag may be present even in non-CLUE calls, which increases the metadata | tag may be present even in non-CLUE calls, which increases the metadata | |||
available about the sending device, which can help an attacker differentiate | available about the sending device; this can help an attacker differentiate | |||
between multiple devices and help them identify otherwise anonymised users | between multiple devices and identify otherwise anonymized users | |||
via the fingerprint of features their device supports. To prevent this, SIP | via the fingerprint of features their device supports. To prevent this, SIP | |||
signaling used to set up CLUE sessions SHOULD always be encrypted using | signaling used to set up CLUE sessions <bcp14>SHOULD</bcp14> always be encrypted | |||
<xref target="RFC5630">TLS</xref>. | using | |||
TLS <xref target="RFC5630" format="default"/>. | ||||
</t> | </t> | |||
<t> | <t> | |||
The CLUE protocol also carries additional information that could be used to | The CLUE protocol also carries additional information that could be used to | |||
help fingerprint a particular user or to identify the specific version of | help fingerprint a particular user or to identify the specific version of | |||
software being used. | software being used. | |||
<xref target="I-D.ietf-clue-protocol">CLUE Framework</xref> provides details | The CLUE Framework <xref target="RFC8847" format="default"/> provides details | |||
of these issues and how to mitigate them. | about these issues and how to mitigate them. | |||
</t> | </t> | |||
</section> | </section> | |||
</middle> | ||||
<back> | ||||
<section title="Change History"> | <references> | |||
<t> | ||||
Note to RFC Editor: please remove this section prior to publication | ||||
</t> | ||||
<t><list style='hanging'> | ||||
<t hangText="-15:"> Revision by Rob Hanton | ||||
<list style='symbols'> | ||||
<t> | ||||
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 t | ||||
he SDP and CLUE message. In contrast, changed the use of 'EncID' in a CLUE CONFI | ||||
GURE 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. | ||||
</t> | ||||
<t> | ||||
Updated the description of handling the failure of the CLUE channel to reflect t | ||||
he 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 allowanc | ||||
e for the CLUE channel being recovered. | ||||
</t> | ||||
<t> | ||||
Updated all instances of advertisment, configure and ack messages throughout to | ||||
match the styling of the protocol document | ||||
</t> | ||||
<t> | ||||
Security section updated to make DTLs-SRTP mandatory to use as well as support u | ||||
nless intent assurance is provided by some other mechanism per mailing list prop | ||||
osal (to resolve the concern from a previous IETF session of those wanting to us | ||||
e CLUE in a closed environment where intent assurance was provided by other pror | ||||
ietary mechanisms). | ||||
</t> | ||||
<t> | ||||
Removed OID value for "sip.clue" media feature tag pending its actual assignment | ||||
on registration, leaving a placeholder | ||||
</t> | ||||
<t> | ||||
All lower-case uses of 'must', 'should' and 'may' reviewed and a few made normat | ||||
ive | ||||
</t> | ||||
<t> | ||||
Fixed various spelling mistakes, clarified grammar, and fixed a copy/paste error | ||||
. | ||||
</t> | ||||
<t> | ||||
Updated boilerplate to RFC 8174 | ||||
</t> | ||||
<t> | ||||
Some informative references moved to normative. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="-14:"> Revision by Rob Hanton | ||||
<list style='symbols'> | ||||
<t> | ||||
Reference to RFC5245 updated to RFC8445 | ||||
</t> | ||||
<t> | ||||
Updated my name to reflect surname change (Hansen to Hanton). | ||||
</t> | ||||
<t> | ||||
Reviewed recent changes to clue protocol document and concluded that none | ||||
affected this document | ||||
</t> | ||||
<t> | ||||
Added recommendation that the SDP O/A spec and clue protocol be read prior to | ||||
this document | ||||
</t> | ||||
<t> | ||||
Several acronyms expanded at the point of initial use | ||||
</t> | ||||
<t> | ||||
Some unnecessary normative language replaced with prose | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="-13:"> Revision by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
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 esta | ||||
blished | ||||
and unchanged until CLUE is disabled by either side via SDP exchange. | ||||
</t> | ||||
<t> | ||||
Example in section on efficient operation with non-atomic transactions has had a | ||||
ll | ||||
normative language removed and is now entirely descriptive (normative language r | ||||
etained | ||||
in the non-example portion). | ||||
</t> | ||||
<t> | ||||
draft-ietf-clue-protocol-14 reviewed for relevant changes, and use of CLUE ACK a | ||||
nd | ||||
RESPONSE messages made consistent with that document (ADVERTISEMENT ACKNOWLEDGEM | ||||
ENT and | ||||
CONFIGURE RESPONSE respectively). | ||||
</t> | ||||
<t> | ||||
Order of authors revised to reflect updates since Jan 2014. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="-12:"> Revision by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
Title change to expand and elucidate our totally-not-contrived acronym | ||||
</t> | ||||
<t> | ||||
Explicit reference to RFC3840 added when first mentioning media feature tags | ||||
</t> | ||||
<t> | ||||
Have standardised references to Clue protocol messages to ADVERTISEMENT, CONFIGU | ||||
RE and ACK, in line with section 12.4.1. of the protocol document (though the pr | ||||
otocol document also uses ADV and CONF). | ||||
</t> | ||||
<t> | ||||
'MUST' in opening paragraph of 4.2 changed from normative 'MUST' to logical 'mus | ||||
t' | ||||
</t> | ||||
<t> | ||||
Per his request, removed Cristian's company affiliation and changed his email ad | ||||
dress | ||||
</t> | ||||
<t> | ||||
Clarified that an implementation that chooses not to send media during the initi | ||||
al negotiation process must still send RTCP as normal | ||||
</t> | ||||
<t> | ||||
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, recomm | ||||
ended they are deactivated by zeroing the port when turning them off after clue | ||||
is successfully negotiated. | ||||
</t> | ||||
<t> | ||||
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 BUN | ||||
DLE | ||||
</t> | ||||
<t> | ||||
Added section saying that CLUE devices that do BUNDLE SHOULD do rtcp-mux, but th | ||||
at the requirement doesn't exist in the other direction (eg, supporting rtcp-mux | ||||
does not require or imply the need to implement BUNDLE) | ||||
</t> | ||||
<t> | ||||
For clue-controlled m-lines where the sender included more encodings than the re | ||||
cipient wants, have standardised on using "a=inactive" to not receive RTP on the | ||||
m (previously had a mix of "a=inactive" or port 0, or in some cases did not spec | ||||
ify). | ||||
</t> | ||||
<t> | ||||
Page break added before the big ladder diagram in the example | ||||
</t> | ||||
<t> | ||||
Have added a direction attribute to the SDP example in the data channel, and mad | ||||
e explicit that Bob is the DTLS client and hence the CLUE Channel Initiator. | ||||
</t> | ||||
<t> | ||||
Have removed all language that referenced the possibility of having multiple CLU | ||||
E groups | ||||
</t> | ||||
<t> | ||||
Removed names appearing in the authors list from the acknowledgements | ||||
</t> | ||||
<t> | ||||
Changed the contact for the IANA registration to iesg@ietf.org | ||||
</t> | ||||
<t> | ||||
Security section updated to clarify that DTLS-SRTP must be supported (as opposed | ||||
to DTLS) and removed the reference to RFC7202. | ||||
</t> | ||||
<t> | ||||
Other syntactic tweaks based on Paul and Adam's feedback | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="-11:"> Revision by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
Some informative references added for SIP and SDP. | ||||
</t> | ||||
<t> | ||||
'a=mid' lines added to example m-lines with port 0, per RFC5888 section 6. | ||||
</t> | ||||
<t> | ||||
Instace of 'must' changed to normative 'MUST', along with various minor | ||||
clarifications and corrections. | ||||
</t> | ||||
<t> | ||||
Abstract made standalone without citations, per RFC7322 section 4.3. | ||||
</t> | ||||
<t> | ||||
RFC editor note added to remove this section. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="-10:"> Revision by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
Changes to draft-ietf-clue-protocol between 07 and 11 reviewed to ensure | ||||
compatibility between documents has been maintained. | ||||
</t> | ||||
<t> | ||||
Expanded the portion of the document related to fingerprinting with info on | ||||
the CLUE channel as well as SIP. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="-09:"> Revision by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
A few minor spelling tweaks | ||||
</t> | ||||
<t> | ||||
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. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="-08:"> Revision by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
Spelling and grammar fixes from Paul and Christian gratefully adopted | ||||
</t> | ||||
<t> | ||||
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. | ||||
</t> | ||||
<t> | ||||
Made a number of fixes to the example call flow to better reflect the | ||||
recommendations in the document. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="-07:"> Revision by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
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. | ||||
</t> | ||||
<t> | ||||
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. | ||||
</t> | ||||
<t> | ||||
Added OPTIONS negotiation to the example flow, and revised the flow to ensure | ||||
it matched protocol document. | ||||
</t> | ||||
<t> | ||||
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. | ||||
</t> | ||||
<t> | ||||
Make explicit that m=recvonly lines don't need to have a label, as only | ||||
m=sendonly lines are referenced by CLUE protocol messages. | ||||
</t> | ||||
<t> | ||||
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'. | ||||
</t> | ||||
<t> | ||||
General corrections to grammar, spelling and readability based on Christian, | ||||
Paul and Mark; in many cases suggested text was gratefully accepted. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="-06:"> Revision by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
State machine interactions updated to match versions in -04 of protocol doc. | ||||
</t> | ||||
<t> | ||||
Section on encoding updated to specify both encID and encodingID from data | ||||
model doc. | ||||
</t> | ||||
<t> | ||||
Removed the limitations on describing H264 encoding limits using SDP syntax | ||||
as an open issue. | ||||
</t> | ||||
<t> | ||||
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. | ||||
</t> | ||||
<t> | ||||
Terminology reference to framework doc reinforced. All terminology that | ||||
duplicates framework removed. All text updated with capitalisation that | ||||
matches framework document's terminology. | ||||
</t> | ||||
<t> | ||||
SDP example syntax updated to match that of ietf-clue-datachannel | ||||
and hence ietf-mmusic-data-channel-sdpneg. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="-05:"> Revision by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
SRTP/DTLS made mandatory for CLUE-controlled media lines. | ||||
</t> | ||||
<t> | ||||
IANA consideration section added (text as proposed by Christian Groves). | ||||
</t> | ||||
<t> | ||||
Includes provision for dependent streams on seperate "m" lines having the same | ||||
encID as their parent "m" line. | ||||
</t> | ||||
<t> | ||||
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. | ||||
</t> | ||||
<t> | ||||
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. | ||||
</t> | ||||
<t> | ||||
Other minor syntax improvements. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="-04:"> Revision by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
Updated DTLS/SCTP channel syntax in examples to fix errors and match latest | ||||
format defined in draft-ietf-mmusic-sctp-sdp-07. | ||||
</t> | ||||
<t> | ||||
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. | ||||
</t> | ||||
<t> | ||||
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. | ||||
</t> | ||||
<t> | ||||
Added reminder on IANA section on registering grouping semantic and media | ||||
feature tag, removed the less formal sections that did the same job. | ||||
</t> | ||||
<t> | ||||
Fixed and clarified issues raised by Christian's document review. | ||||
</t> | ||||
<t> | ||||
Added a number of security considerations. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="-03:"> Revision by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
Clarified text on not rejecting messages because they contain unknown encIDs. | ||||
</t> | ||||
<t> | ||||
Removed normative language in section on accepting/rejecting | ||||
non-CLUE-controlled media in the initial answer. | ||||
</t> | ||||
<t> | ||||
Example SDP updated to include the data channel "m" lines. | ||||
</t> | ||||
<t> | ||||
Example call flow updated to show disablement of non-CLUE-controlled media | ||||
once CLUE-controlled media is flowing. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="-02:"> Revision by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
Added section on not accepting non-CLUE-controlled "m" lines in the initial | ||||
answer when CLUE is to be negotiated. | ||||
</t> | ||||
<t> | ||||
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'. | ||||
</t> | ||||
<t> | ||||
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>.) | ||||
</t> | ||||
<t> | ||||
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). | ||||
</t> | ||||
<t> | ||||
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. | ||||
</t> | ||||
<t> | ||||
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. | ||||
</t> | ||||
<t> | ||||
Cleaned up some 'todo' text. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="-01:"> Revision by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
Revised terminology - removed the term 'CLUE-enabled' device as insufficiently | ||||
distinct from 'CLUE-capable' and instead added a term for 'CLUE-enabled' | ||||
calls. | ||||
</t> | ||||
<t> | ||||
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. | ||||
</t> | ||||
<t> | ||||
Changed 'sip.telepresence' to 'sip.clue' and 'TELEPRESENCE' grouping semantic | ||||
back to CLUE. | ||||
</t> | ||||
<t> | ||||
Made it mandatory to have exactly one mid corresponding to a data channel in a | ||||
CLUE group | ||||
</t> | ||||
<t> | ||||
Forbade having multiple CLUE groups unless a specification for doing so is | ||||
published. | ||||
</t> | ||||
<t> | ||||
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. | ||||
</t> | ||||
<t> | ||||
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. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="-00:"> Revision by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
Submitted as -00 working group document | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="draft-kyzivat-08:"> Revisions by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
Added media feature tag for CLUE support ('sip.telepresence') | ||||
</t> | ||||
<t> | ||||
Changed grouping semantic from 'CLUE' to 'TELEPRESENCE' | ||||
</t> | ||||
<t> | ||||
Restructured document to be more centred on the grouping semantic and its use | ||||
with O/A | ||||
</t> | ||||
<t> | ||||
Lots of additional text on usage of the grouping semantic | ||||
</t> | ||||
<t> | ||||
Stricter definition of CLUE-controlled m lines and how they work | ||||
</t> | ||||
<t> | ||||
Some additional text on defining what happens when CLUE supports is added or | ||||
removed | ||||
</t> | ||||
<t> | ||||
Added details on when to not send RTCP for CLUE-controlled "m" lines. | ||||
</t> | ||||
<t> | ||||
Added a section on using BUNDLE with CLUE | ||||
</t> | ||||
<t> | ||||
Updated data channel references to point at new WG document rather than | ||||
indivual draft | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="draft-kyzivat-07:"> Revisions by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
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 | ||||
</t> | ||||
<t> | ||||
Added normative language on the setting up of a CLUE call, and added sections | ||||
on mid-call changes to the | ||||
CLUE status. | ||||
</t> | ||||
<t> | ||||
Added references to <xref target="I-D.ietf-clue-datachannel" /> where | ||||
appropriate. | ||||
</t> | ||||
<t> | ||||
Added some terminology for various types of CLUE and non-CLUE states of | ||||
operation. | ||||
</t> | ||||
<t> | ||||
Moved language related to topics that should be in | ||||
<xref target="I-D.ietf-clue-datachannel" /> and | ||||
<xref target="I-D.ietf-clue-protocol" />, but that has not yet been resolved | ||||
in those documents, into | ||||
an appendix. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="draft-kyzivat-06:"> Revisions by Rob Hansen | ||||
<list style='symbols'> | ||||
<t> | ||||
Removed CLUE message XML schema and details that are now in | ||||
draft-presta-clue-protocol | ||||
</t> | ||||
<t> | ||||
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. | ||||
</t> | ||||
<t> | ||||
A section has also been added on the current mandation of unidirectional | ||||
"m" lines. | ||||
</t> | ||||
<t> | ||||
Updated CLUE messaging in example call flow to match | ||||
draft-presta-clue-protocol-03 | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="draft-kyzivat-05:"> Revisions by pkyzivat: | ||||
<list style='symbols'> | ||||
<t> | ||||
Specified versioning model and mechanism. | ||||
</t> | ||||
<t> | ||||
Added explicit response to all messages. | ||||
</t> | ||||
<t> | ||||
Rearranged text to work with the above changes. | ||||
(Which rendered diff almost useless.) | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="draft-kyzivat-04:"> Revisions by Rob Hansen: ???</t> | ||||
<t hangText="draft-kyzivat-03:"> Revisions by pkyzivat: | ||||
<list style='symbols'> | ||||
<t> | ||||
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!) | ||||
</t> | ||||
<t> | ||||
Did some rewording to fit the syntax section in and reference it. | ||||
</t> | ||||
<t> | ||||
Did some relatively minor restructuring of the document to make | ||||
it flow better in a logical way. | ||||
</t> | ||||
</list> | ||||
</t> | <name>References</name> | |||
<t hangText="draft-kyzivat-02:"> A bunch of revisions by pkyzivat: | <references> | |||
<list style='symbols'> | <name>Normative References</name> | |||
<t> | ||||
Moved roberta's call flows to a more appropriate place in the document. | ||||
</t> | ||||
<t> | ||||
New section on versioning. | ||||
</t> | ||||
<t> | ||||
New section on NAK. | ||||
</t> | ||||
<t> | ||||
A couple of possible alternatives for message acknowledgment. | ||||
</t> | ||||
<t> | ||||
Some discussion of when/how to signal changes in provider state. | ||||
</t> | ||||
<t> | ||||
Some discussion about the handling of transport errors. | ||||
</t> | ||||
<t> | ||||
Added a change history section. | ||||
</t> | ||||
</list> | ||||
These were developed by Lennard Xiao, Christian Groves and Paul, | ||||
so added Lennard and Christian as authors. | ||||
</t> | <!--draft-ietf-clue-framework-25 is 8845 --> | |||
<t hangText="draft-kyzivat-01:"> | <reference anchor='RFC8845' target='https://www.rfc-editor.org/info/rfc8845'> | |||
<front> | ||||
<title>Framework for Telepresence Multi-Streams</title> | ||||
<author initials='M' surname='Duckworth' fullname='Mark Duckworth' role='editor' | ||||
> | ||||
<organization /> | ||||
</author> | ||||
<author initials='A' surname='Pepperell' fullname='Andrew Pepperell'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='S' surname='Wenger' fullname='Stephan Wenger'> | ||||
<organization /> | ||||
</author> | ||||
<date month='January' year='2021' /> | ||||
</front> | ||||
<seriesInfo name='RFC' value='8845' /> | ||||
<seriesInfo name='DOI' value='10.17487/RFC8845' /> | ||||
</reference> | ||||
Updated by roberta to include some sample call flows. | <!-- &I-D.ietf-clue-data-model-schema; is 8846--> | |||
<reference anchor="RFC8846" target="http://www.rfc-editor.org/info/rfc8846"> | ||||
<front> | ||||
<title>An XML Schema for the Controlling Multiple Streams for Telepr | ||||
esence (CLUE) Data Model</title> | ||||
<author initials="R" surname="Presta" fullname="Roberta Presta"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S P." surname="Romano" fullname="Simon Romano"> | ||||
<organization/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8846"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8846"/> | ||||
</reference> | ||||
</t> | <!--draft-ietf-clue-protocol-19 is 8847 --> | |||
<t hangText="draft-kyzivat-00:"> | <reference anchor='RFC8847' target='https://www.rfc-editor.org/info/rfc8847'> | |||
<front> | ||||
<title>Protocol for Controlling Multiple Streams for Telepresence (CLUE)</title> | ||||
<author initials='R' surname='Presta' fullname='Roberta Presta'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='S P.' surname='Romano' fullname='Simon Pietro Romano'> | ||||
<organization /> | ||||
</author> | ||||
<date month='January' year='2021' /> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8847" /> | ||||
<seriesInfo name='DOI' value='10.17487/RFC8847' /> | ||||
</reference> | ||||
Initial version by pkyzivat. Established general outline for the document, | <!--draft-ietf-clue-datachannel-18 is 8850 --> | |||
and specified a few things thought to represent wg consensus. | <reference anchor="RFC8850" target="https://www.rfc-editor.org/info/rfc8850"> | |||
<front> | ||||
<title>Controlling Multiple Streams for Telepresence (CLUE) Protocol Data | ||||
Channel</title> | ||||
<author initials="C." surname="Holmberg" fullname="Christer Holmberg"> | ||||
<organization/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8850"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8850"/> | ||||
</reference> | ||||
</t> | <!--draft-ietf-clue-rtp-mapping-14: 8849 --> | |||
</list></t> | <reference anchor='RFC8849' target="https://www.rfc-editor.org/info/rfc8849"> | |||
</section> | <front> | |||
<title>Mapping RTP Streams to Controlling Multiple Streams for Telepresence | ||||
(CLUE) Media Captures</title> | ||||
<author initials='R' surname='Even' fullname='Roni Even'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='J' surname='Lennox' fullname='Jonathan Lennox'> | ||||
<organization /> | ||||
</author> | ||||
<date month='January' year='2021' /> | ||||
</front> | ||||
<seriesInfo name='RFC' value='8849' /> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8849"/> | ||||
</reference> | ||||
</middle> | <!-- draft-ietf-mmusic-sctp-sdp --> | |||
<reference anchor="RFC8841" target="https://www.rfc-editor.org/info/rfc8841"> | ||||
<front> | ||||
<title>Session Description Protocol (SDP) Offer/Answer Procedures for | ||||
Stream Control Transmission Protocol (SCTP) over Datagram Transport Layer | ||||
Security (DTLS) Transport</title> | ||||
<author initials="C." surname="Holmberg" fullname="Christer Holmberg"> | ||||
<organization /> | ||||
</author> | ||||
<author initials="R." surname="Shpount" fullname="Roman Shpount"> | ||||
<organization /> | ||||
</author> | ||||
<author initials="S." surname="Loreto" fullname="Salvatore Loreto"> | ||||
<organization /> | ||||
</author> | ||||
<author initials="G." surname="Camarillo" fullname="Gonzalo Camarillo"> | ||||
<organization /> | ||||
</author> | ||||
<date month="January" year="2021" /> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8841" /> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8841"/> | ||||
</reference> | ||||
<back> | <!--draft-ietf-mmusic-data-channel-sdpneg-28; in REF - part of C238--> | |||
<references title="Normative References"> | <reference anchor="RFC8864" target="https://www.rfc-editor.org/info/rfc8864"> | |||
<?rfc include="reference.I-D.ietf-clue-framework"?> | <front> | |||
<?rfc include="reference.I-D.ietf-clue-data-model-schema"?> | <title>Negotiation Data Channels Using the Session Description | |||
<?rfc include="reference.I-D.ietf-clue-protocol"?> | Protocol (SDP)</title> | |||
<?rfc include="reference.I-D.ietf-clue-datachannel"?> | <author fullname="Keith Drage" initials="K." surname="Drage"> | |||
<?rfc include="reference.I-D.ietf-clue-rtp-mapping"?> | <organization>Unaffiliated</organization> | |||
<?rfc include="reference.I-D.ietf-rtcweb-data-channel"?> | </author> | |||
<?rfc include="reference.I-D.ietf-mmusic-sctp-sdp"?> | <author fullname="Raju Makaraju" initials="M." surname="Makaraju"> | |||
<?rfc include="reference.I-D.ietf-mmusic-data-channel-sdpneg"?> | <organization>Nokia</organization> | |||
<?rfc include="reference.I-D.ietf-mmusic-sdp-bundle-negotiation"?> | </author> | |||
<?rfc include="reference.RFC.2119"?> | <author fullname="Richard Ejzak" initials="R." surname="Ejzak"> | |||
<?rfc include="reference.RFC.3711"?> | <organization>Unaffiliated</organization> | |||
<?rfc include="reference.RFC.3840"?> | </author> | |||
<?rfc include="reference.RFC.4574"?> | <author fullname="Jerome Marcon" initials="J." surname="Marcon"> | |||
<?rfc include="reference.RFC.5763"?> | <organization>Unaffiliated</organization> | |||
<?rfc include="reference.RFC.5888"?> | </author> | |||
<?rfc include="reference.RFC.8174"?> | <author fullname="Roni Even" initials="R." surname="Even" role="editor"> | |||
</references> | <organization>Huawei</organization> | |||
<references title="Informative References"> | </author> | |||
<?rfc include="reference.RFC.2506"?> | <date month="January" year="2021"/> | |||
<?rfc include="reference.RFC.3261"?> | </front> | |||
<?rfc include="reference.RFC.3264"?> | <seriesInfo name="RFC" value="8864"/> | |||
<?rfc include="reference.RFC.3311"?> | <seriesInfo name="DOI" value="10.17487/RFC8864"/> | |||
<?rfc include="reference.RFC.4566"?> | </reference> | |||
<?rfc include="reference.RFC.8445"?> | ||||
<?rfc include="reference.RFC.5630"?> | ||||
<?rfc include="reference.RFC.5761"?> | ||||
<?rfc include="reference.RFC.6184"?> | ||||
</references> | ||||
</back> | <!-- draft-ietf-mmusic-sdp-bundle-negotiation (RFC 8843) --> | |||
<reference anchor="RFC8843" target="https://www.rfc-editor.org/info/rfc8843" | ||||
> | ||||
<front> | ||||
<title>Negotiating Media Multiplexing Using the Session Description Prot | ||||
ocol (SDP)</title> | ||||
<author initials="C" surname="Holmberg" fullname="Christer Holmberg"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="H" surname="Alvestrand" fullname="Harald Alvestrand"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="C" surname="Jennings" fullname="Cullen Jennings"> | ||||
<organization/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8843"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8843"/> | ||||
</reference> | ||||
<!-- draft-ietf-rtcweb-data-channel: 8831 --> | ||||
<reference anchor="RFC8831" target="https://www.rfc-editor.org/info/rfc8831"> | ||||
<front> | ||||
<title>WebRTC Data Channels</title> | ||||
<author initials="R" surname="Jesup" fullname="Randell Jesup"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S" surname="Loreto" fullname="Salvatore Loreto"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="M" surname="Tüxen" fullname="Michael Tüxen"> | ||||
<organization/> | ||||
</author> | ||||
<date month='January' year='2021'/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8831"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8831"/> | ||||
</reference> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.2119.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.3711.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.3840.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4574.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5763.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5888.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8174.xml"/> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.2506.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.3261.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.3264.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.3311.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4566.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5630.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5761.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
6184.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8445.xml"/> | ||||
</references> | ||||
</references> | ||||
<section numbered="false" toc="default"> | ||||
<name>Acknowledgements</name> | ||||
<t> | ||||
Besides the authors, the team focusing on this document consists of: | ||||
<contact fullname="Roni Even"/>, <contact fullname="Simon Pietro Romano"/>, and | ||||
<contact fullname="Roberta Presta"/>. | ||||
</t> | ||||
<t> | ||||
<contact fullname="Christian Groves"/>, <contact fullname="Jonathan Lennox"/>, a | ||||
nd <contact fullname="Adam Roach"/> have contributed detailed | ||||
comments and suggestions. | ||||
</t> | ||||
</section> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 225 change blocks. | ||||
1410 lines changed or deleted | 1035 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/ |