<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-shin-avtcore-rtp-multi-opus-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="MULTI-OPUS">RTP/SDP for Opus Multistream</title>
    <seriesInfo name="Internet-Draft" value="draft-shin-avtcore-rtp-multi-opus-01"/>
    <author initials="S." surname="Shin" fullname="Sun Shin">
      <organization>NVIDIA</organization>
      <address>
        <email>sushin@nvidia.com</email>
      </address>
    </author>
    <date year="2025" month="October" day="19"/>
    <area>General</area>
    <workgroup>avtcore WG</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 32?>

<t>This document specifies RTP/SDP signaling for Opus multistream (multi‑channel)
operation, enabling negotiation of layouts such as 5.1 and 7.1 in real‑time communications.
It defines an SDP encoding name and format parameters to
describe multistream configurations, and specifies Offer/Answer procedures
for interoperable negotiation. This document extends the Opus RTP
payload format defined in <xref target="RFC7587"/> and reuses the channel‑mapping
concepts defined for the Ogg container in <xref target="RFC7845"/>.</t>
    </abstract>
  </front>
  <middle>
    <?line 42?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Opus (<xref target="RFC6716"/>) supports up to 255 channels via multistream with explicit
channel mapping. The RTP payload format for Opus (<xref target="RFC7587"/>), however,
standardizes only mono/stereo signaling for RTP/SDP and leaves multistream
out of scope. <xref target="RFC7845"/> defines channel‑mapping families for Opus carried
in the Ogg container, but it does not define RTP/SDP signaling or
Offer/Answer behavior. This document fills that gap by specifying
interoperable SDP signaling and Offer/Answer procedures for multistream
Opus in RTP sessions, while aligning channel‑mapping semantics with <xref target="RFC7845"/>.</t>
    </section>
    <section anchor="relationship-to-existing-rfcs">
      <name>Relationship to Existing RFCs</name>
      <t>This section summarizes the scope and relationship between <xref target="RFC6716"/> (Opus codec),
<xref target="RFC7587"/> (Opus over RTP), <xref target="RFC7845"/> (Ogg encapsulation of Opus), and this draft.
While RFC 7845 defines channel mapping families for multistream Opus in the Ogg
container, it does not define SDP signaling or RTP usage. <xref target="RFC7587"/> defines the
RTP payload format for Opus but only covers mono/stereo signaling. This draft
extends <xref target="RFC7587"/> to define SDP signaling for multistream Opus in RTP sessions
and reuses the mapping semantics from <xref target="RFC7845"/>.</t>
    </section>
    <section anchor="relationship-of-rfcs-and-this-draft">
      <name>Relationship of RFCs and This Draft:</name>
      <artwork><![CDATA[
  +----------------+     +-------------------+     +----------------+
  |   RFC 6716     |     |     RFC 7845      |     |   RFC 7587     |
  |  Opus Codec    |     | Ogg Encapsulation |     | Opus over RTP  |
  +----------------+     +-------------------+     +----------------+
           |                       |                        |
           |                       |                        |
           +-----------------------+------------------------+
                                   |
                                   v
                   +------------------------------+
                   |  This Draft (Multi-Opus RTP) |
                   |  SDP Signaling + O/A Rules   |
                   +------------------------------+
]]></artwork>
    </section>
    <section anchor="summary-of-rfcs-and-this-draft">
      <name>Summary of RFCs and This Draft:</name>
      <artwork><![CDATA[
 +------------+----------------------+-----------------------+-----------------------+ 
 | RFC/Draft  | Scope                | Defines Channel Map?  | Defines SDP Signaling |
 +------------+----------------------+-----------------------+-----------------------+
 | RFC 6716   | Opus codec           | Yes (API level)       | No                    |
 | RFC 7845   | Ogg encapsulation    | Yes (families)        | No                    |
 | RFC 7587   | RTP payload format   | No (mono/stereo only) | Yes (mono/stereo)     |
 | This Draft | RTP multistream SDP  | Reuses RFC 7845       | Yes (multi-channel)   |
 +------------+----------------------+-----------------------+-----------------------+
]]></artwork>
    </section>
    <section anchor="overview-and-rationale">
      <name>Overview and Rationale</name>
      <t>Deployed systems (e.g., <xref target="libwebrtc"/> based) interoperate using a non‑standard
SDP encoding name “multiopus” with fmtp parameters such as num_streams,
coupled_streams, and channel_mapping.
Standardizing these semantics improves interoperability and removes the need
for application‑level SDP text modifications.</t>
    </section>
    <section anchor="sdp-signaling-for-opus-multistream">
      <name>SDP Signaling for Opus Multistream</name>
      <section anchor="sdp-syntax-for-multichannel-opus">
        <name>SDP Syntax for Multichannel Opus</name>
        <section anchor="sdp-example-for-51-audio">
          <name>SDP Example for 5.1 Audio</name>
          <t><tt>sdp
a=rtpmap:111 multiopus/48000/6
a=fmtp:111 num_streams=4;coupled_streams=2;channel_mapping=0,4,1,2,3,5
</tt></t>
        </section>
        <section anchor="sdp-example-for-71-audio">
          <name>SDP Example for 7.1 Audio</name>
          <t><tt>sdp
a=rtpmap:111 multiopus/48000/8
a=fmtp:111 num_streams=5;coupled_streams=3;channel_mapping=0,6,1,2,3,4,5,7
</tt></t>
        </section>
        <section anchor="field-descriptions">
          <name>Field Descriptions</name>
          <ul spacing="normal">
            <li>
              <t><tt>a=rtpmap:&lt;pt&gt; multiopus/48000/&lt;channel-count&gt;</tt>
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>&lt;pt&gt;</tt>: Dynamic payload type (e.g., 96).</t>
                </li>
                <li>
                  <t><tt>48000</tt>: Fixed clock rate for Opus.</t>
                </li>
                <li>
                  <t><tt>&lt;channel-count&gt;</tt>: Total number of output channels (e.g., 6 for 5.1, 8 for 7.1).</t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>a=fmtp:&lt;pt&gt; num_streams=&lt;N&gt;;coupled_streams=&lt;M&gt;;channel_mapping=&lt;C&gt;</tt>
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>num_streams</tt>: Total number of Opus streams.</t>
                </li>
                <li>
                  <t><tt>coupled_streams</tt>: Number of stereo (coupled) streams.</t>
                </li>
                <li>
                  <t><tt>channel_mapping</tt>: Comma-separated list mapping RTP channels to speaker positions.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>The <tt>channel_mapping</tt> values follow the Opus multistream mapping used by <xref target="libwebrtc"/>.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="offeranswer-procedures">
      <name>Offer/Answer Procedures</name>
      <t>An offerer willing to negotiate multichannel Opus MAY include one or more payload types
using multiopus with appropriate fmtp, and SHOULD include a stereo alternative using
opus/48000/2 (<xref target="RFC7587"/>) for backward compatibility.</t>
      <t>An answerer that supports the offered multiopus configuration MUST select the corresponding
payload type and include the selected multistream parameters in the answer.</t>
      <t>If unsupported, the answerer MAY select a stereo opus payload or reject the m‑section per <xref target="RFC3264"/>.
Down‑conversion to stereo SHOULD NOT occur silently when the answerer supports the offered configuration.</t>
      <section anchor="examples">
        <name>Examples</name>
        <section anchor="offer-51-6-channels">
          <name>Offer: 5.1 (6 channels)</name>
          <t>m=audio 9 UDP/TLS/RTP/SAVPF 111 112
a=mid:audio
a=rtpmap:111 multiopus/48000/6
a=fmtp:111 num_streams=4;coupled_streams=2;channel_mapping=0,4,1,2,3,5
a=rtpmap:112 opus/48000/2
a=sendrecv</t>
        </section>
        <section anchor="answer-accept-51">
          <name>Answer: accept 5.1</name>
          <t>m=audio 9 UDP/TLS/RTP/SAVPF 111
a=mid:audio
a=rtpmap:111 multiopus/48000/6
a=fmtp:111 num_streams=4;coupled_streams=2;channel_mapping=0,4,1,2,3,5
a=sendrecv</t>
        </section>
      </section>
      <section anchor="security-considerations">
        <name>Security Considerations</name>
        <t>The use of the <tt>multiopus</tt> encoding in SDP does not introduce new security concerns beyond those already
described in <xref target="RFC7587"/>. Implementers should ensure that SDP parsing and RTP payload handling are robust
against malformed or malicious input. Applications using multichannel Opus streams must also consider
the privacy implications of transmitting spatial audio data, which may reveal environmental context.</t>
        <t>Transport-level security mechanisms such as DTLS-SRTP are recommended to protect RTP streams.</t>
      </section>
      <section anchor="iana-considerations">
        <name>IANA Considerations</name>
        <t>This document does not require any new IANA registrations. The <tt>multiopus</tt> encoding name and associated
SDP attributes are used in accordance with existing conventions and do not introduce new protocol elements.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-informative-references">
      <name>Informative References</name>
      <reference anchor="libwebrtc" target="https://webrtc-review.googlesource.com/c/src/+/129768">
        <front>
          <title>Opus multistream mapping</title>
          <author>
            <organization>WebRTC</organization>
          </author>
          <date>n.d.</date>
        </front>
      </reference>
      <reference anchor="RFC7587">
        <front>
          <title>RTP Payload Format for the Opus Speech and Audio Codec</title>
          <author fullname="J. Spittka" initials="J." surname="Spittka"/>
          <author fullname="K. Vos" initials="K." surname="Vos"/>
          <author fullname="JM. Valin" initials="JM." surname="Valin"/>
          <date month="June" year="2015"/>
          <abstract>
            <t>This document defines the Real-time Transport Protocol (RTP) payload format for packetization of Opus-encoded speech and audio data necessary to integrate the codec in the most compatible way. It also provides an applicability statement for the use of Opus over RTP. Further, it describes media type registrations for the RTP payload format.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7587"/>
        <seriesInfo name="DOI" value="10.17487/RFC7587"/>
      </reference>
      <reference anchor="RFC7845">
        <front>
          <title>Ogg Encapsulation for the Opus Audio Codec</title>
          <author fullname="T. Terriberry" initials="T." surname="Terriberry"/>
          <author fullname="R. Lee" initials="R." surname="Lee"/>
          <author fullname="R. Giles" initials="R." surname="Giles"/>
          <date month="April" year="2016"/>
          <abstract>
            <t>This document defines the Ogg encapsulation for the Opus interactive speech and audio codec. This allows data encoded in the Opus format to be stored in an Ogg logical bitstream.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7845"/>
        <seriesInfo name="DOI" value="10.17487/RFC7845"/>
      </reference>
      <reference anchor="RFC6716">
        <front>
          <title>Definition of the Opus Audio Codec</title>
          <author fullname="JM. Valin" initials="JM." surname="Valin"/>
          <author fullname="K. Vos" initials="K." surname="Vos"/>
          <author fullname="T. Terriberry" initials="T." surname="Terriberry"/>
          <date month="September" year="2012"/>
          <abstract>
            <t>This document defines the Opus interactive speech and audio codec. Opus is designed to handle a wide range of interactive audio applications, including Voice over IP, videoconferencing, in-game chat, and even live, distributed music performances. It scales from low bitrate narrowband speech at 6 kbit/s to very high quality stereo music at 510 kbit/s. Opus uses both Linear Prediction (LP) and the Modified Discrete Cosine Transform (MDCT) to achieve good compression of both speech and music. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6716"/>
        <seriesInfo name="DOI" value="10.17487/RFC6716"/>
      </reference>
      <reference anchor="RFC3264">
        <front>
          <title>An Offer/Answer Model with Session Description Protocol (SDP)</title>
          <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
          <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"/>
          <date month="June" year="2002"/>
          <abstract>
            <t>This document defines a mechanism by which two entities can make use of the Session Description Protocol (SDP) to arrive at a common view of a multimedia session between them. In the model, one participant offers the other a description of the desired session from their perspective, and the other participant answers with the desired session from their perspective. This offer/answer model is most useful in unicast sessions where information from both participants is needed for the complete view of the session. The offer/answer model is used by protocols like the Session Initiation Protocol (SIP). [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="3264"/>
        <seriesInfo name="DOI" value="10.17487/RFC3264"/>
      </reference>
    </references>
  </back>
  <!-- ##markdown-source:
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
/wOXp+oimRsAAA==

-->

</rfc>
