<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">

<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902"
     category="std" updates="5761" submissionType="IETF" number="8858"
     consensus="true" obsoletes="" xml:lang="en" tocInclude="true"
     symRefs="true" sortRefs="true" version="3"
     docName="draft-ietf-mmusic-mux-exclusive-12">

  <front>

    <title abbrev="Exclusive RTP/RTCP Mux">
Indicating Exclusive Support of RTP and RTP Control Protocol (RTCP)
Multiplexing Using the Session Description Protocol (SDP)   
    </title>
    <seriesInfo name="RFC" value="8858"/>
    <author fullname="Christer Holmberg" initials="C." surname="Holmberg">
      <organization abbrev="Ericsson">Ericsson</organization>
      <address>
        <postal>
          <street>Hirsalantie 11</street>
          <city>Jorvas</city>
          <code>02420</code>
          <country>Finland</country>
        </postal>
        <phone/>
        <email>christer.holmberg@ericsson.com</email>
      </address>
    </author>
    <date month="January" year="2021"/>
    <area>Transport</area>
    <keyword>RTP</keyword>
    <keyword>RTCP</keyword>
    <keyword>SDP</keyword>
    <keyword>OFFER</keyword>
    <keyword>ANSWER</keyword>
    <keyword>MUX</keyword>
    <keyword>MULTIPLEX</keyword>
    <keyword>RTCWEB</keyword>
    <keyword>WebRTC</keyword>
    <keyword>JSEP</keyword>
    <abstract>
      <t>
            This document defines a new Session Description Protocol (SDP)
            media-level attribute, 'rtcp-mux-only', that can be used
            by an endpoint to indicate exclusive support of RTP
            and RTP Control Protocol (RTCP) multiplexing. The document also updates RFC
            5761 by clarifying that an offerer can use a mechanism to indicate
            that it is not able to send and receive RTCP on separate ports.
      </t>
    </abstract>
  </front>
  <middle>
    <section numbered="true" toc="default">
      <name>Introduction</name>
      <t>
            <xref target="RFC5761" format="default"/> defines how to multiplex
            RTP and RTCP on a single IP address and port, referred to as
            RTP/RTCP multiplexing.  <xref target="RFC5761" format="default"/>
            also defines an SDP <xref target="RFC4566" format="default"/>
            attribute, 'rtcp-mux', that can be used by entities to indicate
            support of RTP/RTCP multiplexing and negotiate usage of it.
      </t>

      <t>
            As defined in <xref target="RFC5761" format="default"/>, if
            the peer endpoint does not support RTP/RTCP multiplexing, both endpoints should
            use separate ports for sending and receiving of RTCP (referred to as fallback
            to usage of separate ports for RTP and RTCP).
      </t>
      <t>
            Some newer applications that do not require backward compatibility
            with peers that cannot multiplex RTCP might choose not to
            implement separation of RTP and RTCP. Examples of such
            applications are W3C WebRTC applications <xref target="WebRTC"
            format="default"/>, which are not required to interoperate with
            non-WebRTC clients. For such applications, this document defines
            an SDP attribute to signal intent to require multiplexing.  The
            use of this attribute in SDP offers <xref format="default"
            target="RFC3264"/> may harm the interoperability of entities that
            ever need to interoperate with peers that do not support RTC/RTCP
            multiplexing.  Also, while the SDP answerer <xref format="default"
            target="RFC3264"/> might support, and prefer usage of, fallback to
            nonmultiplex, the attribute indicates that fallback to
            nonmultiplex cannot be enabled. One example of where nonmultiplex
            is preferred is where an endpoint is connected to a radio
            interface and wants to use different bearers (possibly with
            different quality characteristics) for RTP and RTCP. Another
            example is where one endpoint is acting as a gateway to a network
            where RTP/RTCP multiplexing cannot be used.  In such a case, the
            endpoint may also prefer nonmultiplexing towards the other
            network. Otherwise, the endpoint would have to perform
            demultiplexing of RTP and RTCP.
      </t>
      <t>
            This document defines a new SDP media-level attribute,
            'rtcp-mux-only', that can be used by an endpoint to indicate
            exclusive support of RTP/RTCP multiplexing. The document also
            updates <xref target="RFC5761" format="default"/> by clarifying
            that an offerer can use a mechanism to indicate that it is not
            able to send and receive RTCP on separate ports.
      </t>
      <t>
            This document also describes the Interactive Connectivity Establishment (ICE)
            <xref target="RFC8445" format="default"/> considerations when indicating exclusive
            support of RTP/RTCP multiplexing.
      </t>
    </section>
    <section numbered="true" toc="default">
      <name>Conventions</name>

        <t>
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
    "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>",
    "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
    "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be
    interpreted as described in BCP&nbsp;14 <xref target="RFC2119"/> <xref
    target="RFC8174"/> when, and only when, they appear in all capitals, as
    shown here.
        </t>

    </section>
    <section anchor="sec-dcon-attr" numbered="true" toc="default">
      <name>SDP 'rtcp-mux-only' Attribute</name>
      <t>This section defines a new SDP media-level attribute, 'rtcp-mux-only'.
      </t>
      <ul empty="true">
	<li>
	  <dl>
	    <dt>Name:</dt><dd>rtcp-mux-only</dd>
	    <dt>Value:</dt><dd>N/A</dd>
	    <dt>Usage Level:</dt><dd>media</dd>
	    <dt>Charset Dependent:</dt><dd>no</dd>
	    <dt>Syntax:</dt>
            <dd>rtcp-mux-only</dd>
	    <dt>Example:</dt>
            <dd>a=rtcp-mux-only</dd>
	  </dl>
	</li>
      </ul>
      <t>
            In an SDP offer, the offerer uses the SDP 'rtcp-mux-only' attribute to
            indicate exclusive support of RTP/RTCP multiplexing for the RTP-based
            media associated with the SDP media description ("m=" line).
      </t>
      <t>
            In an SDP answer, the 'rtcp-mux' attribute <xref target="RFC5761" format="default"/> indicates that the answerer
            supports, and accepts usage of, RTP/RTCP multiplexing for the RTP-based media
            associated with the SDP media description ("m=" line).
      </t>
      <t>
            The usage of the 'rtcp-mux-only' attribute in an SDP answer is forbidden.
      </t>
      <t>
            The usage of the SDP 'rtcp-mux-only' attribute is only defined for RTP-based
            media.
      </t>

      <t>
            The mux category <xref target="RFC8859" format="default"/>
            for the 'rtcp-mux-only' attribute is "IDENTICAL", which means that the
            attribute, if used within a BUNDLE group <xref target="RFC8843" format="default"/>,
            must be associated with all multiplexed RTP-based media descriptions
            within the BUNDLE group.
      </t>
      <t>
            The 'rtcp-mux-only' attribute applies to the whole associated
            media description. The attribute <bcp14>MUST NOT</bcp14> be defined per source (using the
            SDP 'ssrc' attribute <xref format="default" target="RFC5576"/>).
      </t>
      <t>
            The SDP offer/answer procedures <xref format="default" target="RFC3264"/> associated with the attribute
	    are defined in <xref target="sec-oa" format="default"/>.
      </t>
    </section>
    <section anchor="sec-oa" numbered="true" toc="default">
      <name>SDP Offer/Answer Procedures</name>
      <section numbered="true" toc="default">
        <name>General</name>
        <t>
                This section defines the SDP offer/answer procedures <xref format="default" target="RFC3264"/> for
		indicating exclusive support of RTP/RTCP multiplexing and
		negotiating usage of it.
        </t>
        <t>
                The procedures in this section apply to individual RTP-based
                SDP media descriptions ("m=" lines).
        </t>
      </section>
      <section anchor="sec-of-ini-off" numbered="true" toc="default">
        <name>Generating the Initial SDP Offer</name>
        <t>
                When sending the initial offer, if the offerer wants to indicate
                exclusive RTP/RTCP multiplexing for RTP-based media, it <bcp14>MUST</bcp14> associate
                an SDP 'rtcp-mux-only' attribute with the associated SDP media description
                ("m=" line).
        </t>
        <t>
                In addition, if the offerer associates an SDP 'rtcp-mux-only' attribute with
                an SDP media description ("m=" line), the offerer <bcp14>MUST</bcp14> also associate
		an SDP 'rtcp-mux' attribute with the same SDP media
		description ("m=" line), following
                the procedures in <xref target="RFC5761" format="default"/>.
        </t>
        <t>
                If the offerer associates an SDP 'rtcp' attribute <xref target="RFC3605" format="default"/>
                with an SDP media description ("m=" line), and if the offerer also associates an
                SDP 'rtcp-mux-only' attribute with the same SDP media description ("m=" line), the address and port
                values of the SDP 'rtcp' attribute <bcp14>MUST</bcp14> match the corresponding values for RTP.
        </t>
        <t>
                NOTE: This specification does not mandate the usage of the SDP 'rtcp' attribute for RTP/RTCP multiplexing.
        </t>
      </section>
      <section numbered="true" toc="default">
        <name>Generating the Answer</name>
        <t>
                When an answerer receives an offer that contains an SDP
  'rtcp-mux-only' attribute associated with
                an RTP-based SDP media description ("m=" line), then if the
  answerer accepts the usage of RTP/RTCP multiplexing, it <bcp14>MUST</bcp14>
  associate an SDP 'rtcp-mux' attribute with
                the corresponding SDP media description ("m=") in the
  associated answer, following the procedures in
                <xref target="RFC5761" format="default"/>. If
		the answerer does not accept the usage of RTP/RTCP
		multiplexing, it <bcp14>MUST</bcp14> either reject the SDP media
		description ("m=")
                by setting the port value to zero in the associated answer, or reject the whole offer,
                following the procedures in <xref target="RFC3264" format="default"/>.
        </t>
        <t>
                The answerer <bcp14>MUST NOT</bcp14> associate an SDP 'rtcp-mux-only' attribute with an
                SDP media description ("m=" line) in the answer.
        </t>
      </section>
      <section anchor="sec-of-off-ans" numbered="true" toc="default">
        <name>Offerer Processing of the SDP Answer</name>
        <t>
                If an offerer associated an SDP 'rtcp-mux-only' attribute with
                an RTP-based SDP media description ("m=" line) in an offer,
                and if the corresponding SDP media description ("m=" line) in
                the associated answer contains an SDP 'rtcp-mux' attribute,
                the offerer <bcp14>MUST</bcp14> apply the RTP/RTCP
                multiplexing procedures <xref target="RFC5761"
                format="default"/> to the associated RTP-based media. If the
                corresponding SDP media description ("m=" line) in the
                associated answer does not contain an SDP 'rtcp-mux'
                attribute, the offerer <bcp14>MUST</bcp14> either take
                appropriate actions in order to disable the associated
                RTP-based media -- e.g., send a new offer with a zero port
                value associated with the SDP media description ("m=" line) --
                or send a new offer without associating an SDP 'rtcp-mux-only'
                attribute with the SDP media description ("m=" line).
        </t>
        <t>
                NOTE: This document does not mandate specific actions on how to terminate the RTP media.
                The offerer might, for example, terminate the RTP media by
		sending a new offer in which the port value of the SDP
                media description is set to zero.
        </t>
      </section>
      <section numbered="true" toc="default">
        <name>Modifying the Session</name>
        <t>
                When an offerer sends a subsequent offer, if the offerer and
                answerer have previously negotiated usage of exclusive
                RTP/RTCP multiplexing for the media associated with an
                RTP-based SDP media description ("m=" line), the offerer
                <bcp14>SHOULD</bcp14> associate an SDP 'rtcp-mux-only' with
                the corresponding SDP media description ("m=" line).
        </t>
        <t>
                In addition, if the offerer associates an SDP 'rtcp-mux-only'
                attribute with an SDP media description ("m=" line), the
                offerer <bcp14>MUST</bcp14> also associate an SDP 'rtcp-mux'
                attribute with the same SDP media description ("m=" line),
                following the procedures in <xref target="RFC5761"
                format="default"/>.
        </t>
        <t>
                If the offerer does not associate the attributes with the
		corresponding SDP media description ("m=" line), it is an
		indication that the offerer no longer wants to use RTP/RTCP
		multiplexing and instead <bcp14>MUST</bcp14> fall back to usage of separate
		ports for RTP and RTCP once the offer has been accepted
                by the answerer.
        </t>
        <t>
                When an offerer sends a subsequent offer, if the offerer and
                answerer have not previously negotiated usage of RTP/RTCP
                multiplexing for the media associated with an RTP-based SDP
                media description ("m=" line), the offerer <bcp14>MAY</bcp14>
                indicate exclusive support of RTP/RTCP multiplexing, following
                the procedures in <xref target="sec-of-ini-off"
                format="default"/>.  The offerer <bcp14>MUST</bcp14> process
                the associated answer following the procedures in <xref
                target="sec-of-off-ans" format="default"/>.
        </t>
        <t>
                It is <bcp14>RECOMMENDED</bcp14> to not switch between usage of RTP/RTCP
		multiplexing and usage of separate ports for RTP and RTCP in a
		subsequent offer, unless there is a use case that mandates it.
        </t>
      </section>
    </section>
    <section numbered="true" toc="default">
      <name>Update to RFC 5761</name>
      <section numbered="true" toc="default">
        <name>General</name>
        <t>
            This section updates Sections <xref target="RFC5761"
            section="5.1.1" sectionFormat="bare"/> and <xref target="RFC5761"
            section="5.1.3" sectionFormat="bare"/> of <xref target="RFC5761"
            format="default"/> by clarifying that an offerer can use a
            mechanism to indicate that it is not able to send and receive RTCP
            on separate ports, and that the offerer shall terminate the
            affected streams if the answerer does not indicate support of
            RTP/RTCP multiplexing. It also clarifies that, when the offerer is
            not able to send and receive RTCP on separate ports, the offerer
            will not provide an SDP 'candidate' attribute for RTCP, nor will
            the offerer provide a fallback port for RTCP (using the SDP 'rtcp'
            attribute).
        </t>
      </section>
      <section numbered="true" toc="default">
        <name>Update to 4th Paragraph of Section 5.1.1</name>
        <t>
                NOTE: <xref target="RFC8035" format="default"/> also updates
                <xref target="RFC5761" sectionFormat="of"
                section="5.1.1"/>. While the paragraph updated in this
                document is not updated by <xref target="RFC8035"
                format="default"/>, the location of the paragraph within
                Section 5.1.1 is moved.
        </t>


<t>OLD TEXT:</t>
  <blockquote>
    If the answer does not contain an "a=rtcp-mux" attribute, the offerer
   <bcp14>MUST NOT</bcp14> multiplex RTP and RTCP packets on a single port.  Instead,
   it should send and receive RTCP on a port allocated according to the
   usual port-selection rules (either the port pair, or a signalled port
   if the "a=rtcp:" attribute [10] is also included).  This will occur
   when talking to a peer that does not understand the "a=rtcp-mux"
   attribute.</blockquote>

<t>NEW TEXT:</t>
   <blockquote>If the answer does not contain an "a=rtcp-mux" attribute, the offerer
   <bcp14>MUST NOT</bcp14> multiplex RTP and RTCP packets on a single port.  Instead,
   it should send and receive RTCP on a port allocated according to the
   usual port-selection rules (either the port pair, or a signaled port
   if the "a=rtcp:" attribute [10] is also included).  This will occur
   when talking to a peer that does not understand the "a=rtcp-mux"
   attribute.  However, if the offerer indicated in the offer that it is
   not able to send and receive RTCP on a separate port, the offerer
   <bcp14>MUST</bcp14> disable the media streams associated with the attribute.  The
   mechanism for indicating that the offerer is not able to send and
   receive RTCP on a separate port is outside the scope of this
   specification.</blockquote>

      </section>
      <section numbered="true" toc="default">
        <name>Update to 2nd Paragraph of Section 5.1.3</name>

<t>OLD TEXT:</t>
   <blockquote>If it is desired to use both ICE and multiplexed RTP and RTCP, the
   initial offer <bcp14>MUST</bcp14> contain an "a=rtcp-mux" attribute to indicate that
   RTP and RTCP multiplexing is desired and <bcp14>MUST</bcp14> contain "a=candidate:"
   lines for both RTP and RTCP along with an "a=rtcp:" line indicating a
   fallback port for RTCP in the case that the answerer does not support
   RTP and RTCP multiplexing.  This <bcp14>MUST</bcp14> be done for each media where
   RTP and RTCP multiplexing is desired.</blockquote>

<t>NEW TEXT:</t>
   <blockquote>If it is desired to use both ICE and multiplexed RTP and RTCP, the
   initial offer <bcp14>MUST</bcp14> contain an "a=rtcp-mux" attribute to indicate that
   RTP and RTCP multiplexing is desired and <bcp14>MUST</bcp14> contain "a=candidate:"
   lines for both RTP and RTCP along with an "a=rtcp:" line indicating a
   fallback port for RTCP in the case that the answerer does not support
   RTP and RTCP multiplexing.  This <bcp14>MUST</bcp14> be done for each media where
   RTP and RTCP multiplexing is desired.  However, if the offerer
   indicates in the offer that it is not able to send and receive RTCP
   on a separate port, the offerer <bcp14>MUST NOT</bcp14> include "a=candidate:"
   lines for RTCP and <bcp14>MUST NOT</bcp14> provide a fallback port for
   RTCP using the "a=rtcp:" line.</blockquote>

      </section>
    </section>
    <section numbered="true" toc="default">
      <name>ICE Considerations</name>
      <t>
            As defined in <xref target="RFC8445" format="default"/>, if an entity is aware that the
            remote peer supports, and is willing to use, RTP/RTCP multiplexing,
            the entity will only provide RTP candidates (component ID 1).
            However, only providing RTP candidates does not, as such, imply
            exclusive support of RTP/RTCP multiplexing. RTCP candidates also
            would not be provided in cases where RTCP is not supported
            at all. Therefore, additional information is needed in order
            to indicate support of exclusive RTP/RTCP multiplexing. This
            document defines such a mechanism using the SDP 'rtcp-mux-only'
            attribute.
      </t>
    </section>
    <section numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>
            This document does not introduce new security considerations
            beyond those specified in <xref target="RFC3605"
            format="default"/> and <xref target="RFC5761" format="default"/>.
</t>
    </section>
    <section anchor="section.iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>

            This document updates the "Session Description Protocol Parameters" registry
            as specified in <xref target="RFC4566" sectionFormat="of" section="8.2.4"/>.
            Specifically, it adds the SDP 'rtcp-mux-only' attribute to the table for SDP
            media-level attributes.
      </t>
      <ul empty="true">
	<li>
	  <dl>
	    <dt>Attribute name:</dt><dd>rtcp-mux-only</dd>
	    <dt>Type of attribute:</dt><dd>media-level</dd>
	    <dt>Subject to charset:</dt><dd>no</dd>
	    <dt>Purpose:</dt><dd>Indicate exclusive support of RTP/RTCP multiplexing</dd>
	    <dt>Appropriate Values:</dt><dd>N/A</dd>
	    <dt>Contact name:</dt><dd><t><contact fullname="Christer Holmberg"/> (christer.holmberg@ericsson.com)</t></dd>
	    <dt>Mux Category:</dt><dd>IDENTICAL</dd>
	  </dl>
	</li>
      </ul>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3264.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4566.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8445.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5761.xml"/>
        <xi:include
	    href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8035.xml"/>


<!-- draft-ietf-mmusic-sdp-mux-attributes-17 (RFC 8859) -->
        <reference anchor="RFC8859" target="https://www.rfc-editor.org/info/rfc8859">
          <front>
            <title>A Framework for Session Description Protocol (SDP)
            Attributes When Multiplexing</title>
            <author initials="S" surname="Nandakumar" fullname="Suhas Nandakumar">
              <organization/>
            </author>
            <date month="January" year="2021"/>
          </front>
            <seriesInfo name="RFC" value="8859"/>
            <seriesInfo name="DOI" value="10.17487/RFC8859"/>

        </reference>

<!-- 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 Protocol (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>


      </references>
      <references>
        <name>Informative References</name>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3605.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5576.xml"/>


        <reference anchor="WebRTC" target="https://www.w3.org/TR/webrtc/">
          <front>
            <title>WebRTC 1.0: Real-time Communication Between Browsers</title>

            <author initials="C" surname="Jennings" fullname="Cullen Jennings">
              <organization/>
            </author>
            <author initials="H" surname="Boström" fullname="Henrik Boström">
              <organization/>
            </author>
            <author initials="J-I" surname="Bruaroey" fullname="Jan-Ivar Bruaroey">
              <organization/>
            </author>
          </front>
            <refcontent>W3C Proposed Recommendation</refcontent>
        </reference>
      </references>
    </references>
    <section numbered="false" toc="default">
      <name>Acknowledgements</name>
      <t>
            Thanks to <contact fullname="Roman Shpount"/>, <contact
            fullname="Paul Kyzivat"/>, <contact fullname="Ari Keränen"/>,
            <contact fullname="Bo Burman"/>, <contact fullname="Tomas Frankkila"/>, and <contact
            fullname="Martin Thomson"/> for their comments and input on the
            document. Thanks to <contact fullname="Francis Dupont"/> for the
            GENART review.
      </t>
    </section>
  </back>
</rfc>
