<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-mmusic-rid-15" indexInclude="true" ipr="trust200902" number="8851" prepTime="2021-01-19T12:31:04" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" updates="4855" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-mmusic-rid-15" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc8851" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="RTP Restrictions">RTP Payload Format Restrictions</title>
    <seriesInfo name="RFC" value="8851" stream="IETF"/>
    <author initials="A.B." surname="Roach" fullname="Adam Roach" role="editor">
      <organization showOnFrontPage="true">Mozilla</organization>
      <address>
        <email>adam@nostrum.com</email>
      </address>
    </author>
    <date month="01" year="2021"/>
    <keyword>WebRTC</keyword>
    <keyword>Multiplexing</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">In this specification, we define a framework for specifying restrictions
on RTP streams in the Session Description Protocol (SDP).
This framework defines a new "rid" ("restriction identifier") SDP attribute to
unambiguously identify the RTP streams within an RTP session and restrict the
streams' payload format parameters in a codec-agnostic way beyond what is
provided with the regular payload types.</t>
      <t indent="0" pn="section-abstract-2">This specification updates RFC 4855 to give additional guidance on choice of
Format Parameter (fmtp) names and their relation to the restrictions
defined by this document.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc8851" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2021 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Simplified BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Simplified BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-key-words-for-requirements">Key Words for Requirements</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-sdp-arid-media-level-attrib">SDP "a=rid" Media Level Attribute</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-arid-restrictions">"a=rid" Restrictions</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-sdp-offer-answer-procedures">SDP Offer/Answer Procedures</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-generating-the-initial-sdp-">Generating the Initial SDP Offer</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.2">
                <t indent="0" pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" format="counter" sectionFormat="of" target="section-6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-answerer-processing-the-sdp">Answerer Processing the SDP Offer</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2.2.2">
                  <li pn="section-toc.1-1.6.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.6.2.2.2.1.1"><xref derivedContent="6.2.1" format="counter" sectionFormat="of" target="section-6.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-arid-unaware-answerer">"a=rid"-Unaware Answerer</xref></t>
                  </li>
                  <li pn="section-toc.1-1.6.2.2.2.2">
                    <t indent="0" pn="section-toc.1-1.6.2.2.2.2.1"><xref derivedContent="6.2.2" format="counter" sectionFormat="of" target="section-6.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-arid-aware-answerer">"a=rid"-Aware Answerer</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.6.2.3">
                <t indent="0" pn="section-toc.1-1.6.2.3.1"><xref derivedContent="6.3" format="counter" sectionFormat="of" target="section-6.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-generating-the-sdp-answer">Generating the SDP Answer</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.4">
                <t indent="0" pn="section-toc.1-1.6.2.4.1"><xref derivedContent="6.4" format="counter" sectionFormat="of" target="section-6.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-offerer-processing-of-the-s">Offerer Processing of the SDP Answer</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.5">
                <t indent="0" pn="section-toc.1-1.6.2.5.1"><xref derivedContent="6.5" format="counter" sectionFormat="of" target="section-6.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-modifying-the-session">Modifying the Session</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-use-with-declarative-sdp">Use with Declarative SDP</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-interaction-with-other-tech">Interaction with Other Techniques</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.8.2">
              <li pn="section-toc.1-1.8.2.1">
                <t indent="0" pn="section-toc.1-1.8.2.1.1"><xref derivedContent="8.1" format="counter" sectionFormat="of" target="section-8.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-interaction-with-vp8-format">Interaction with VP8 Format Parameters</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.8.2.1.2">
                  <li pn="section-toc.1-1.8.2.1.2.1">
                    <t indent="0" pn="section-toc.1-1.8.2.1.2.1.1"><xref derivedContent="8.1.1" format="counter" sectionFormat="of" target="section-8.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-max-fr-maximum-frame-rate">max-fr - Maximum Frame Rate</xref></t>
                  </li>
                  <li pn="section-toc.1-1.8.2.1.2.2">
                    <t indent="0" pn="section-toc.1-1.8.2.1.2.2.1"><xref derivedContent="8.1.2" format="counter" sectionFormat="of" target="section-8.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-max-fs-maximum-frame-size-i">max-fs - Maximum Frame Size, in VP8 Macroblocks</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.8.2.2">
                <t indent="0" pn="section-toc.1-1.8.2.2.1"><xref derivedContent="8.2" format="counter" sectionFormat="of" target="section-8.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-interaction-with-h264-forma">Interaction with H.264 Format Parameters</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.8.2.2.2">
                  <li pn="section-toc.1-1.8.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.8.2.2.2.1.1"><xref derivedContent="8.2.1" format="counter" sectionFormat="of" target="section-8.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-profile-level-id-and-max-re">profile-level-id and max-recv-level - Negotiated Subprofile</xref></t>
                  </li>
                  <li pn="section-toc.1-1.8.2.2.2.2">
                    <t indent="0" pn="section-toc.1-1.8.2.2.2.2.1"><xref derivedContent="8.2.2" format="counter" sectionFormat="of" target="section-8.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-max-br-maxbr-maximum-video-">max-br / MaxBR - Maximum Video Bitrate</xref></t>
                  </li>
                  <li pn="section-toc.1-1.8.2.2.2.3">
                    <t indent="0" pn="section-toc.1-1.8.2.2.2.3.1"><xref derivedContent="8.2.3" format="counter" sectionFormat="of" target="section-8.2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-max-fs-maxfs-maximum-frame-">max-fs / MaxFS - Maximum Frame Size, in H.264 Macroblocks</xref></t>
                  </li>
                  <li pn="section-toc.1-1.8.2.2.2.4">
                    <t indent="0" pn="section-toc.1-1.8.2.2.2.4.1"><xref derivedContent="8.2.4" format="counter" sectionFormat="of" target="section-8.2.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-max-mbps-maxmbps-maximum-ma">max-mbps / MaxMBPS - Maximum Macroblock Processing Rate</xref></t>
                  </li>
                  <li pn="section-toc.1-1.8.2.2.2.5">
                    <t indent="0" pn="section-toc.1-1.8.2.2.2.5.1"><xref derivedContent="8.2.5" format="counter" sectionFormat="of" target="section-8.2.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-max-smbps-maximum-decoded-p">max-smbps - Maximum Decoded Picture Buffer</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.8.2.3">
                <t indent="0" pn="section-toc.1-1.8.2.3.1"><xref derivedContent="8.3" format="counter" sectionFormat="of" target="section-8.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-redundancy-formats-and-payl">Redundancy Formats and Payload Type Restrictions</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-format-parameters-for-futur">Format Parameters for Future Payloads</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="10" format="counter" sectionFormat="of" target="section-10"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-formal-grammar">Formal Grammar</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="11" format="counter" sectionFormat="of" target="section-11"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-sdp-examples">SDP Examples</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.11.2">
              <li pn="section-toc.1-1.11.2.1">
                <t indent="0" pn="section-toc.1-1.11.2.1.1"><xref derivedContent="11.1" format="counter" sectionFormat="of" target="section-11.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-many-bundled-streams-using-">Many Bundled Streams Using Many Codecs</xref></t>
              </li>
              <li pn="section-toc.1-1.11.2.2">
                <t indent="0" pn="section-toc.1-1.11.2.2.1"><xref derivedContent="11.2" format="counter" sectionFormat="of" target="section-11.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-scalable-layers">Scalable Layers</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.12">
            <t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="12" format="counter" sectionFormat="of" target="section-12"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.12.2">
              <li pn="section-toc.1-1.12.2.1">
                <t indent="0" pn="section-toc.1-1.12.2.1.1"><xref derivedContent="12.1" format="counter" sectionFormat="of" target="section-12.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-new-sdp-media-level-attribu">New SDP Media-Level Attribute</xref></t>
              </li>
              <li pn="section-toc.1-1.12.2.2">
                <t indent="0" pn="section-toc.1-1.12.2.2.1"><xref derivedContent="12.2" format="counter" sectionFormat="of" target="section-12.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-registry-for-rid-level-para">Registry for RID-Level Parameters</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.13">
            <t indent="0" pn="section-toc.1-1.13.1"><xref derivedContent="13" format="counter" sectionFormat="of" target="section-13"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.14">
            <t indent="0" pn="section-toc.1-1.14.1"><xref derivedContent="14" format="counter" sectionFormat="of" target="section-14"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.14.2">
              <li pn="section-toc.1-1.14.2.1">
                <t indent="0" pn="section-toc.1-1.14.2.1.1"><xref derivedContent="14.1" format="counter" sectionFormat="of" target="section-14.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.14.2.2">
                <t indent="0" pn="section-toc.1-1.14.2.2.1"><xref derivedContent="14.2" format="counter" sectionFormat="of" target="section-14.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.15">
            <t indent="0" pn="section-toc.1-1.15.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.16">
            <t indent="0" pn="section-toc.1-1.16.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-contributors">Contributors</xref></t>
          </li>
          <li pn="section-toc.1-1.17">
            <t indent="0" pn="section-toc.1-1.17.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-address">Author's Address</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="terminology" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-terminology">Terminology</name>
      <t indent="0" pn="section-1-1">The terms "source RTP stream", "endpoint", "RTP session", and "RTP stream"
are used as defined in <xref target="RFC7656" format="default" sectionFormat="of" derivedContent="RFC7656"/>.</t>
      <t indent="0" pn="section-1-2"><xref target="RFC4566" format="default" sectionFormat="of" derivedContent="RFC4566"/> and <xref target="RFC3264" format="default" sectionFormat="of" derivedContent="RFC3264"/> terminology is also used where appropriate.</t>
    </section>
    <section anchor="sec-intro" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-2-1">The payload type (PT) field in RTP provides a mapping between the RTP payload
format and the associated SDP media description. For a given PT, the SDP
rtpmap and/or fmtp attributes are used to describe the properties of
the media that is carried in the RTP payload.</t>
      <t indent="0" pn="section-2-2">Recent advances in standards have given rise to rich
multimedia applications requiring support for either multiple RTP streams within an
RTP session <xref target="RFC8843" format="default" sectionFormat="of" derivedContent="RFC8843"/> <xref target="RFC8853" format="default" sectionFormat="of" derivedContent="RFC8853"/> or a
large number of codecs.
These demands have unearthed challenges inherent with:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-2-3">
        <li pn="section-2-3.1">The restricted RTP PT space in specifying the various payload
configurations</li>
        <li pn="section-2-3.2">The codec-specific constructs for the payload formats in SDP</li>
        <li pn="section-2-3.3">Missing or underspecified payload format parameters</li>
        <li pn="section-2-3.4">Overloading of PTs to indicate not just codec configurations, but
individual streams within an RTP session</li>
      </ul>
      <t indent="0" pn="section-2-4">To expand on these points: <xref target="RFC3550" format="default" sectionFormat="of" derivedContent="RFC3550"/>
      assigns 7 bits for the PT in the RTP header.  However, the assignment of
      static mapping of RTP payload type numbers to payload formats and
      multiplexing of RTP with other protocols (such as the RTP Control
      Protocol (RTCP)) could result in a limited number of payload type
      numbers available for application usage. In scenarios where the number
      of possible RTP payload configurations exceeds the available PT space
      within an RTP session, there is a need for a way to represent the
      additional restrictions on payload configurations and effectively map an
      RTP stream to its corresponding restrictions. This issue is exacerbated
      by the increase in techniques -- such as simulcast and layered codecs --
      that introduce additional streams into RTP sessions.</t>
      <t indent="0" pn="section-2-5">This specification defines a new SDP framework for restricting source RTP
streams (Section 2.1.10 of <xref target="RFC7656" format="default" sectionFormat="of" derivedContent="RFC7656"/>), along with
the SDP attributes to restrict payload formats in a codec-agnostic way.
This framework can be thought of as a complementary extension to the way
the media format parameters are specified in SDP today, via the "a=fmtp"
attribute.</t>
      <t indent="0" pn="section-2-6">The additional restrictions on individual streams are indicated with a new
"a=rid" ("restriction identifier") SDP attribute. Note that the restrictions communicated via this
attribute only serve to further restrict the parameters that are established
on a PT format. They do not relax any restrictions imposed by other mechanisms.</t>
      <t indent="0" pn="section-2-7">This specification makes use of the RTP Stream Identifier Source Description
(SDES) RTCP item defined in <xref target="RFC8852" format="default" sectionFormat="of" derivedContent="RFC8852"/>  to provide correlation
between the RTP packets and their format specification in the SDP.</t>
      <t indent="0" pn="section-2-8">As described in <xref target="sec-rid_unaware" format="default" sectionFormat="of" derivedContent="Section 6.2.1"/>, this mechanism achieves backwards
compatibility via the normal SDP processing rules, which require unknown "a="
lines to be ignored. This means that implementations need to be prepared
to handle successful offers and answers from other implementations that
neither indicate nor honor the restrictions requested by this mechanism.</t>
      <t indent="0" pn="section-2-9">Further, as described in <xref target="sec-sdp_o_a" format="default" sectionFormat="of" derivedContent="Section 6"/> and its subsections, this mechanism
achieves extensibility by: (a) having offerers include all supported
restrictions in their offer, and (b) having answerers ignore "a=rid" lines that
specify unknown restrictions.</t>
    </section>
    <section anchor="key-words-for-requirements" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-key-words-for-requirements">Key Words for Requirements</name>
      <t indent="0" pn="section-3-1">
    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 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
      </t>
    </section>
    <section anchor="sec-rid_attribute" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-sdp-arid-media-level-attrib">SDP "a=rid" Media Level Attribute</name>
      <t indent="0" pn="section-4-1">This section defines new SDP media-level attribute <xref target="RFC4566" format="default" sectionFormat="of" derivedContent="RFC4566"/>, "a=rid",
used to communicate a set of restrictions to be
applied to an identified RTP stream.  Roughly speaking, this attribute takes
the following form (see <xref target="sec-abnf" format="default" sectionFormat="of" derivedContent="Section 10"/> for a
formal definition):</t>
      <sourcecode type="sdp" markers="false" pn="section-4-2">
a=rid:&lt;rid-id&gt; &lt;direction&gt; [pt=&lt;fmt-list&gt;;]&lt;restriction&gt;=&lt;value&gt;...
</sourcecode>
      <t indent="0" pn="section-4-3">An "a=rid" SDP media attribute specifies restrictions defining a unique
RTP payload configuration identified via the "rid-id" field. This
value binds the restriction to the RTP stream identified by its RTP
Stream Identifier Source Description (SDES) item <xref target="RFC8852" format="default" sectionFormat="of" derivedContent="RFC8852"/>.
Implementations that use the "a=rid" parameter in SDP <bcp14>MUST</bcp14> support
the RtpStreamId SDES item described in <xref target="RFC8852" format="default" sectionFormat="of" derivedContent="RFC8852"/>. Such
implementations <bcp14>MUST</bcp14> send that SDES item for all streams in an SDP media description
("m=") that have "a=rid" lines remaining after applying the rules in
<xref target="sec-sdp_o_a" format="default" sectionFormat="of" derivedContent="Section 6"/> and its subsections.</t>
      <t indent="0" pn="section-4-4">Implementations that use the "a=rid" parameter in SDP and make use of
redundancy RTP streams <xref target="RFC7656" format="default" sectionFormat="of" derivedContent="RFC7656"/> -- e.g., RTP RTX
<xref target="RFC4588" format="default" sectionFormat="of" derivedContent="RFC4588"/> or Forward Error Correction (FEC) <xref target="RFC5109" format="default" sectionFormat="of" derivedContent="RFC5109"/> -- for any of the
source RTP streams that have "a=rid" lines remaining
after applying the rules in <xref target="sec-sdp_o_a" format="default" sectionFormat="of" derivedContent="Section 6"/> and its subsections <bcp14>MUST</bcp14>
support the RepairedRtpStreamId SDES item described in
<xref target="RFC8852" format="default" sectionFormat="of" derivedContent="RFC8852"/> for those redundancy RTP streams. RepairedRtpStreamId
<bcp14>MUST</bcp14> be used for redundancy RTP streams to which it can be applied.

Use of RepairedRtpStreamId is not applicable for
redundancy formats that directly associate RTP streams
through shared synchronization sources (SSRCs) -- for example, <xref target="RFC8627" format="default" sectionFormat="of" derivedContent="RFC8627"/> --
or other cases that RepairedRtpStreamId cannot support, such as referencing
multiple source streams.</t>
      <t indent="0" pn="section-4-5">RepairedRtpStreamId is used to provide the binding between the redundancy RTP
stream and its source RTP stream by setting the RepairedRtpStreamId value for
the redundancy RTP stream to the RtpStreamId value of the source RTP stream.
The redundancy RTP stream <bcp14>MAY</bcp14> (but need not) have an "a=rid" line of its own,
in which case the RtpStreamId SDES item value will be different from the
corresponding source RTP stream.</t>
      <t indent="0" pn="section-4-6">It is important to note that this indirection may result in the temporary
inability to correctly associate source and redundancy data when the SSRC
associated with the RtpStreamId or RepairedRtpStreamId is dynamically changed
during the RTP session.  This can be avoided if all RTP packets, source and
repair, include their RtpStreamId or RepairedRtpStreamId,
respectively, after the change.  To maximize the probability of reception and utility of
redundancy information after such a change, all the source packets referenced
by the first several repair packets <bcp14>SHOULD</bcp14> include such information.  It is
<bcp14>RECOMMENDED</bcp14> that the number of such packets is large enough to give a high
probability of actual updated association. Section 4.1.1 of <xref target="RFC8285" format="default" sectionFormat="of" derivedContent="RFC8285"/>
provides relevant guidance for RTP header extension transmission
considerations.  Alternatively, to avoid this issue, redundancy mechanisms
that directly reference its source data may be used, such as
<xref target="RFC8627" format="default" sectionFormat="of" derivedContent="RFC8627"/>.</t>
      <t indent="0" pn="section-4-7">The "direction" field identifies the direction of the RTP stream packets to
which the indicated restrictions are applied. It may be either "send" or
"recv". Note that these restriction directions are expressed independently of
any "inactive", "sendonly", "recvonly", or "sendrecv" attributes associated
with the media section.  It is, for example, valid to indicate "recv"
restrictions on a "sendonly" stream; those restrictions would apply if, at a
future point in time, the stream were changed to "sendrecv" or "recvonly".</t>
      <t indent="0" pn="section-4-8">The optional "pt=&lt;fmt-list&gt;" lists one or more PT values that can be used
in the associated RTP stream. If the "a=rid" attribute contains
no "pt", then any of the PT values specified in the corresponding "m="
line may be used.</t>
      <t indent="0" pn="section-4-9">The list of zero or more codec-agnostic restrictions
(<xref target="sec-rid_level_restrictions" format="default" sectionFormat="of" derivedContent="Section 5"/>) describes the restrictions that the
corresponding RTP stream will conform to.</t>
      <t indent="0" pn="section-4-10">This framework <bcp14>MAY</bcp14> be used in combination with the "a=fmtp" SDP attribute
for describing the media format parameters for a given RTP payload type.  In
such scenarios, the "a=rid" restrictions (<xref target="sec-rid_level_restrictions" format="default" sectionFormat="of" derivedContent="Section 5"/>)
further restrict the equivalent "a=fmtp" attributes.</t>
      <t indent="0" pn="section-4-11">A given SDP media description <bcp14>MAY</bcp14> have zero or more "a=rid" lines describing
various possible RTP payload configurations. A given "rid-id" <bcp14>MUST NOT</bcp14>
be repeated in a given media description ("m=" section).</t>
      <t indent="0" pn="section-4-12">The "a=rid" media attribute <bcp14>MAY</bcp14> be used for any RTP-based media transport.  It
is not defined for other transports, although other documents may extend its
semantics for such transports.</t>
      <t indent="0" pn="section-4-13">Though the restrictions specified by the "rid" restrictions follow a
syntax similar to session-level and media-level parameters, they are defined
independently.  All "rid" restrictions <bcp14>MUST</bcp14> be registered with IANA, using
the registry defined in <xref target="sec-iana" format="default" sectionFormat="of" derivedContent="Section 12"/>.</t>
      <t indent="0" pn="section-4-14"><xref target="sec-abnf" format="default" sectionFormat="of" derivedContent="Section 10"/> gives a formal Augmented Backus-Naur Form (ABNF) <xref target="RFC5234" format="default" sectionFormat="of" derivedContent="RFC5234"/>
grammar for the "rid" attribute. The "a=rid" media attribute is not dependent
on charset.</t>
    </section>
    <section anchor="sec-rid_level_restrictions" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-arid-restrictions">"a=rid" Restrictions</name>
      <t indent="0" pn="section-5-1">
This section defines the "a=rid" restrictions that can be used to restrict the
RTP payload encoding format in a codec-agnostic way. Please also see 
the preceding section for a description of how the "pt" parameter is used.
      </t>
      <t indent="0" pn="section-5-2">The following restrictions are intended to apply to video codecs in a
codec-independent fashion.</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5-3">
        <li pn="section-5-3.1">
          <strong>max-width</strong>, for spatial resolution in pixels.  In the case that
  stream-orientation signaling is used to modify the intended display
  orientation, this attribute refers to the width of the stream when a
  rotation of zero degrees is encoded.</li>
        <li pn="section-5-3.2">
          <strong>max-height</strong>, for spatial resolution in pixels.  In the case that
  stream-orientation signaling is used to modify the intended display
  orientation,
this attribute refers to the height of the stream when a rotation of zero
degrees is encoded.</li>
        <li pn="section-5-3.3">
          <strong>max-fps</strong>, for frame rate in frames per second.  For encoders that do not use
a fixed frame rate for encoding, this value is used to restrict the minimum
amount of time between frames: the time between any two consecutive frames
<bcp14>SHOULD NOT</bcp14> be less than 1/max-fps seconds.</li>
        <li pn="section-5-3.4">
          <strong>max-fs</strong>, for frame size in pixels per frame. This is the product of frame
width and frame height, in pixels, for rectangular frames.</li>
        <li pn="section-5-3.5">
          <strong>max-br</strong>, for bitrate in bits per second.  The restriction applies to the
media payload only and does not include overhead introduced by other layers
(e.g., RTP, UDP, IP, or Ethernet).  The exact means of keeping within this
limit are left up to the implementation, and instantaneous excursions
outside the limit are permissible. For any given one-second sliding window,
however, the total number of bits in the payload portion of RTP <bcp14>SHOULD NOT</bcp14>
exceed the value specified in "max-br."</li>
        <li pn="section-5-3.6">
          <strong>max-pps</strong>, for pixel rate in pixels per second.  This value <bcp14>SHOULD</bcp14> be handled
identically to max-fps, after performing the following conversion: max-fps =
max-pps / (width * height). If the stream resolution changes, this value is
recalculated. Due to this recalculation, excursions outside the specified
maximum are possible near resolution-change boundaries.</li>
        <li pn="section-5-3.7">
          <strong>max-bpp</strong>, for maximum number of bits per pixel, calculated as an average of
all samples of any given coded picture. This is expressed as
a floating point value, with an allowed range of 0.0001 to 48.0. These
values <bcp14>MUST NOT</bcp14> be encoded with more than four digits to the right of the
decimal point.</li>
        <li pn="section-5-3.8">
          <strong>depend</strong>, to identify other streams that the stream depends on. The value
is a comma-separated list of rid-ids. These rid-ids identify RTP streams
that this stream depends on in order to allow for proper interpretation.
The mechanism defined in this document allows for such dependencies
to be expressed only when the streams are in the same media section.</li>
      </ul>
      <t indent="0" pn="section-5-4">All the restrictions are optional and subject to negotiation based on the
SDP offer/answer rules described in <xref target="sec-sdp_o_a" format="default" sectionFormat="of" derivedContent="Section 6"/>.</t>
      <t indent="0" pn="section-5-5">This list is intended to be an initial set of restrictions. Future documents
may define additional restrictions; see <xref target="sec-iana_rid" format="default" sectionFormat="of" derivedContent="Section 12.2"/>.  While this document
does not define restrictions for audio codecs or any media types other than
video, there is no reason such
restrictions should be precluded from definition and registration by other
documents.</t>
      <t indent="0" pn="section-5-6"><xref target="sec-abnf" format="default" sectionFormat="of" derivedContent="Section 10"/> provides formal Augmented Backus-Naur Form (ABNF) <xref target="RFC5234" format="default" sectionFormat="of" derivedContent="RFC5234"/>
grammar for each of the "a=rid" restrictions defined in this section.</t>
    </section>
    <section anchor="sec-sdp_o_a" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-sdp-offer-answer-procedures">SDP Offer/Answer Procedures</name>
      <t indent="0" pn="section-6-1">This section describes the SDP offer/answer procedures <xref target="RFC3264" format="default" sectionFormat="of" derivedContent="RFC3264"/> when
using this framework.</t>
      <t indent="0" pn="section-6-2">Note that "rid-id" values are only required to be unique within a
media section ("m=" line); they do not necessarily need to be unique within an
entire RTP session. In traditional usage, each media section is sent on its
own unique 5-tuple (that is: combination of sending address, sending port,
receiving address, receiving port, and transport protocol), which provides an
unambiguous scope. 

Similarly, when using BUNDLE <xref target="RFC8843" format="default" sectionFormat="of" derivedContent="RFC8843"/>,
Media Identification (MID) values associate RTP streams
uniquely to a single media description.

 When restriction identifier (RID) is used with the BUNDLE
mechanism, streams will be associated with both MID and RID SDES items.</t>
      <section anchor="sec-gen_offer" numbered="true" toc="include" removeInRFC="false" pn="section-6.1">
        <name slugifiedName="name-generating-the-initial-sdp-">Generating the Initial SDP Offer</name>
        <t indent="0" pn="section-6.1-1">For each RTP media description in the offer, the offerer <bcp14>MAY</bcp14> choose to include one
or more "a=rid" lines to specify a configuration profile for the given set of
RTP payload types.</t>
        <t indent="0" pn="section-6.1-2">In order to construct a given "a=rid" line, the offerer must follow these
steps:</t>
        <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-6.1-3">
          <li pn="section-6.1-3.1" derivedCounter="1.">It <bcp14>MUST</bcp14> generate a "rid-id" that is unique within a media
description.</li>
          <li pn="section-6.1-3.2" derivedCounter="2.">It <bcp14>MUST</bcp14> set the direction for the "rid-id" to one of
"send" or "recv".</li>
          <li pn="section-6.1-3.3" derivedCounter="3.">It <bcp14>MAY</bcp14> include a listing of SDP media formats (usually corresponding to RTP
payload types) allowed to appear in the RTP stream. Any payload type
chosen <bcp14>MUST</bcp14> be a valid payload type for the media section (that is, it must
be listed on the "m=" line).  The order of the listed formats is
significant; the alternatives are listed from (left) most preferred to
(right) least preferred.  When using RID, this preference overrides the
normal codec preference as expressed by format type ordering on the
"m=" line, using regular SDP rules.</li>
          <li pn="section-6.1-3.4" derivedCounter="4.">The offerer then chooses zero or more "a=rid" restrictions
(<xref target="sec-rid_level_restrictions" format="default" sectionFormat="of" derivedContent="Section 5"/>) to be applied to the RTP stream and
adds them to the "a=rid" line.</li>
          <li pn="section-6.1-3.5" derivedCounter="5.">If the offerer wishes the answerer to have the ability to specify a
restriction but does not wish to set a value itself, it includes the
name of the restriction in the "a=rid" line, but without any indicated
value.</li>
        </ol>
        <t indent="0" pn="section-6.1-4">Note: If an "a=fmtp" attribute is also used to provide media-format-specific
parameters, then the "a=rid" restrictions will further restrict the
equivalent "a=fmtp" parameters for the given payload type for the specified
RTP stream.</t>
        <t indent="0" pn="section-6.1-5">If a given codec would require an "a=fmtp" line when used without "a=rid", then
the offer <bcp14>MUST</bcp14> include a valid corresponding "a=fmtp" line even when using
"a=rid".</t>
      </section>
      <section anchor="answerer-processing-the-sdp-offer" numbered="true" toc="include" removeInRFC="false" pn="section-6.2">
        <name slugifiedName="name-answerer-processing-the-sdp">Answerer Processing the SDP Offer</name>
        <section anchor="sec-rid_unaware" numbered="true" toc="include" removeInRFC="false" pn="section-6.2.1">
          <name slugifiedName="name-arid-unaware-answerer">"a=rid"-Unaware Answerer</name>
          <t indent="0" pn="section-6.2.1-1">If the receiver doesn't support the framework defined in this
specification, the entire "a=rid" line is ignored following the standard
offer/answer rules <xref target="RFC3264" format="default" sectionFormat="of" derivedContent="RFC3264"/>.</t>
          <t indent="0" pn="section-6.2.1-2"><xref target="sec-gen_offer" format="default" sectionFormat="of" derivedContent="Section 6.1"/> requires the offer to include a valid "a=fmtp" line
for any media formats that otherwise require it (in other words, the "a=rid"
line cannot be used to replace "a=fmtp" configuration). As a result,
ignoring the "a=rid" line is always guaranteed to result in a valid
session description.</t>
        </section>
        <section anchor="sec-rid_offer_recv" numbered="true" toc="include" removeInRFC="false" pn="section-6.2.2">
          <name slugifiedName="name-arid-aware-answerer">"a=rid"-Aware Answerer</name>
          <t indent="0" pn="section-6.2.2-1">If the answerer supports the "a=rid" attribute, the following verification
steps are executed, in order, for each "a=rid" line in a received offer:</t>
          <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-6.2.2-2">
            <li pn="section-6.2.2-2.1" derivedCounter="1.">The answerer ensures that the "a=rid" line is syntactically well
formed. In the case of a syntax error, the "a=rid" line is discarded.</li>
            <li pn="section-6.2.2-2.2" derivedCounter="2.">The answerer extracts the rid-id from the "a=rid" line and verifies its
uniqueness within a media section.  In the case of a duplicate, the entire
"a=rid" line, and all "a=rid" lines with rid-ids that duplicate this line,
are discarded and <bcp14>MUST NOT</bcp14> be included in the SDP answer.</li>
            <li pn="section-6.2.2-2.3" derivedCounter="3.">If the "a=rid" line contains a "pt=", the list of payload types
is verified against the list of valid payload types for the media section
(that is, those listed on the "m=" line). Any PT missing from the "m=" line
is discarded from the set of values in the "pt=". If no values are left
in the "pt=" parameter after this processing, then the "a=rid" line is discarded.</li>
            <li pn="section-6.2.2-2.4" derivedCounter="4.">If the "direction" field is "recv", the answerer ensures that the specified
"a=rid" restrictions are supported.  In the case of an unsupported
restriction, the "a=rid" line is discarded.</li>
            <li pn="section-6.2.2-2.5" derivedCounter="5.">If the "depend" restriction is included, the answerer <bcp14>MUST</bcp14> make
sure that the listed rid-ids unambiguously match the
rid-ids in the media description.  Any "depend" "a=rid" lines that do not are
discarded.</li>
            <li pn="section-6.2.2-2.6" derivedCounter="6.">The answerer verifies that the restrictions are consistent
with at least one of the codecs to be used with the RTP stream. If the
"a=rid" line contains a "pt=", it contains the list of such
codecs; otherwise, the list of such codecs is taken from the associated
"m=" line.  See <xref target="sec-feature_interactions" format="default" sectionFormat="of" derivedContent="Section 8"/> for more detail. If the
"a=rid" restrictions are incompatible with the other codec properties
for all codecs, then the "a=rid" line is discarded.</li>
          </ol>
          <t indent="0" pn="section-6.2.2-3">Note that the answerer does not need to understand every restriction present
in a "send" line: if a stream sender restricts the stream in a way that the
receiver does not understand, this causes no issues with interoperability.</t>
        </section>
      </section>
      <section anchor="sec-rid_answer_send" numbered="true" toc="include" removeInRFC="false" pn="section-6.3">
        <name slugifiedName="name-generating-the-sdp-answer">Generating the SDP Answer</name>
        <t indent="0" pn="section-6.3-1">Having performed verification of the SDP offer as described in
<xref target="sec-rid_offer_recv" format="default" sectionFormat="of" derivedContent="Section 6.2.2"/>, the answerer shall perform the following steps to
generate the SDP answer.</t>
        <t indent="0" pn="section-6.3-2">For each "a=rid" line that has not been discarded by previous processing:</t>
        <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-6.3-3">
          <li pn="section-6.3-3.1" derivedCounter="1.">The value of the "direction" field is reversed: "send" is changed
to "recv", and "recv" is changed to "send".</li>
          <li pn="section-6.3-3.2" derivedCounter="2.">The answerer <bcp14>MAY</bcp14> choose to modify specific "a=rid" restriction values in
the answer SDP. In such a case, the modified value <bcp14>MUST</bcp14> be more restrictive
than the ones specified in the offer.  The answer <bcp14>MUST NOT</bcp14> include any
restrictions that were not present in the offer.</li>
          <li pn="section-6.3-3.3" derivedCounter="3.">The answerer <bcp14>MUST NOT</bcp14> modify the "rid-id" present in the offer.</li>
          <li pn="section-6.3-3.4" derivedCounter="4.">If the "a=rid" line contains a "pt=", the answerer is allowed to
discard one or more media formats from a given "a=rid" line. If the answerer
chooses to discard all the media formats from an "a=rid" line, the
answerer <bcp14>MUST</bcp14> discard the entire "a=rid" line. If the offer did not contain
a "pt=" for a given "a=rid" line, then the answer <bcp14>MUST NOT</bcp14>
contain a "pt=" in the corresponding line.</li>
          <li pn="section-6.3-3.5" derivedCounter="5.">In cases where the answerer is unable to support the payload configuration
specified in a given "a=rid" line with a direction of "recv" in the offer,
the answerer <bcp14>MUST</bcp14> discard the corresponding "a=rid" line.  This includes
situations in which the answerer does not understand one or more of the
restrictions in an "a=rid" line with a direction of "recv".</li>
        </ol>
        <t indent="0" pn="section-6.3-4">Note: In the case that the answerer uses different PT values to represent a
codec than the offerer did, the "a=rid" values in the answer use the PT values
that are present in its answer.</t>
      </section>
      <section anchor="sec-rid_answer_recv" numbered="true" toc="include" removeInRFC="false" pn="section-6.4">
        <name slugifiedName="name-offerer-processing-of-the-s">Offerer Processing of the SDP Answer</name>
        <t indent="0" pn="section-6.4-1">The offerer <bcp14>SHALL</bcp14> follow these steps when processing the answer:</t>
        <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-6.4-2">
          <li pn="section-6.4-2.1" derivedCounter="1.">The offerer matches the "a=rid" line in the answer to the "a=rid" line
in the offer using the "rid-id". If no matching line can be located
in the offer, the "a=rid" line is ignored.</li>
          <li pn="section-6.4-2.2" derivedCounter="2.">If the answer contains any restrictions that were not present in the offer,
then the offerer <bcp14>SHALL</bcp14> discard the "a=rid" line.</li>
          <li pn="section-6.4-2.3" derivedCounter="3.">If the restrictions have been changed between the offer and the
answer, the offerer <bcp14>MUST</bcp14> ensure that the modifications are more restrictive
than they were in the original offer and that they can be supported; if
not, the offerer <bcp14>SHALL</bcp14> discard the "a=rid" line.</li>
          <li pn="section-6.4-2.4" derivedCounter="4.">If the "a=rid" line in the answer contains a "pt=" but the
offer did not, the offerer <bcp14>SHALL</bcp14> discard the "a=rid" line.</li>
          <li pn="section-6.4-2.5" derivedCounter="5.">If the "a=rid" line in the answer contains a "pt=" and the
offer did as well, the offerer verifies that the list of payload types is a
subset of those sent in the corresponding "a=rid" line in the offer. Note
that this matching must be performed semantically rather than on literal PT
values, as the remote end may not be using symmetric PTs. For the purpose
of this comparison: for each PT listed on the "a=rid" line in the answer,
the offerer looks up the corresponding "a=rtpmap" and "a=fmtp" lines in the
answer.  It then searches the list of "pt=" values indicated in the offer
and attempts to find one with an equivalent set of "a=rtpmap" and "a=fmtp"
lines in the offer. If all PTs in the answer can be matched, then the "pt="
values pass validation; otherwise, it fails.  If this validation fails, the
offerer <bcp14>SHALL</bcp14> discard the "a=rid" line. Note that this semantic comparison
necessarily requires an understanding of the meaning of codec parameters,
rather than a rote byte-wise comparison of their values.</li>
          <li pn="section-6.4-2.6" derivedCounter="6.">If the "a=rid" line contains a "pt=", the offerer verifies that
the attribute values provided in the "a=rid" attributes are consistent
with the corresponding codecs and their other parameters. See
<xref target="sec-feature_interactions" format="default" sectionFormat="of" derivedContent="Section 8"/> for more detail. If the "a=rid" restrictions
are incompatible with the other codec properties, then the offerer
<bcp14>SHALL</bcp14> discard the "a=rid" line.</li>
          <li pn="section-6.4-2.7" derivedCounter="7.">The offerer verifies that the restrictions are consistent
with at least one of the codecs to be used with the RTP stream. If the
"a=rid" line contains a "pt=", it contains the list of such
codecs; otherwise, the list of such codecs is taken from the associated
"m=" line.  See <xref target="sec-feature_interactions" format="default" sectionFormat="of" derivedContent="Section 8"/> for more detail. If the
"a=rid" restrictions are incompatible with the other codec properties
for all codecs, then the offerer <bcp14>SHALL</bcp14> discard the "a=rid" line.</li>
        </ol>
        <t indent="0" pn="section-6.4-3">Any "a=rid" line present in the offer that was not matched by step 1 above
has been discarded by the answerer and does not form part of the negotiated
restrictions on an RTP stream. The offerer <bcp14>MAY</bcp14> still apply any restrictions
it indicated in an "a=rid" line with a direction field of "send", but
it is not required to do so.</t>
        <t indent="0" pn="section-6.4-4">It is important to note that there are several ways in which an offer can
contain a media section with "a=rid" lines, although the corresponding media
section in the response does not. This includes situations in which the
answerer does not support "a=rid" at all or does not support the indicated
restrictions. Under such circumstances, the offerer <bcp14>MUST</bcp14> be prepared to
receive a media stream to which no restrictions have been applied.</t>
      </section>
      <section anchor="modifying-the-session" numbered="true" toc="include" removeInRFC="false" pn="section-6.5">
        <name slugifiedName="name-modifying-the-session">Modifying the Session</name>
        <t indent="0" pn="section-6.5-1">Offers and answers inside an existing session follow the rules for initial
session negotiation.  Such an offer <bcp14>MAY</bcp14> propose a change in the number of RIDs
in use. To avoid race conditions with media, any RIDs with proposed changes
<bcp14>SHOULD</bcp14> use a new ID rather than reusing one from the previous offer/answer
exchange. RIDs without proposed changes <bcp14>SHOULD</bcp14> reuse the ID from the previous
exchange.</t>
      </section>
    </section>
    <section anchor="sec-declarative_sdp" numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-use-with-declarative-sdp">Use with Declarative SDP</name>
      <t indent="0" pn="section-7-1">This document does not define the use of a RID in declarative SDP. If
concrete use cases for RID in declarative SDP use are identified
in the future, we expect that additional specifications will address
such use.</t>
    </section>
    <section anchor="sec-feature_interactions" numbered="true" toc="include" removeInRFC="false" pn="section-8">
      <name slugifiedName="name-interaction-with-other-tech">Interaction with Other Techniques</name>
      <t indent="0" pn="section-8-1">Historically, a number of other approaches have been defined that allow
restricting media streams via SDP. These include:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-8-2">
        <li pn="section-8-2.1">Codec-specific configuration set via format parameters ("a=fmtp") -- for
example, the H.264 "max-fs" format parameter <xref target="RFC6184" format="default" sectionFormat="of" derivedContent="RFC6184"/></li>
        <li pn="section-8-2.2">Size restrictions imposed by the "a=imageattr" attribute
<xref target="RFC6236" format="default" sectionFormat="of" derivedContent="RFC6236"/></li>
      </ul>
      <t indent="0" pn="section-8-3">When the mechanism described in this document is used in conjunction with
these other restricting mechanisms, it is intended to impose additional
restrictions beyond those communicated in other techniques.</t>
      <t indent="0" pn="section-8-4">In an offer, this means that "a=rid" lines, when combined with other
restrictions on the media stream, are expected to result in a non-empty intersection.
For example, if image attributes are used to indicate that a PT has a minimum
width of 640, then specification of "max-width=320" in an "a=rid" line that is
then applied to that PT is nonsensical. According to the rules of
<xref target="sec-rid_offer_recv" format="default" sectionFormat="of" derivedContent="Section 6.2.2"/>, this will result in the corresponding "a=rid" line
being ignored by the recipient.</t>
      <t indent="0" pn="section-8-5">In an answer, the "a=rid" lines, when combined with the other
restrictions on the media stream, are also expected to result in a non-empty
intersection. If the implementation generating an answer wishes to restrict a
property of the stream below that which would be allowed by other parameters
(e.g., those specified in "a=fmtp" or "a=imageattr"), its only recourse is to
discard the "a=rid" line altogether, as described in <xref target="sec-rid_answer_send" format="default" sectionFormat="of" derivedContent="Section 6.3"/>.
If it instead attempts to restrict the stream beyond what is allowed by other
mechanisms, then the offerer will ignore the corresponding "a=rid" line, as
described in <xref target="sec-rid_answer_recv" format="default" sectionFormat="of" derivedContent="Section 6.4"/>.</t>
      <t indent="0" pn="section-8-6">The following subsections demonstrate these interactions using commonly used
video codecs. These descriptions are illustrative of the interaction principles
outlined above and are not normative.</t>
      <section anchor="interaction-with-vp8-format-parameters" numbered="true" toc="include" removeInRFC="false" pn="section-8.1">
        <name slugifiedName="name-interaction-with-vp8-format">Interaction with VP8 Format Parameters</name>
        <t indent="0" pn="section-8.1-1"><xref target="RFC7741" format="default" sectionFormat="of" derivedContent="RFC7741"/> defines two format parameters for the VP8 codec.
Both correspond to restrictions on receiver capabilities and never
indicate sending restrictions.</t>
        <section anchor="max-fr-maximum-framerate" numbered="true" toc="include" removeInRFC="false" pn="section-8.1.1">
          <name slugifiedName="name-max-fr-maximum-frame-rate">max-fr - Maximum Frame Rate</name>
          <t indent="0" pn="section-8.1.1-1">The VP8 "max-fr" format parameter corresponds to the "max-fps" restriction
defined in this specification.  If an RTP sender is generating a stream using
a format defined with this format parameter, and the sending restrictions
defined via "a=rid" include a "max-fps" parameter, then the sent stream
will conform to the smaller of the two values.</t>
        </section>
        <section anchor="max-fs-maximum-framesize-in-vp8-macroblocks" numbered="true" toc="include" removeInRFC="false" pn="section-8.1.2">
          <name slugifiedName="name-max-fs-maximum-frame-size-i">max-fs - Maximum Frame Size, in VP8 Macroblocks</name>
          <t indent="0" pn="section-8.1.2-1">The VP8 "max-fs" format parameter corresponds to the "max-fs"
restriction defined in this document, by way of a conversion factor of the
number of pixels per macroblock (typically 256).  If an RTP sender is
generating a stream using a format defined with this format parameter, and
the sending restrictions defined via "a=rid" include a "max-fs" parameter,
then the sent stream will conform to the smaller of the two values;
that is, the number of pixels per frame will not exceed:</t>
          <sourcecode markers="false" pn="section-8.1.2-2">
  min(rid_max_fs, fmtp_max_fs * macroblock_size)
</sourcecode>
          <t indent="0" pn="section-8.1.2-3">This fmtp parameter also has bearing on the
max-height and max-width parameters.  

<xref section="6.1" sectionFormat="of" target="RFC7741" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7741#section-6.1" derivedContent="RFC7741"/> requires that the width and height of the frame in
macroblocks be less than int(sqrt(fmtp_max_fs * 8)).
Accordingly, the maximum width of a transmitted stream will be limited to:</t>
          <sourcecode markers="false" pn="section-8.1.2-4">
  min(rid_max_width, int(sqrt(fmtp_max_fs * 8)) * macroblock_width)
</sourcecode>
          <t indent="0" pn="section-8.1.2-5">Similarly, the stream's height will be limited to:</t>
          <sourcecode markers="false" pn="section-8.1.2-6">
  min(rid_max_height, int(sqrt(fmtp_max_fs * 8)) * macroblock_height)
</sourcecode>
        </section>
      </section>
      <section anchor="interaction-with-h264-format-parameters" numbered="true" toc="include" removeInRFC="false" pn="section-8.2">
        <name slugifiedName="name-interaction-with-h264-forma">Interaction with H.264 Format Parameters</name>
        <t indent="0" pn="section-8.2-1"><xref target="RFC6184" format="default" sectionFormat="of" derivedContent="RFC6184"/> defines format parameters for the H.264 video codec. The majority
of these parameters do not correspond to codec-independent restrictions:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-8.2-2">
          <li pn="section-8.2-2.1">deint-buf-cap</li>
          <li pn="section-8.2-2.2">in-band-parameter-sets</li>
          <li pn="section-8.2-2.3">level-asymmetry-allowed</li>
          <li pn="section-8.2-2.4">max-rcmd-nalu-size</li>
          <li pn="section-8.2-2.5">max-cpb</li>
          <li pn="section-8.2-2.6">max-dpb</li>
          <li pn="section-8.2-2.7">packetization-mode</li>
          <li pn="section-8.2-2.8">redundant-pic-cap</li>
          <li pn="section-8.2-2.9">sar-supported</li>
          <li pn="section-8.2-2.10">sar-understood</li>
          <li pn="section-8.2-2.11">sprop-deint-buf-req</li>
          <li pn="section-8.2-2.12">sprop-init-buf-time</li>
          <li pn="section-8.2-2.13">sprop-interleaving-depth</li>
          <li pn="section-8.2-2.14">sprop-level-parameter-sets</li>
          <li pn="section-8.2-2.15">sprop-max-don-diff</li>
          <li pn="section-8.2-2.16">sprop-parameter-sets</li>
          <li pn="section-8.2-2.17">use-level-src-parameter-sets</li>
        </ul>
        <t indent="0" pn="section-8.2-3">Note that the max-cpb and max-dpb format parameters for H.264 correspond to
restrictions on the stream, but they are specific to the way the H.264 codec
operates, and do not have codec-independent equivalents.</t>
        <t indent="0" pn="section-8.2-4">The <xref target="RFC6184" format="default" sectionFormat="of" derivedContent="RFC6184"/> codec format parameters covered in the following sections
correspond to restrictions on receiver capabilities and never indicate
sending restrictions.</t>
        <section anchor="profile-level-id-and-max-recv-level-negotiated-sub-profile" numbered="true" toc="include" removeInRFC="false" pn="section-8.2.1">
          <name slugifiedName="name-profile-level-id-and-max-re">profile-level-id and max-recv-level - Negotiated Subprofile</name>
          <t indent="0" pn="section-8.2.1-1">These parameters include a "level" indicator, which acts as an index
into Table A-1 of <xref target="H264" format="default" sectionFormat="of" derivedContent="H264"/>. This table contains a number of parameters,
several of which correspond to the restrictions defined in this
document. <xref target="RFC6184" format="default" sectionFormat="of" derivedContent="RFC6184"/> also defines format parameters for the H.264
codec that may increase the maximum values indicated by the negotiated
level. The following sections describe the interaction between these
parameters and the restrictions defined by this document. In all cases,
the H.264 parameters being discussed are the maximum of those indicated
by <xref target="H264" format="default" sectionFormat="of" derivedContent="H264"/> Table A-1 and those indicated in the corresponding "a=fmtp" line.</t>
        </section>
        <section anchor="max-br-maxbr-maximum-video-bitrate" numbered="true" toc="include" removeInRFC="false" pn="section-8.2.2">
          <name slugifiedName="name-max-br-maxbr-maximum-video-">max-br / MaxBR - Maximum Video Bitrate</name>
          <t indent="0" pn="section-8.2.2-1">The H.264 "MaxBR" parameter (and its equivalent "max-br" format
parameter) corresponds to the "max-bps" restriction
defined in this specification, by way of a conversion factor of 1000
or 1200; see <xref target="RFC6184" format="default" sectionFormat="of" derivedContent="RFC6184"/> for details regarding which factor gets
used under differing circumstances.</t>
          <t indent="0" pn="section-8.2.2-2">If an RTP sender is generating a stream using
a format defined with this format parameter, and the sending restrictions
defined via "a=rid" include a "max-fps" parameter, then the sent stream
will conform to the smaller of the two values -- that is:</t>
          <sourcecode markers="false" pn="section-8.2.2-3">
  min(rid_max_br, h264_MaxBR * conversion_factor)
</sourcecode>
        </section>
        <section anchor="max-fs-maxfs-maximum-framesize-in-h264-macroblocks" numbered="true" toc="include" removeInRFC="false" pn="section-8.2.3">
          <name slugifiedName="name-max-fs-maxfs-maximum-frame-">max-fs / MaxFS - Maximum Frame Size, in H.264 Macroblocks</name>
          <t indent="0" pn="section-8.2.3-1">The H.264 "MaxFs" parameter (and its equivalent "max-fs"
format parameter) corresponds roughly to the "max-fs" restriction
defined in this document, by way of a conversion factor of 256
(the number of pixels per macroblock).</t>
          <t indent="0" pn="section-8.2.3-2">If an RTP sender is generating a stream using
a format defined with this format parameter, and the sending restrictions
defined via "a=rid" include a "max-fs" parameter, then the sent stream
will conform to the smaller of the two values -- that is:</t>
          <sourcecode markers="false" pn="section-8.2.3-3">
  min(rid_max_fs, h264_MaxFs * 256)
</sourcecode>
        </section>
        <section anchor="sec-h264_max_mbps" numbered="true" toc="include" removeInRFC="false" pn="section-8.2.4">
          <name slugifiedName="name-max-mbps-maxmbps-maximum-ma">max-mbps / MaxMBPS - Maximum Macroblock Processing Rate</name>
          <t indent="0" pn="section-8.2.4-1">The H.264 "MaxMBPS" parameter (and its equivalent "max-mbps"
format parameter) corresponds roughly to the "max-pps" restriction
defined in this document, by way of a conversion factor of 256
(the number of pixels per macroblock).</t>
          <t indent="0" pn="section-8.2.4-2">If an RTP sender is generating a stream using
a format defined with this format parameter, and the sending restrictions
defined via "a=rid" include a "max-pps" parameter, then the sent stream
will conform to the smaller of the two values -- that is:</t>
          <sourcecode markers="false" pn="section-8.2.4-3">
  min(rid_max_pps, h264_MaxMBPS * 256)
</sourcecode>
        </section>
        <section anchor="max-smbps-maximum-decoded-picture-buffer" numbered="true" toc="include" removeInRFC="false" pn="section-8.2.5">
          <name slugifiedName="name-max-smbps-maximum-decoded-p">max-smbps - Maximum Decoded Picture Buffer</name>
          <t indent="0" pn="section-8.2.5-1">The H.264 "max-smbps" format parameter operates the same way as the
"max-mbps" format parameter, under the hypothetical assumption that all
macroblocks are static macroblocks. It is handled by applying the
conversion factor described in Section 8.1 of <xref target="RFC6184" format="default" sectionFormat="of" derivedContent="RFC6184"/>, and the
result of this conversion is applied as described in
<xref target="sec-h264_max_mbps" format="default" sectionFormat="of" derivedContent="Section 8.2.4"/>.</t>
        </section>
      </section>
      <section anchor="redundancy-formats-and-payload-type-restrictions" numbered="true" toc="include" removeInRFC="false" pn="section-8.3">
        <name slugifiedName="name-redundancy-formats-and-payl">Redundancy Formats and Payload Type Restrictions</name>
        <t indent="0" pn="section-8.3-1"><xref target="sec-rid_attribute" format="default" sectionFormat="of" derivedContent="Section 4"/> specifies that redundancy formats using redundancy RTP streams bind
the redundancy RTP stream to the source RTP stream with either the
RepairedRtpStreamId SDES item or other mechanisms.  However, there exist
redundancy RTP payload formats that result in the redundancy being included in
the source RTP stream. An example of this is "RTP Payload for Redundant Audio
Data" <xref target="RFC2198" format="default" sectionFormat="of" derivedContent="RFC2198"/>, which encapsulates one source stream with one or more
redundancy streams in the same RTP payload. Formats defining the source and
redundancy encodings as regular RTP payload types require some consideration
for how the "a=rid" restrictions are defined. The "a=rid" line "pt=" parameter
can be used to indicate whether the redundancy RTP payload type and/or the
individual source RTP payload type(s) are part of the restriction.</t>
        <t indent="0" pn="section-8.3-2">Example (SDP excerpt):</t>
        <sourcecode type="sdp" markers="false" pn="section-8.3-3">
   m=audio 49200 RTP/AVP 97 98 99 100 101 102
   a=mid:foo
   a=rtpmap:97 G711/8000
   a=rtpmap:98 LPC/8000
   a=rtpmap:99 OPUS/48000/1
   a=rtpmap:100 RED/8000/1
   a=rtpmap:101 CN/8000
   a=rtpmap:102 telephone-event/8000
   a=fmtp:99 useinbandfec=1; usedtx=0
   a=fmtp:100 97/98
   a=fmtp:102 0-15
   a=ptime:20
   a=maxptime:40
   a=rid:5 send pt=99,102;max-br=64000
   a=rid:6 send pt=100,97,101,102
</sourcecode>
        <t indent="0" pn="section-8.3-4">The RID with ID=6 restricts the payload types for this RID to 100
        (the redundancy format), 97 (G.711), 101 (Comfort Noise), and 102
        (dual-tone multi-frequency (DTMF) tones). This means that RID 6 can
        either contain the Redundant Audio Data (RED) format, encapsulating
        encodings of the source media stream using payload type 97 and 98, 97
        without RED encapsulation, Comfort noise, or DTMF tones.  Payload type
        98 is not included in the RID, and can thus not be sent except as
        redundancy information in RED encapsulation. If 97 were to be excluded
        from the pt parameter, it would instead mean that payload types 97 and
        98 are only allowed via RED encapsulation.</t>
      </section>
    </section>
    <section anchor="format-parameters-for-future-payloads" numbered="true" toc="include" removeInRFC="false" pn="section-9">
      <name slugifiedName="name-format-parameters-for-futur">Format Parameters for Future Payloads</name>
      <t indent="0" pn="section-9-1">Registrations of future RTP payload format specifications that define media
types that have parameters matching the RID restrictions specified in this memo
<bcp14>SHOULD</bcp14> name those parameters in a manner that matches the names of those RID
restrictions and <bcp14>SHOULD</bcp14> explicitly state what media-type parameters are
restricted by what RID restrictions.</t>
    </section>
    <section anchor="sec-abnf" numbered="true" toc="include" removeInRFC="false" pn="section-10">
      <name slugifiedName="name-formal-grammar">Formal Grammar</name>
      <t indent="0" pn="section-10-1">This section gives a formal Augmented Backus-Naur Form (ABNF) <xref target="RFC5234" format="default" sectionFormat="of" derivedContent="RFC5234"/>
grammar, with the case-sensitive extensions described in <xref target="RFC7405" format="default" sectionFormat="of" derivedContent="RFC7405"/>, for each
of the new media and "a=rid" attributes defined in this document.</t>
      <sourcecode type="abnf" markers="false" pn="section-10-2">
rid-syntax        = %s"a=rid:" rid-id SP rid-dir
                    [ rid-pt-param-list / rid-param-list ]

rid-id            = 1*(alpha-numeric / "-" / "_")

alpha-numeric     = &lt; as defined in [RFC4566] &gt;

rid-dir           = %s"send" / %s"recv"

rid-pt-param-list = SP rid-fmt-list *(";" rid-param)

rid-param-list    = SP rid-param *(";" rid-param)

rid-fmt-list      = %s"pt=" fmt *( "," fmt )

fmt               = &lt; as defined in [RFC4566] &gt;

rid-param         = rid-width-param
                    / rid-height-param
                    / rid-fps-param
                    / rid-fs-param
                    / rid-br-param
                    / rid-pps-param
                    / rid-bpp-param
                    / rid-depend-param
                    / rid-param-other

rid-width-param   = %s"max-width" [ "=" int-param-val ]

rid-height-param  = %s"max-height" [ "=" int-param-val ]

rid-fps-param     = %s"max-fps" [ "=" int-param-val ]

rid-fs-param      = %s"max-fs" [ "=" int-param-val ]

rid-br-param      = %s"max-br" [ "=" int-param-val ]

rid-pps-param     = %s"max-pps" [ "=" int-param-val ]

rid-bpp-param     = %s"max-bpp" [ "=" float-param-val ]

rid-depend-param  = %s"depend=" rid-list

rid-param-other   = 1*(alpha-numeric / "-") [ "=" param-val ]

rid-list          = rid-id *( "," rid-id )

int-param-val     = 1*DIGIT

float-param-val   = 1*DIGIT "." 1*DIGIT

param-val         = *(%x20-3A / %x3C-7E)
                    ; Any printable character except semicolon
</sourcecode>
    </section>
    <section anchor="sdp-examples" numbered="true" toc="include" removeInRFC="false" pn="section-11">
      <name slugifiedName="name-sdp-examples">SDP Examples</name>
      <t indent="0" pn="section-11-1">Note: See <xref target="RFC8853" format="default" sectionFormat="of" derivedContent="RFC8853"/> for examples of RID used
in simulcast scenarios.</t>
      <section anchor="many-bundled-streams-using-many-codecs" numbered="true" toc="include" removeInRFC="false" pn="section-11.1">
        <name slugifiedName="name-many-bundled-streams-using-">Many Bundled Streams Using Many Codecs</name>
        <t indent="0" pn="section-11.1-1">In this scenario, the offerer supports the Opus, G.722, G.711, and DTMF audio
codecs and VP8, VP9, H.264 (CBP/CHP, mode 0/1), H.264-SVC (SCBP/SCHP), and
H.265 (MP/M10P) for video. An 8-way video call (to a mixer) is supported (send
1 and receive 7 video streams) by offering 7 video media sections (1 sendrecv
at max resolution and 6 recvonly at smaller resolutions), all bundled on the
same port, using 3 different resolutions.  The resolutions include:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-11.1-2">
          <li pn="section-11.1-2.1">1 receive stream of 720p resolution is offered for the active speaker.</li>
          <li pn="section-11.1-2.2">2 receive streams of 360p resolution are offered for the prior 2 active
speakers.</li>
          <li pn="section-11.1-2.3">4 receive streams of 180p resolution are offered for others in the call.</li>
        </ul>
        <t indent="0" pn="section-11.1-3">NOTE: The SDP given below skips a few lines to
        keep the example short and focused, as indicated by either the "..."
        or the comments inserted.</t>
        <t indent="0" pn="section-11.1-4">The offer for this scenario is shown
        below.</t>
        <sourcecode type="sdp" markers="false" pn="section-11.1-5">
...
m=audio 10000 RTP/SAVPF 96 9 8 0 123
a=rtpmap:96 OPUS/48000
a=rtpmap:9 G722/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:123 telephone-event/8000
a=mid:a1
...
m=video 10000 RTP/SAVPF 98 99 100 101 102 103 104 105 106 107
a=extmap 1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=rtpmap:98 VP8/90000
a=fmtp:98 max-fs=3600; max-fr=30
a=rtpmap:99 VP9/90000
a=fmtp:99 max-fs=3600; max-fr=30
a=rtpmap:100 H264/90000
a=fmtp:100 profile-level-id=42401f; packetization-mode=0
a=rtpmap:101 H264/90000
a=fmtp:101 profile-level-id=42401f; packetization-mode=1
a=rtpmap:102 H264/90000
a=fmtp:102 profile-level-id=640c1f; packetization-mode=0
a=rtpmap:103 H264/90000
a=fmtp:103 profile-level-id=640c1f; packetization-mode=1
a=rtpmap:104 H264-SVC/90000
a=fmtp:104 profile-level-id=530c1f
a=rtpmap:105 H264-SVC/90000
a=fmtp:105 profile-level-id=560c1f
a=rtpmap:106 H265/90000
a=fmtp:106 profile-id=1; level-id=93
a=rtpmap:107 H265/90000
a=fmtp:107 profile-id=2; level-id=93
a=sendrecv
a=mid:v1 (max resolution)
a=rid:1 send max-width=1280;max-height=720;max-fps=30
a=rid:2 recv max-width=1280;max-height=720;max-fps=30
...
m=video 10000 RTP/SAVPF 98 99 100 101 102 103 104 105 106 107
a=extmap 1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
...same rtpmap/fmtp as above...
a=recvonly
a=mid:v2 (medium resolution)
a=rid:3 recv max-width=640;max-height=360;max-fps=15
...
m=video 10000 RTP/SAVPF 98 99 100 101 102 103 104 105 106 107
a=extmap 1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
...same rtpmap/fmtp as above...
a=recvonly
a=mid:v3 (medium resolution)
a=rid:3 recv max-width=640;max-height=360;max-fps=15
...
m=video 10000 RTP/SAVPF 98 99 100 101 102 103 104 105 106 107
a=extmap 1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
...same rtpmap/fmtp as above...
a=recvonly
a=mid:v4 (small resolution)
a=rid:4 recv max-width=320;max-height=180;max-fps=15
...
m=video 10000 RTP/SAVPF 98 99 100 101 102 103 104 105 106 107
a=extmap 1 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
...same rtpmap/fmtp as above...
...same rid:4 as above for mid:v5,v6,v7 (small resolution)...
...
</sourcecode>
      </section>
      <section anchor="scalable-layers" numbered="true" toc="include" removeInRFC="false" pn="section-11.2">
        <name slugifiedName="name-scalable-layers">Scalable Layers</name>
        <t indent="0" pn="section-11.2-1">Adding scalable layers to a session within a multiparty conference gives a
selective forwarding unit (SFU) further flexibility to selectively forward
packets from a source that best match the bandwidth and capabilities of
diverse receivers. Scalable encodings have dependencies between layers, unlike
independent simulcast streams. RIDs can be used to express these dependencies
using the "depend" restriction. In the example below, the highest resolution is
offered to be sent as 2 scalable temporal layers (using 
Multiple RTP Streams on a Single Media Transport (MRST)).
See <xref target="RFC8853" format="default" sectionFormat="of" derivedContent="RFC8853"/> for additional detail about simulcast usage.</t>
        <sourcecode type="sdp" markers="false" pn="section-11.2-2">
Offer:
...
m=audio ...same as previous example ...
...
m=video ...same as previous example ...
...same rtpmap/fmtp as previous example ...
a=sendrecv
a=mid:v1 (max resolution)
a=rid:0 send max-width=1280;max-height=720;max-fps=15
a=rid:1 send max-width=1280;max-height=720;max-fps=30;depend=0
a=rid:2 recv max-width=1280;max-height=720;max-fps=30
a=rid:5 send max-width=640;max-height=360;max-fps=15
a=rid:6 send max-width=320;max-height=180;max-fps=15
a=simulcast: send rid=0;1;5;6 recv rid=2
...
...same m=video sections as previous example for mid:v2-v7...
...
</sourcecode>
      </section>
    </section>
    <section anchor="sec-iana" numbered="true" toc="include" removeInRFC="false" pn="section-12">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-12-1">This specification updates <xref target="RFC4855" format="default" sectionFormat="of" derivedContent="RFC4855"/>
      to give additional guidance on choice of Format Parameter (fmtp) names
      and their relation to RID restrictions.</t>
      <section anchor="new-sdp-media-level-attribute" numbered="true" toc="include" removeInRFC="false" pn="section-12.1">
        <name slugifiedName="name-new-sdp-media-level-attribu">New SDP Media-Level Attribute</name>
        <t indent="0" pn="section-12.1-1">This document defines "rid" as an SDP media-level attribute. This
  attribute has been registered by IANA under "Session Description Protocol
  (SDP) Parameters" under "att-field (media level only)".</t>
        <t indent="0" pn="section-12.1-2">The "rid" attribute is used to identify the properties of an RTP
	stream within an RTP session. Its format is defined in <xref target="sec-abnf" format="default" sectionFormat="of" derivedContent="Section 10"/>.</t>
        <t indent="0" pn="section-12.1-3">The formal registration information for this attribute follows.</t>
        <dl newline="true" indent="3" spacing="normal" pn="section-12.1-4">
          <dt pn="section-12.1-4.1">
	    Contact name, email address, and telephone number
          </dt>
          <dd pn="section-12.1-4.2">IETF MMUSIC Working Group<br/>mmusic@ietf.org<br/>+1 510 492 4080</dd>
          <dt pn="section-12.1-4.3">
	    Attribute name (as it will appear in SDP)
          </dt>
          <dd pn="section-12.1-4.4">
	    rid
	  </dd>
          <dt pn="section-12.1-4.5">
	    Long-form attribute name in English
          </dt>
          <dd pn="section-12.1-4.6">
	    Restriction Identifier
	  </dd>
          <dt pn="section-12.1-4.7">
	    Type of attribute (session level, media level, or both)
          </dt>
          <dd pn="section-12.1-4.8">
	    Media Level
	  </dd>
          <dt pn="section-12.1-4.9">
	    Whether the attribute value is subject to the charset attribute
          </dt>
          <dd pn="section-12.1-4.10">
	    The attribute is not dependent on charset.
	  </dd>
          <dt pn="section-12.1-4.11">
	    A one-paragraph explanation of the purpose of the attribute
          </dt>
          <dd pn="section-12.1-4.12">
	    The "rid" SDP attribute is used to unambiguously identify
	    the RTP streams within an RTP session and restrict the
	    streams' payload format parameters in a codec-agnostic way
	    beyond what is provided with the regular payload types.
	  </dd>
          <dt pn="section-12.1-4.13">
	    A specification of appropriate attribute values for this attribute
          </dt>
          <dd pn="section-12.1-4.14">
	    Valid values are defined by the ABNF in RFC 8851
	  </dd>
          <dt pn="section-12.1-4.15">
	    Multiplexing (Mux) Category
          </dt>
          <dd pn="section-12.1-4.16">
	    SPECIAL
	  </dd>
        </dl>
      </section>
      <section anchor="sec-iana_rid" numbered="true" toc="include" removeInRFC="false" pn="section-12.2">
        <name slugifiedName="name-registry-for-rid-level-para">Registry for RID-Level Parameters</name>
        <t indent="0" pn="section-12.2-1">This specification creates a new IANA registry named "RID Attribute Parameters"
within the SDP parameters registry.  The "a=rid" restrictions <bcp14>MUST</bcp14> be
registered with IANA and documented under the same rules as for SDP
session-level and media-level attributes as specified in <xref target="RFC4566" format="default" sectionFormat="of" derivedContent="RFC4566"/>.</t>
        <t indent="0" pn="section-12.2-2">Parameters for "a=rid" lines that modify the nature of encoded media <bcp14>MUST</bcp14> be
of the form that the result of applying the modification to the stream results
in a stream that still complies with the other parameters that affect the
media. In other words, restrictions always have to restrict the definition to be
a subset of what is otherwise allowable, and never expand it.</t>
        <t indent="0" pn="section-12.2-3">New restriction registrations are accepted according to the "Specification
Required" policy of <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>. The registration <bcp14>MUST</bcp14> contain the RID
parameter name and a reference to the corresponding specification. The
specification itself must contain the following information (not all of which
appears in the registry):</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-12.2-4">
          <li pn="section-12.2-4.1">restriction name (as it will appear in SDP)</li>
          <li pn="section-12.2-4.2">an explanation of the purpose of the restriction</li>
          <li pn="section-12.2-4.3">a specification of appropriate attribute values for this restriction</li>
          <li pn="section-12.2-4.4">an ABNF definition of the restriction</li>
        </ul>
        <t indent="0" pn="section-12.2-5">The initial set of "a=rid" restriction names, with definitions in
<xref target="sec-rid_level_restrictions" format="default" sectionFormat="of" derivedContent="Section 5"/> of this document,
        is given below:</t>
        <table anchor="RID-params" align="center" pn="table-1">
          <name slugifiedName="name-arid-restriction-names">"a=rid" restriction names</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">RID Parameter Name</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">pt</td>
              <td align="left" colspan="1" rowspan="1">RFC 8851</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">max-width</td>
              <td align="left" colspan="1" rowspan="1">RFC 8851</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">max-height</td>
              <td align="left" colspan="1" rowspan="1">RFC 8851</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">max-fps</td>
              <td align="left" colspan="1" rowspan="1">RFC 8851</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">max-fs</td>
              <td align="left" colspan="1" rowspan="1">RFC 8851</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">max-br</td>
              <td align="left" colspan="1" rowspan="1">RFC 8851</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">max-pps</td>
              <td align="left" colspan="1" rowspan="1">RFC 8851</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">max-bpp</td>
              <td align="left" colspan="1" rowspan="1">RFC 8851</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">depend</td>
              <td align="left" colspan="1" rowspan="1">RFC 8851</td>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-12.2-7">It is conceivable that a future document will want to define RID-level
restrictions that contain string values. These extensions need to take care to
conform to the ABNF defined for rid-param-other. In particular, this means
that such extensions will need to define escaping mechanisms if they
want to allow semicolons, unprintable characters, or byte values
greater than 127 in the string.</t>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-13">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-13-1">As with most SDP parameters, a failure to provide integrity protection over
the "a=rid" attributes gives attackers a way to modify the session in
potentially unwanted ways. This could result in an implementation sending
greater amounts of data than a recipient wishes to receive. In general,
however, since the "a=rid" attribute can only restrict a stream to be a subset
of what is otherwise allowable, modification of the value cannot result in a
stream that is of higher bandwidth than would be sent to an implementation
that does not support this mechanism.</t>
      <t indent="0" pn="section-13-2">The actual identifiers used for RIDs are expected to be opaque. As such, they
are not expected to contain information that would be sensitive, were it
observed by third parties.</t>
    </section>
  </middle>
  <back>
    <references pn="section-14">
      <name slugifiedName="name-references">References</name>
      <references pn="section-14.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t indent="0">In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC3264" target="https://www.rfc-editor.org/info/rfc3264" quoteTitle="true" derivedAnchor="RFC3264">
          <front>
            <title>An Offer/Answer Model with Session Description Protocol (SDP)</title>
            <author initials="J." surname="Rosenberg" fullname="J. Rosenberg">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="H." surname="Schulzrinne" fullname="H. Schulzrinne">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2002" month="June"/>
            <abstract>
              <t indent="0">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>
        <reference anchor="RFC3550" target="https://www.rfc-editor.org/info/rfc3550" quoteTitle="true" derivedAnchor="RFC3550">
          <front>
            <title>RTP: A Transport Protocol for Real-Time Applications</title>
            <author initials="H." surname="Schulzrinne" fullname="H. Schulzrinne">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Casner" fullname="S. Casner">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Frederick" fullname="R. Frederick">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="V." surname="Jacobson" fullname="V. Jacobson">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2003" month="July"/>
            <abstract>
              <t indent="0">This memorandum describes RTP, the real-time transport protocol.  RTP provides end-to-end network transport functions suitable for applications transmitting real-time data, such as audio, video or simulation data, over multicast or unicast network services.  RTP does not address resource reservation and does not guarantee quality-of- service for real-time services.  The data transport is augmented by a control protocol (RTCP) to allow monitoring of the data delivery in a manner scalable to large multicast networks, and to provide minimal control and identification functionality.  RTP and RTCP are designed to be independent of the underlying transport and network layers.  The protocol supports the use of RTP-level translators and mixers. Most of the text in this memorandum is identical to RFC 1889 which it obsoletes.  There are no changes in the packet formats on the wire, only changes to the rules and algorithms governing how the protocol is used. The biggest change is an enhancement to the scalable timer algorithm for calculating when to send RTCP packets in order to minimize transmission in excess of the intended rate when many participants join a session simultaneously.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="64"/>
          <seriesInfo name="RFC" value="3550"/>
          <seriesInfo name="DOI" value="10.17487/RFC3550"/>
        </reference>
        <reference anchor="RFC4566" target="https://www.rfc-editor.org/info/rfc4566" quoteTitle="true" derivedAnchor="RFC4566">
          <front>
            <title>SDP: Session Description Protocol</title>
            <author initials="M." surname="Handley" fullname="M. Handley">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="V." surname="Jacobson" fullname="V. Jacobson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Perkins" fullname="C. Perkins">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2006" month="July"/>
            <abstract>
              <t indent="0">This memo defines the Session Description Protocol (SDP).  SDP is intended for describing multimedia sessions for the purposes of session announcement, session invitation, and other forms of multimedia session initiation.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4566"/>
          <seriesInfo name="DOI" value="10.17487/RFC4566"/>
        </reference>
        <reference anchor="RFC4855" target="https://www.rfc-editor.org/info/rfc4855" quoteTitle="true" derivedAnchor="RFC4855">
          <front>
            <title>Media Type Registration of RTP Payload Formats</title>
            <author initials="S." surname="Casner" fullname="S. Casner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2007" month="February"/>
            <abstract>
              <t indent="0">This document specifies the procedure to register RTP payload formats as audio, video, or other media subtype names.  This is useful in a text-based format description or control protocol to identify the type of an RTP transmission.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4855"/>
          <seriesInfo name="DOI" value="10.17487/RFC4855"/>
        </reference>
        <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234" quoteTitle="true" derivedAnchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author initials="D." surname="Crocker" fullname="D. Crocker" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Overell" fullname="P. Overell">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2008" month="January"/>
            <abstract>
              <t indent="0">Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC7405" target="https://www.rfc-editor.org/info/rfc7405" quoteTitle="true" derivedAnchor="RFC7405">
          <front>
            <title>Case-Sensitive String Support in ABNF</title>
            <author initials="P." surname="Kyzivat" fullname="P. Kyzivat">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="December"/>
            <abstract>
              <t indent="0">This document extends the base definition of ABNF (Augmented Backus-Naur Form) to include a way to specify US-ASCII string literals that are matched in a case-sensitive manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7405"/>
          <seriesInfo name="DOI" value="10.17487/RFC7405"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t indent="0">RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8852" target="https://www.rfc-editor.org/info/rfc8852" quoteTitle="true" derivedAnchor="RFC8852">
          <front>
            <title>RTP Stream Identifier Source Description (SDES)</title>
            <author initials="A.B." surname="Roach" fullname="Adam Roach"/>
            <author initials="S" surname="Nandakumar" fullname="Suhas Nandakumar"/>
            <author initials="P" surname="Thatcher" fullname="Peter Thatcher"/>
            <date month="January" year="2021"/>
          </front>
          <seriesInfo name="RFC" value="8852"/>
          <seriesInfo name="DOI" value="10.17487/RFC8852"/>
        </reference>
      </references>
      <references pn="section-14.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="H264" target="https://www.itu.int/rec/T-REC-H.264" quoteTitle="true" derivedAnchor="H264">
          <front>
            <title>Advanced video coding for generic audiovisual services</title>
            <seriesInfo name="ITU-T Recommendation" value="H.264"/>
            <author>
              <organization showOnFrontPage="true">International Telecommunication Union</organization>
            </author>
            <date year="2019" month="June"/>
          </front>
        </reference>
        <reference anchor="RFC2198" target="https://www.rfc-editor.org/info/rfc2198" quoteTitle="true" derivedAnchor="RFC2198">
          <front>
            <title>RTP Payload for Redundant Audio Data</title>
            <author initials="C." surname="Perkins" fullname="C. Perkins">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="I." surname="Kouvelas" fullname="I. Kouvelas">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="O." surname="Hodson" fullname="O. Hodson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="V." surname="Hardman" fullname="V. Hardman">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Handley" fullname="M. Handley">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J.C." surname="Bolot" fullname="J.C. Bolot">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Vega-Garcia" fullname="A. Vega-Garcia">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Fosse-Parisis" fullname="S. Fosse-Parisis">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="September"/>
            <abstract>
              <t indent="0">This document describes a payload format for use with the real-time transport protocol (RTP), version 2, for encoding redundant audio data. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2198"/>
          <seriesInfo name="DOI" value="10.17487/RFC2198"/>
        </reference>
        <reference anchor="RFC4588" target="https://www.rfc-editor.org/info/rfc4588" quoteTitle="true" derivedAnchor="RFC4588">
          <front>
            <title>RTP Retransmission Payload Format</title>
            <author initials="J." surname="Rey" fullname="J. Rey">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="D." surname="Leon" fullname="D. Leon">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Miyazaki" fullname="A. Miyazaki">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="V." surname="Varsa" fullname="V. Varsa">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Hakenberg" fullname="R. Hakenberg">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2006" month="July"/>
            <abstract>
              <t indent="0">RTP retransmission is an effective packet loss recovery technique for real-time applications with relaxed delay bounds.  This document describes an RTP payload format for performing retransmissions. Retransmitted RTP packets are sent in a separate stream from the original RTP stream.  It is assumed that feedback from receivers to senders is available.  In particular, it is assumed that Real-time Transport Control Protocol (RTCP) feedback as defined in the extended RTP profile for RTCP-based feedback (denoted RTP/AVPF) is available in this memo.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4588"/>
          <seriesInfo name="DOI" value="10.17487/RFC4588"/>
        </reference>
        <reference anchor="RFC5109" target="https://www.rfc-editor.org/info/rfc5109" quoteTitle="true" derivedAnchor="RFC5109">
          <front>
            <title>RTP Payload Format for Generic Forward Error Correction</title>
            <author initials="A." surname="Li" fullname="A. Li" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2007" month="December"/>
            <abstract>
              <t indent="0">This document specifies a payload format for generic Forward Error Correction (FEC) for media data encapsulated in RTP.  It is based on the exclusive-or (parity) operation.  The payload format described in this document allows end systems to apply protection using various protection lengths and levels, in addition to using various protection group sizes to adapt to different media and channel characteristics. It enables complete recovery of the protected packets or partial recovery of the critical parts of the payload depending on the packet loss situation.  This scheme is completely compatible with non-FEC-capable hosts, so the receivers in a multicast group that do not implement FEC can still work by simply ignoring the protection data.  This specification obsoletes RFC 2733 and RFC 3009.  The FEC specified in this document is not backward compatible with RFC 2733 and RFC 3009.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5109"/>
          <seriesInfo name="DOI" value="10.17487/RFC5109"/>
        </reference>
        <reference anchor="RFC6184" target="https://www.rfc-editor.org/info/rfc6184" quoteTitle="true" derivedAnchor="RFC6184">
          <front>
            <title>RTP Payload Format for H.264 Video</title>
            <author initials="Y.-K." surname="Wang" fullname="Y.-K. Wang">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Even" fullname="R. Even">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Kristensen" fullname="T. Kristensen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Jesup" fullname="R. Jesup">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="May"/>
            <abstract>
              <t indent="0">This memo describes an RTP Payload format for the ITU-T Recommendation H.264 video codec and the technically identical ISO/IEC International Standard 14496-10 video codec, excluding the Scalable Video Coding (SVC) extension and the Multiview Video Coding extension, for which the RTP payload formats are defined elsewhere. The RTP payload format allows for packetization of one or more Network Abstraction Layer Units (NALUs), produced by an H.264 video encoder, in each RTP payload.  The payload format has wide applicability, as it supports applications from simple low bitrate conversational usage, to Internet video streaming with interleaved transmission, to high bitrate video-on-demand.</t>
              <t indent="0">This memo obsoletes RFC 3984.  Changes from RFC 3984 are summarized in Section 14.  Issues on backward compatibility to RFC 3984 are discussed in Section 15.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6184"/>
          <seriesInfo name="DOI" value="10.17487/RFC6184"/>
        </reference>
        <reference anchor="RFC6236" target="https://www.rfc-editor.org/info/rfc6236" quoteTitle="true" derivedAnchor="RFC6236">
          <front>
            <title>Negotiation of Generic Image Attributes in the Session Description Protocol (SDP)</title>
            <author initials="I." surname="Johansson" fullname="I. Johansson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="K." surname="Jung" fullname="K. Jung">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="May"/>
            <abstract>
              <t indent="0">This document proposes a new generic session setup attribute to make it possible to negotiate different image attributes such as image size.  A possible use case is to make it possible for a \%low-end \%hand- held terminal to display video without the need to rescale the image, something that may consume large amounts of memory and processing power.  The document also helps to maintain an optimal bitrate for video as only the image size that is desired by the receiver is transmitted.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6236"/>
          <seriesInfo name="DOI" value="10.17487/RFC6236"/>
        </reference>
        <reference anchor="RFC7656" target="https://www.rfc-editor.org/info/rfc7656" quoteTitle="true" derivedAnchor="RFC7656">
          <front>
            <title>A Taxonomy of Semantics and Mechanisms for Real-Time Transport Protocol (RTP) Sources</title>
            <author initials="J." surname="Lennox" fullname="J. Lennox">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="K." surname="Gross" fullname="K. Gross">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Nandakumar" fullname="S. Nandakumar">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="G." surname="Salgueiro" fullname="G. Salgueiro">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="B." surname="Burman" fullname="B. Burman" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2015" month="November"/>
            <abstract>
              <t indent="0">The terminology about, and associations among, Real-time Transport Protocol (RTP) sources can be complex and somewhat opaque.  This document describes a number of existing and proposed properties and relationships among RTP sources and defines common terminology for discussing protocol entities and their relationships.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7656"/>
          <seriesInfo name="DOI" value="10.17487/RFC7656"/>
        </reference>
        <reference anchor="RFC7741" target="https://www.rfc-editor.org/info/rfc7741" quoteTitle="true" derivedAnchor="RFC7741">
          <front>
            <title>RTP Payload Format for VP8 Video</title>
            <author initials="P." surname="Westin" fullname="P. Westin">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="H." surname="Lundin" fullname="H. Lundin">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Glover" fullname="M. Glover">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Uberti" fullname="J. Uberti">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="F." surname="Galligan" fullname="F. Galligan">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2016" month="March"/>
            <abstract>
              <t indent="0">This memo describes an RTP payload format for the VP8 video codec. The payload format has wide applicability, as it supports applications from low-bitrate peer-to-peer usage to high-bitrate video conferences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7741"/>
          <seriesInfo name="DOI" value="10.17487/RFC7741"/>
        </reference>
        <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126" quoteTitle="true" derivedAnchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author initials="M." surname="Cotton" fullname="M. Cotton">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Narten" fullname="T. Narten">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="June"/>
            <abstract>
              <t indent="0">Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t indent="0">To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t indent="0">This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8285" target="https://www.rfc-editor.org/info/rfc8285" quoteTitle="true" derivedAnchor="RFC8285">
          <front>
            <title>A General Mechanism for RTP Header Extensions</title>
            <author initials="D." surname="Singer" fullname="D. Singer">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="H." surname="Desineni" fullname="H. Desineni">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Even" fullname="R. Even" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="October"/>
            <abstract>
              <t indent="0">This document provides a general mechanism to use the header extension feature of RTP (the Real-time Transport Protocol).  It provides the option to use a small number of small extensions in each RTP packet, where the universe of possible extensions is large and registration is decentralized.  The actual extensions in use in a session are signaled in the setup information for that session.  This document obsoletes RFC 5285.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8285"/>
          <seriesInfo name="DOI" value="10.17487/RFC8285"/>
        </reference>
        <reference anchor="RFC8627" target="https://www.rfc-editor.org/info/rfc8627" quoteTitle="true" derivedAnchor="RFC8627">
          <front>
            <title>RTP Payload Format for Flexible Forward Error Correction (FEC)</title>
            <author initials="M." surname="Zanaty" fullname="M. Zanaty">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="V." surname="Singh" fullname="V. Singh">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Begen" fullname="A. Begen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="G." surname="Mandyam" fullname="G. Mandyam">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2019" month="July"/>
            <abstract>
              <t indent="0">This document defines new RTP payload formats for the Forward Error Correction (FEC) packets that are generated by the non-interleaved and interleaved parity codes from source media encapsulated in RTP. These parity codes are systematic codes (Flexible FEC, or "FLEX                         FEC"), where a number of FEC repair packets are generated from a set of source packets from one or more source RTP streams.  These FEC repair packets are sent in a redundancy RTP stream separate from the source RTP stream(s) that carries the source packets.  RTP source packets that were lost in transmission can be reconstructed using the source and repair packets that were received.  The non-interleaved and interleaved parity codes that are defined in this specification offer a good protection against random and bursty packet losses, respectively, at a cost of complexity.  The RTP payload formats that are defined in this document address scalability issues experienced with the earlier specifications and offer several improvements.  Due to these changes, the new payload formats are not backward compatible with earlier specifications; however, endpoints that do not implement this specification can still work by simply ignoring the FEC repair packets.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8627"/>
          <seriesInfo name="DOI" value="10.17487/RFC8627"/>
        </reference>
        <reference anchor="RFC8843" target="https://www.rfc-editor.org/info/rfc8843" quoteTitle="true" derivedAnchor="RFC8843">
          <front>
            <title>Negotiating Media Multiplexing Using the Session Description Protocol (SDP)</title>
            <author initials="C" surname="Holmberg" fullname="Christer Holmberg">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="H" surname="Alvestrand" fullname="Harald Alvestrand">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C" surname="Jennings" fullname="Cullen Jennings">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="January" year="2021"/>
          </front>
          <seriesInfo name="RFC" value="8843"/>
          <seriesInfo name="DOI" value="10.17487/RFC8843"/>
        </reference>
        <reference anchor="RFC8853" target="https://www.rfc-editor.org/info/rfc8853" quoteTitle="true" derivedAnchor="RFC8853">
          <front>
            <title>Using Simulcast in Session Description Protocol (SDP) and RTP Sessions</title>
            <author initials="B" surname="Burman" fullname="Bo Burman">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M" surname="Westerlund" fullname="Magnus Westerlund">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S" surname="Nandakumar" fullname="Suhas Nandakumar">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M" surname="Zanaty" fullname="Mo Zanaty">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="January" year="2021"/>
          </front>
          <seriesInfo name="RFC" value="8853"/>
          <seriesInfo name="DOI" value="10.17487/RFC8853"/>
        </reference>
      </references>
    </references>
    <section anchor="acknowledgements" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1">Many thanks to <contact fullname="Cullen Jennings"/>, <contact fullname="Magnus Westerlund"/>, and <contact fullname="Paul Kyzivat"/>
      for reviewing. Thanks to <contact fullname="Colin Perkins"/> for input
      on future payload type handling.</t>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.b">
      <name slugifiedName="name-contributors">Contributors</name>
      <t indent="0" pn="section-appendix.b-1">The following individuals have contributed significant text to this document.</t>
      <contact fullname="Peter Thatcher">
        <organization showOnFrontPage="true">Google</organization>
        <address>
          <email>pthatcher@google.com</email>
        </address>
      </contact>
      <contact fullname="Mo Zanaty">
        <organization showOnFrontPage="true">Cisco Systems</organization>
        <address>
          <email>mzanaty@cisco.com</email>
        </address>
      </contact>
      <contact fullname="Suhas Nandakumar">
        <organization showOnFrontPage="true">Cisco Systems</organization>
        <address>
          <email>snandaku@cisco.com</email>
        </address>
      </contact>
      <contact fullname="Bo Burman">
        <organization showOnFrontPage="true">Ericsson</organization>
        <address>
          <email>bo.burman@ericsson.com</email>
        </address>
      </contact>
      <contact fullname="Byron Campen">
        <organization showOnFrontPage="true">Mozilla</organization>
        <address>
          <email>bcampen@mozilla.com</email>
        </address>
      </contact>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.c">
      <name slugifiedName="name-authors-address">Author's Address</name>
      <author initials="A.B." surname="Roach" fullname="Adam Roach" role="editor">
        <organization showOnFrontPage="true">Mozilla</organization>
        <address>
          <email>adam@nostrum.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
