<?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-00" 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-00"/>
    <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>
### SDP Example for 7.1 Audio</t>
          <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>
### Field Descriptions</t>
          <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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
sf8Bkvj4KZgbAAA=

-->

</rfc>
