<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" ipr="trust200902" docName="draft-ietf-wish-whip-16" number="9725" category="std" consensus="true" updates="8840, 8842" obsoletes="" tocInclude="true" submissionType="IETF" sortRefs="true" symRefs="true" xml:lang="en" prepTime="2025-03-26T15:57:08" indexInclude="true" scripts="Common,Latin" tocDepth="3">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-wish-whip-16" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9725" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="whip">WebRTC-HTTP Ingestion Protocol (WHIP)</title>
    <seriesInfo name="RFC" value="9725" stream="IETF"/>
    <author initials="S." surname="Garcia Murillo" fullname="Sergio Garcia Murillo">
      <organization showOnFrontPage="true">Millicast</organization>
      <address>
        <email>sergio.garcia.murillo@cosmosoftware.io</email>
      </address>
    </author>
    <author initials="A." surname="Gouaillard" fullname="Alexandre Gouaillard">
      <organization showOnFrontPage="true">CoSMo Software</organization>
      <address>
        <email>alex.gouaillard@cosmosoftware.io</email>
      </address>
    </author>
    <date month="03" year="2025"/>
    <area>WIT</area>
    <workgroup>wish</workgroup>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">This document describes a simple HTTP-based protocol that will allow
      WebRTC-based ingestion of content into streaming services and/or
      Content Delivery Networks (CDNs).</t>
      <t indent="0" pn="section-abstract-2">This document updates RFCs 8840 and 8842.</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/rfc9725" 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) 2025 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 Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised 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-introduction">Introduction</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-terminology">Terminology</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-overview">Overview</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-protocol-operation">Protocol Operation</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-http-usage">HTTP Usage</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ingest-session-setup">Ingest Session Setup</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.3">
                <t indent="0" pn="section-toc.1-1.4.2.3.1"><xref derivedContent="4.3" format="counter" sectionFormat="of" target="section-4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ice-support">ICE Support</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.3.2">
                  <li pn="section-toc.1-1.4.2.3.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.3.2.1.1"><xref derivedContent="4.3.1" format="counter" sectionFormat="of" target="section-4.3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-http-patch-request-usage">HTTP PATCH Request Usage</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.3.2.2">
                    <t indent="0" pn="section-toc.1-1.4.2.3.2.2.1"><xref derivedContent="4.3.2" format="counter" sectionFormat="of" target="section-4.3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-trickle-ice">Trickle ICE</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.3.2.3">
                    <t indent="0" pn="section-toc.1-1.4.2.3.2.3.1"><xref derivedContent="4.3.3" format="counter" sectionFormat="of" target="section-4.3.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ice-restarts">ICE Restarts</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.4">
                <t indent="0" pn="section-toc.1-1.4.2.4.1"><xref derivedContent="4.4" format="counter" sectionFormat="of" target="section-4.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-webrtc-constraints">WebRTC Constraints</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.4.2">
                  <li pn="section-toc.1-1.4.2.4.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.4.2.1.1"><xref derivedContent="4.4.1" format="counter" sectionFormat="of" target="section-4.4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-sdp-bundle">SDP Bundle</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.4.2.2">
                    <t indent="0" pn="section-toc.1-1.4.2.4.2.2.1"><xref derivedContent="4.4.2" format="counter" sectionFormat="of" target="section-4.4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-single-mediastream">Single MediaStream</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.4.2.3">
                    <t indent="0" pn="section-toc.1-1.4.2.4.2.3.1"><xref derivedContent="4.4.3" format="counter" sectionFormat="of" target="section-4.4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-no-partially-successful-ans">No Partially Successful Answers</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.4.2.4">
                    <t indent="0" pn="section-toc.1-1.4.2.4.2.4.1"><xref derivedContent="4.4.4" format="counter" sectionFormat="of" target="section-4.4.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-dtls-setup-role-and-sdp-set">DTLS Setup Role and SDP "setup" Attribute</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.4.2.5">
                    <t indent="0" pn="section-toc.1-1.4.2.4.2.5.1"><xref derivedContent="4.4.5" format="counter" sectionFormat="of" target="section-4.4.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-trickle-ice-and-ice-restart">Trickle ICE and ICE Restarts</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.5">
                <t indent="0" pn="section-toc.1-1.4.2.5.1"><xref derivedContent="4.5" format="counter" sectionFormat="of" target="section-4.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-load-balancing-and-redirect">Load Balancing and Redirections</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.6">
                <t indent="0" pn="section-toc.1-1.4.2.6.1"><xref derivedContent="4.6" format="counter" sectionFormat="of" target="section-4.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-stun-turn-server-configurat">STUN/TURN Server Configuration</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.6.2">
                  <li pn="section-toc.1-1.4.2.6.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.6.2.1.1"><xref derivedContent="4.6.1" format="counter" sectionFormat="of" target="section-4.6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-congestion-control">Congestion Control</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.7">
                <t indent="0" pn="section-toc.1-1.4.2.7.1"><xref derivedContent="4.7" format="counter" sectionFormat="of" target="section-4.7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-authentication-and-authoriz">Authentication and Authorization</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.7.2">
                  <li pn="section-toc.1-1.4.2.7.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.7.2.1.1"><xref derivedContent="4.7.1" format="counter" sectionFormat="of" target="section-4.7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-bearer-token-authentication">Bearer Token Authentication</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.8">
                <t indent="0" pn="section-toc.1-1.4.2.8.1"><xref derivedContent="4.8" format="counter" sectionFormat="of" target="section-4.8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-simulcast-and-scalable-vide">Simulcast and Scalable Video Coding</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.9">
                <t indent="0" pn="section-toc.1-1.4.2.9.1"><xref derivedContent="4.9" format="counter" sectionFormat="of" target="section-4.9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-protocol-extensions">Protocol Extensions</xref></t>
              </li>
            </ul>
          </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-security-considerations">Security Considerations</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-iana-considerations">IANA Considerations</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-link-relation-type-ice-serv">Link Relation Type: ice-server</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-urn-sub-namespace-for-whip-">URN Sub-namespace for WHIP (urn:ietf:params:whip)</xref></t>
              </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-webrtc-http-ingestion-proto">WebRTC-HTTP Ingestion Protocol (WHIP) URNs Registry</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-webrtc-http-ingestion-protoc">WebRTC-HTTP Ingestion Protocol (WHIP) Extension URNs Registry</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-registering-whip-urns-and-w">Registering WHIP URNs and WHIP Extension URNs</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2.5.2">
                  <li pn="section-toc.1-1.6.2.5.2.1">
                    <t indent="0" pn="section-toc.1-1.6.2.5.2.1.1"><xref derivedContent="6.5.1" format="counter" sectionFormat="of" target="section-6.5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-registration-procedure">Registration Procedure</xref></t>
                  </li>
                  <li pn="section-toc.1-1.6.2.5.2.2">
                    <t indent="0" pn="section-toc.1-1.6.2.5.2.2.1"><xref derivedContent="6.5.2" format="counter" sectionFormat="of" target="section-6.5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-guidance-for-the-designated">Guidance for the Designated Expert</xref></t>
                  </li>
                  <li pn="section-toc.1-1.6.2.5.2.3">
                    <t indent="0" pn="section-toc.1-1.6.2.5.2.3.1"><xref derivedContent="6.5.3" format="counter" sectionFormat="of" target="section-6.5.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-registration-template">Registration Template</xref></t>
                  </li>
                </ul>
              </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-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.7.2">
              <li pn="section-toc.1-1.7.2.1">
                <t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.2">
                <t indent="0" pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.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.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" removeInRFC="false" toc="include" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">The IETF RTCWEB Working Group standardized the JavaScript Session Establishment Protocol (JSEP) <xref target="RFC9429" format="default" sectionFormat="of" derivedContent="RFC9429"/>, a mechanism used to control the setup, management,
      and teardown of a multimedia session. It also describes how to negotiate
      media flows using the offer/answer model with the Session Description
      Protocol (SDP) <xref target="RFC3264" format="default" sectionFormat="of" derivedContent="RFC3264"/>, including the formats for data
      sent over the wire (e.g., media types, codec parameters, and
      encryption). WebRTC intentionally does not specify a signaling transport
      protocol at the application level.</t>
      <t indent="0" pn="section-1-2">Unfortunately, the lack of a standardized signaling mechanism in
WebRTC has been an obstacle to its adoption as an ingestion protocol
within the broadcast and streaming industry, where a streamlined
production pipeline is taken for granted. For example, cables carrying raw
media to hardware encoders are plugged in and then the encoded media is
pushed to any streaming service or Content Delivery Network (CDN) using an
ingestion protocol.
      </t>
      <t indent="0" pn="section-1-3">While WebRTC can be integrated with standard signaling protocols like
      SIP <xref target="RFC3261" format="default" sectionFormat="of" derivedContent="RFC3261"/> or Extensible Messaging and Presence
      Protocol (XMPP) <xref target="RFC6120" format="default" sectionFormat="of" derivedContent="RFC6120"/>, they are not designed to be
      used in broadcasting and streaming services, and there is also no sign of
      adoption in that industry. The Real-Time Streaming Protocol (RTSP) <xref target="RFC7826" format="default" sectionFormat="of" derivedContent="RFC7826"/>, which is based
      on RTP, does not support the SDP offer/answer model <xref target="RFC3264" format="default" sectionFormat="of" derivedContent="RFC3264"/> for negotiating the characteristics of the media
      session.</t>
      <t indent="0" pn="section-1-4">This document proposes a simple protocol based on HTTP for supporting WebRTC as a media ingestion method that:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-1-5">
        <li pn="section-1-5.1">
          <t indent="0" pn="section-1-5.1.1">is easy to implement,</t>
        </li>
        <li pn="section-1-5.2">
          <t indent="0" pn="section-1-5.2.1">is as easy to use as popular IP-based broadcast protocols,</t>
        </li>
        <li pn="section-1-5.3">
          <t indent="0" pn="section-1-5.3.1">is fully compliant with WebRTC and RTCWEB specs,</t>
        </li>
        <li pn="section-1-5.4">
          <t indent="0" pn="section-1-5.4.1">enables ingestion on both classical media platforms and WebRTC end-to-end platforms (achieving the lowest possible latency),</t>
        </li>
        <li pn="section-1-5.5">
          <t indent="0" pn="section-1-5.5.1">lowers the requirements on both hardware encoders and broadcasting services to support WebRTC, and</t>
        </li>
        <li pn="section-1-5.6">
          <t indent="0" pn="section-1-5.6.1">is usable in both web browsers and standalone encoders.</t>
        </li>
      </ul>
    </section>
    <section anchor="terminology" numbered="true" removeInRFC="false" toc="include" pn="section-2">
      <name slugifiedName="name-terminology">Terminology</name>
      <t indent="0" pn="section-2-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="overview" numbered="true" removeInRFC="false" toc="include" pn="section-3">
      <name slugifiedName="name-overview">Overview</name>
      <t indent="0" pn="section-3-1">The WebRTC-HTTP Ingestion Protocol (WHIP) is designed to facilitate a
      one-time exchange of Session Description Protocol (SDP) offers and
      answers using HTTP POST requests. This exchange is a fundamental step in
      establishing an Interactive Connectivity Establishment (ICE) and
      Datagram Transport Layer Security (DTLS) session between the WHIP
      client, which represents the encoder or media producer, and the media
      server, which is the broadcasting ingestion endpoint.</t>
      <t indent="0" pn="section-3-2">Upon successful establishment of the ICE/DTLS session, unidirectional
      media data transmission commences from the WHIP client to the media
      server. It is important to note that SDP renegotiations are not
      supported in WHIP. This means that no modifications to the "m=" sections
      can be made after the initial SDP offer/answer exchange via HTTP POST is
      completed and that only ICE-related information can be updated via HTTP PATCH
      requests as defined in <xref target="ice-support" format="default" sectionFormat="of" derivedContent="Section 4.3"/>.</t>
      <t indent="0" pn="section-3-3">The following diagram illustrates the core operation of WHIP
      for initiating and terminating an ingest session:</t>
      <figure anchor="whip-protocol-operation" align="left" suppress-title="false" pn="figure-1">
        <name slugifiedName="name-whip-session-setup-and-tear">WHIP Session Setup and Teardown</name>
        <artwork align="left" pn="section-3-4.1">
+-------------+    +---------------+ +--------------+ +---------------+
| WHIP client |    | WHIP endpoint | | Media server | | WHIP session  |
+--+----------+    +---------+-----+ +------+-------+ +--------|------+
   |                         |              |                  |       
   |                         |              |                  |       
   |HTTP POST (SDP offer)    |              |                  |       
   +------------------------&gt;+              |                  |       
   |201 Created (SDP answer) |              |                  |       
   +&lt;------------------------+              |                  |       
   |          ICE/STUN REQUEST              |                  |       
   +---------------------------------------&gt;+                  |       
   |          ICE/STUN RESPONSE             |                  |       
   |&lt;---------------------------------------+                  |       
   |          DTLS SETUP                    |                  |       
   |&lt;======================================&gt;|                  |       
   |          RTP/RTCP FLOW                 |                  |       
   +&lt;--------------------------------------&gt;+                  |       
   | HTTP DELETE                                               |       
   +----------------------------------------------------------&gt;+       
   | 200 OK                                                    |       
   &lt;-----------------------------------------------------------x
</artwork>
      </figure>
      <t indent="0" pn="section-3-5">The elements in <xref target="whip-protocol-operation" format="default" sectionFormat="of" derivedContent="Figure 1"/> are
      described as follows:</t>
      <dl spacing="normal" indent="3" newline="false" pn="section-3-6">
        <dt pn="section-3-6.1">WHIP client:</dt>
        <dd pn="section-3-6.2">This represents the WebRTC media encoder or
          producer, which functions as a client of WHIP by
          encoding and delivering media to a remote media server.</dd>
        <dt pn="section-3-6.3">WHIP endpoint:</dt>
        <dd pn="section-3-6.4">This denotes the ingest server that
          receives the initial WHIP request.</dd>
        <dt pn="section-3-6.5">WHIP endpoint URL:</dt>
        <dd pn="section-3-6.6">This refers to the URL of the WHIP endpoint responsible for creating the WHIP session.</dd>
        <dt pn="section-3-6.7">Media server:</dt>
        <dd pn="section-3-6.8">This is the WebRTC media server or
          consumer responsible for establishing the media session with the
          WHIP client and receiving the media content it produces.</dd>
        <dt pn="section-3-6.9">WHIP session:</dt>
        <dd pn="section-3-6.10">This indicates the server handling the
          allocated HTTP resource by the WHIP endpoint for an ongoing ingest
          session.</dd>
        <dt pn="section-3-6.11">WHIP session URL:</dt>
        <dd pn="section-3-6.12">This refers to the URL of the WHIP resource
          allocated by the WHIP endpoint for a specific media session. To
          modify the session (e.g., ICE operations or session termination), the
          WHIP client can send requests to the WHIP session using this URL.</dd>
      </dl>
      <t indent="0" pn="section-3-7"><xref target="whip-protocol-operation" format="default" sectionFormat="of" derivedContent="Figure 1"/> illustrates the
      communication flow between a WHIP client, WHIP endpoint, media server,
      and WHIP session. This flow outlines the process of setting up and
      tearing down an ingest session using WHIP, which involves
      negotiation, ICE for Network Address Translation (NAT) traversal, DTLS 
      and the Secure Real-time Transport Protocol (SRTP) for security, and
      RTP/RTCP for media transport:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3-8">
        <li pn="section-3-8.1">The WHIP client initiates the communication by sending an HTTP
        POST with an SDP offer to the WHIP endpoint.
	</li>
        <li pn="section-3-8.2">The WHIP endpoint responds with a "201 Created" message containing
        an SDP answer.
	</li>
        <li pn="section-3-8.3">The WHIP client and media server establish ICE and DTLS
        sessions for NAT traversal and secure communication.
	</li>
        <li pn="section-3-8.4">RTP and RTCP flows are established for media transmission from the
          WHIP client to the media server, secured by the SRTP profile.
          </li>
        <li pn="section-3-8.5">The WHIP client sends an HTTP DELETE to terminate the WHIP session.
	  </li>
        <li pn="section-3-8.6">The WHIP session responds with a "200 OK" to confirm the session
          termination.
	  </li>
      </ul>
    </section>
    <section anchor="protocol-operation" numbered="true" removeInRFC="false" toc="include" pn="section-4">
      <name slugifiedName="name-protocol-operation">Protocol Operation</name>
      <section anchor="http-usage" numbered="true" removeInRFC="false" toc="include" pn="section-4.1">
        <name slugifiedName="name-http-usage">HTTP Usage</name>
        <t indent="0" pn="section-4.1-1">Following the guidelines in <xref target="BCP56" format="default" sectionFormat="of" derivedContent="BCP56"/>, WHIP clients
        <bcp14>MUST NOT</bcp14> match error codes returned by the WHIP
        endpoints and resources to a specific error cause indicated in this
        specification. WHIP clients <bcp14>MUST</bcp14> be able to handle all
        applicable status codes by gracefully falling back to the generic n00
        semantics of a given status code on unknown error codes. WHIP
        endpoints and resources could convey finer-grained error information
        by a problem details json object in the response message body of the
        failed request as per <xref target="RFC9457" format="default" sectionFormat="of" derivedContent="RFC9457"/>.</t>
        <t indent="0" pn="section-4.1-2">The WHIP endpoints and sessions are origin servers as defined in
        <xref section="3.6" sectionFormat="of" target="RFC9110" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9110#section-3.6" derivedContent="RFC9110"/>; they handle the
        requests and provide responses for the underlying HTTP
        resources. Those HTTP resources do not have any representation defined
        in this specification, so the WHIP endpoints and sessions
        <bcp14>MUST</bcp14> return a 2xx successful response with no content
        when a GET request is received.</t>
      </section>
      <section anchor="ingest-session-set-up" numbered="true" removeInRFC="false" toc="include" pn="section-4.2">
        <name slugifiedName="name-ingest-session-setup">Ingest Session Setup</name>
        <t indent="0" pn="section-4.2-1">In order to set up an ingest session, the WHIP client
        <bcp14>MUST</bcp14> generate an SDP offer according to the JSEP rules
        for an initial offer as per <xref section="5.2.1" sectionFormat="of" target="RFC9429" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9429#section-5.2.1" derivedContent="RFC9429"/> and send an HTTP POST request as per <xref section="9.3.3" sectionFormat="of" target="RFC9110" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9110#section-9.3.3" derivedContent="RFC9110"/> to the
        configured WHIP endpoint URL.</t>
        <t indent="0" pn="section-4.2-2">The HTTP POST request <bcp14>MUST</bcp14> have a content type of
        "application/sdp" and contain the SDP offer as the body. The WHIP
        endpoint <bcp14>MUST</bcp14> generate an SDP answer according to the
        JSEP rules for an initial answer as per <xref section="5.3.1" sectionFormat="of" target="RFC9429" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9429#section-5.3.1" derivedContent="RFC9429"/> and return the following: a "201 Created"
        response with a content type of "application/sdp", the SDP answer as
        the body, and a Location header field pointing to the newly created
        WHIP session. If the HTTP POST to the WHIP endpoint has a content type
        different than "application/sdp" or the SDP is malformed, the WHIP
        endpoint <bcp14>MUST</bcp14> reject the HTTP POST request with an
        appropriate 4xx error response.</t>
        <t indent="0" pn="section-4.2-3">As WHIP only supports the ingestion use case with
        unidirectional media, the WHIP client <bcp14>SHOULD</bcp14> use the
        "sendonly" attribute in the SDP offer but <bcp14>MAY</bcp14> use the
        "sendrecv" attribute instead; the "inactive" and "recvonly" attributes
        <bcp14>MUST NOT</bcp14> be used. The WHIP endpoint <bcp14>MUST</bcp14>
        use the "recvonly" attribute in the SDP answer.</t>
        <t indent="0" pn="section-4.2-4"><xref target="sdp-exchange-example" format="default" sectionFormat="of" derivedContent="Figure 2"/> is an example of an
        HTTP POST sent from a WHIP client to a WHIP endpoint and the "201
        Created" response from the WHIP endpoint containing the Location
        header pointing to the newly created WHIP session.</t>
        <figure anchor="sdp-exchange-example" align="left" suppress-title="false" pn="figure-2">
          <name slugifiedName="name-example-of-the-sdp-offer-an">Example of the SDP Offer/Answer Exchange Done via an HTTP POST</name>
          <sourcecode type="http-message" markers="false" pn="section-4.2-5.1">
POST /whip/endpoint HTTP/1.1
Host: whip.example.com
Content-Type: application/sdp
Content-Length: 1101

v=0
o=- 5228595038118931041 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=ice-options:trickle ice2
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:EsAw
a=ice-pwd:bP+XJMM09aR8AiX1jdukzR6Y
a=fingerprint:sha-256 DA:7B:57:DC:28:CE:04:4F:31:79:85:C4:31:67:EB:
   27:58:29:ED:77:2A:0D:24:AE:ED:AD:30:BC:BD:F1:9C:02
a=setup:actpass
a=mid:0
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=sendonly
a=msid:d46fb922-d52a-4e9c-aa87-444eadc1521b ce326ecf-a081-453a-8f9f-
   0605d5ef4128
a=rtcp-mux
a=rtcp-mux-only
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
m=video 0 UDP/TLS/RTP/SAVPF 96 97
a=mid:1
a=bundle-only
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendonly
a=msid:d46fb922-d52a-4e9c-aa87-444eadc1521b 3956b460-40f4-4d05-acef-
   03abcdd8c6fd
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96

HTTP/1.1 201 Created
ETag: "xyzzy"
Content-Type: application/sdp
Content-Length: 1053
Location: https://whip.example.com/session/id

v=0
o=- 1657793490019 1 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=ice-lite
a=ice-options:trickle ice2
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:38sdf4fdsf54
a=ice-pwd:2e13dde17c1cb009202f627fab90cbec358d766d049c9697
a=fingerprint:sha-256 F7:EB:F3:3E:AC:D2:EA:A7:C1:EC:79:D9:B3:8A:35:
   DA:70:86:4F:46:D9:2D:CC:D0:BC:81:9F:67:EF:34:2E:BD
a=candidate:1 1 UDP 2130706431 198.51.100.1 39132 typ host
a=setup:passive
a=mid:0
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=recvonly
a=rtcp-mux
a=rtcp-mux-only
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
m=video 0 UDP/TLS/RTP/SAVPF 96 97
c=IN IP4 0.0.0.0
a=mid:1
a=bundle-only
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=recvonly
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
</sourcecode>
        </figure>
        <t indent="0" pn="section-4.2-6">Once a session is set up, consent freshness as per <xref target="RFC7675" format="default" sectionFormat="of" derivedContent="RFC7675"/> <bcp14>SHALL</bcp14> be used to detect non-graceful
        disconnection by full ICE implementations and DTLS teardown for
        session termination by either side.</t>
        <t indent="0" pn="section-4.2-7">To explicitly terminate a WHIP session, the WHIP client
        <bcp14>MUST</bcp14> send an HTTP DELETE request to the WHIP session
        URL returned in the Location header field of the initial HTTP
        POST. Upon receiving the HTTP DELETE request, the WHIP session will be
        removed and the resources freed on the media server, terminating the
        ICE and DTLS sessions.</t>
        <t indent="0" pn="section-4.2-8">A media server terminating a session <bcp14>MUST</bcp14> follow the
        procedures in <xref section="5.2" sectionFormat="of" target="RFC7675" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7675#section-5.2" derivedContent="RFC7675"/> for immediate revocation of consent.</t>
        <t indent="0" pn="section-4.2-9">The WHIP endpoints <bcp14>MUST</bcp14> support OPTIONS requests for
        Cross-Origin Resource Sharing (CORS) as defined in <xref target="FETCH" format="default" sectionFormat="of" derivedContent="FETCH"/>. The "200 OK" response to any OPTIONS request
        <bcp14>SHOULD</bcp14> include an Accept-Post header with a media
        type value of "application/sdp" as per <xref target="W3C.REC-ldp-20150226" format="default" sectionFormat="of" derivedContent="W3C.REC-ldp-20150226"/>.</t>
      </section>
      <section anchor="ice-support" numbered="true" removeInRFC="false" toc="include" pn="section-4.3">
        <name slugifiedName="name-ice-support">ICE Support</name>
        <t indent="0" pn="section-4.3-1">ICE <xref target="RFC8445" format="default" sectionFormat="of" derivedContent="RFC8445"/> is a protocol that addresses the
        complexities of NAT traversal commonly encountered in Internet
        communication. NATs hinder direct communication between devices on
        different local networks, posing challenges for real-time
        applications. ICE facilitates seamless connectivity by employing
        techniques to discover and negotiate efficient communication
        paths.</t>
        <t indent="0" pn="section-4.3-2">Trickle ICE <xref target="RFC8838" format="default" sectionFormat="of" derivedContent="RFC8838"/> optimizes the connectivity
        process by incrementally sharing potential communication paths,
        reducing latency, and facilitating quicker establishment.</t>
        <t indent="0" pn="section-4.3-3">ICE restarts are crucial for maintaining connectivity in dynamic
        network conditions or disruptions, allowing devices to re-establish
        communication paths without complete renegotiation. This ensures
        minimal latency and reliable real-time communication.</t>
        <t indent="0" pn="section-4.3-4">Trickle ICE and ICE restart support are <bcp14>RECOMMENDED</bcp14>
        for both WHIP sessions and clients.</t>
        <section anchor="http-patch-usage" numbered="true" removeInRFC="false" toc="include" pn="section-4.3.1">
          <name slugifiedName="name-http-patch-request-usage">HTTP PATCH Request Usage</name>
          <t indent="0" pn="section-4.3.1-1">The WHIP client <bcp14>MAY</bcp14> perform Trickle ICE or ICE
          restarts by sending an HTTP PATCH request as per <xref target="RFC5789" format="default" sectionFormat="of" derivedContent="RFC5789"/> to the WHIP session URL. This HTTP PATCH request <bcp14>MUST</bcp14> contain a body with
          an SDP fragment with media type "application/trickle-ice-sdpfrag" as
          specified in <xref target="RFC8840" format="default" sectionFormat="of" derivedContent="RFC8840"/>, which carries the relevant ICE
          information. If the HTTP PATCH request sent to the WHIP session URL has a content
          type different than "application/trickle-ice-sdpfrag" or the SDP
          fragment is malformed, the WHIP session <bcp14>MUST</bcp14> reject
          the HTTP PATCH with an appropriate 4xx error response.</t>
          <t indent="0" pn="section-4.3.1-2">If the WHIP session supports either Trickle ICE or ICE restarts,
          but not both, it <bcp14>MUST</bcp14> return a "422 Unprocessable
          Content" error response for the HTTP PATCH requests that are not
          supported as per <xref section="15.5.21" sectionFormat="of" target="RFC9110" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9110#section-15.5.21" derivedContent="RFC9110"/>.</t>
          <t indent="0" pn="section-4.3.1-3">The WHIP client <bcp14>MAY</bcp14> send overlapping HTTP PATCH
          requests to one WHIP session.

	  Consequently, those HTTP PATCH requests may be received out of order
	  by the WHIP session. Thus, if the WHIP session supports ICE
	  restarts, it <bcp14>MUST</bcp14> generate a unique strong entity-tag
	  identifying the ICE session as per <xref section="8.8.3" sectionFormat="of" target="RFC9110" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9110#section-8.8.3" derivedContent="RFC9110"/>.
	  The initial value of the
          entity-tag identifying the initial ICE session <bcp14>MUST</bcp14>
          be returned in an ETag header field in the "201 Created" response to
          the initial POST request to the WHIP endpoint.</t>
          <t indent="0" pn="section-4.3.1-4">WHIP clients <bcp14>SHOULD NOT</bcp14> use entity-tag validation
          when matching a specific ICE session is not required, for example, when
          initiating a DELETE request to terminate a session.
          WHIP sessions <bcp14>MUST</bcp14> ignore any entity-tag
          value sent by the WHIP client when ICE session matching is not
          required, as in the HTTP DELETE request.</t>
          <t indent="0" pn="section-4.3.1-5">Missing or outdated ETags in the PATCH requests from WHIP clients
          will be answered by WHIP sessions as per <xref section="13.1.1" sectionFormat="of" target="RFC9110" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9110#section-13.1.1" derivedContent="RFC9110"/> and <xref section="3" sectionFormat="of" target="RFC6585" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6585#section-3" derivedContent="RFC6585"/>, with a "428 Precondition
          Required" response for a missing entity-tag and a "412 Precondition
          Failed" response for a non-matching entity-tag.</t>
        </section>
        <section anchor="trickle-ice" numbered="true" removeInRFC="false" toc="include" pn="section-4.3.2">
          <name slugifiedName="name-trickle-ice">Trickle ICE</name>
          <t indent="0" pn="section-4.3.2-1">Depending on the Trickle ICE support on the WHIP client, the
          initial offer by the WHIP client <bcp14>MAY</bcp14> be sent after
          the full ICE gathering is complete with the full list of ICE
          candidates, or it <bcp14>MAY</bcp14> only contain local candidates
          (or even an empty list of candidates) as per <xref target="RFC8445" format="default" sectionFormat="of" derivedContent="RFC8445"/>. For the purpose of reducing setup times, when
          using Trickle ICE, the WHIP client <bcp14>SHOULD</bcp14> send the SDP
          offer (containing either locally gathered ICE
          candidates or an empty list of candidates) as soon as possible.</t>
          <t indent="0" pn="section-4.3.2-2">In order to simplify the protocol, the WHIP session cannot signal
          additional ICE candidates to the WHIP client after the SDP answer
          has been sent. The WHIP endpoint <bcp14>SHALL</bcp14> gather all the
          ICE candidates for the media server before responding to the client
          request, and the SDP answer <bcp14>SHALL</bcp14> contain the full
          list of ICE candidates of the media server.</t>
          <t indent="0" pn="section-4.3.2-3">As the WHIP client needs to know the WHIP session URL associated
          with the ICE session in order to send a PATCH request containing new
          ICE candidates, it <bcp14>MUST</bcp14> wait and buffer any gathered
          candidates until the "201 Created" HTTP response to the initial POST
          request is received.  In order to reduce the HTTP traffic and
          processing time required, the WHIP client <bcp14>SHOULD</bcp14> send
          a single aggregated HTTP PATCH request with all the buffered ICE
          candidates once the response is received.  Additionally, if ICE
          restarts are supported by the WHIP session, the WHIP client needs to
          know the entity-tag associated with the ICE session in order to send
          a PATCH request containing new ICE candidates; thus, it
          <bcp14>MUST</bcp14> also wait and buffer any gathered candidates
          until it receives the HTTP response with the new entity-tag value to
          the last PATCH request performing an ICE restart.</t>
          <t indent="0" pn="section-4.3.2-4">WHIP clients generating the HTTP PATCH body with the SDP fragment
          and its subsequent processing by WHIP sessions <bcp14>MUST</bcp14>
          follow the guidelines defined in <xref section="4.4" sectionFormat="of" target="RFC8840" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8840#section-4.4" derivedContent="RFC8840"/> with the following
          considerations:</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.3.2-5">
            <li pn="section-4.3.2-5.1">
              <t indent="0" pn="section-4.3.2-5.1.1">As per <xref target="RFC9429" format="default" sectionFormat="of" derivedContent="RFC9429"/>, only "m=" sections not marked
              as bundle-only can gather ICE candidates, so given that the
              "max-bundle" policy is being used, the SDP fragment will contain
              only the offerer-tagged "m=" line of the bundle group.</t>
            </li>
            <li pn="section-4.3.2-5.2">
              <t indent="0" pn="section-4.3.2-5.2.1">The WHIP client <bcp14>MAY</bcp14> exclude ICE candidates
              from the HTTP PATCH body if they have already been confirmed by
              the WHIP session with a successful HTTP response to a previous
              HTTP PATCH request.</t>
            </li>
          </ul>
          <t indent="0" pn="section-4.3.2-6">WHIP sessions and clients that support Trickle ICE
          <bcp14>MUST</bcp14> make use of entity-tags and conditional requests
          as explained in <xref target="http-patch-usage" format="default" sectionFormat="of" derivedContent="Section 4.3.1"/>.</t>
          <t indent="0" pn="section-4.3.2-7">When a WHIP session receives a PATCH request that adds new ICE
          candidates without performing an ICE restart, it <bcp14>MUST</bcp14>
          return a "204 No Content" response without a body and <bcp14>MUST NOT</bcp14> include an ETag header in the response. If the WHIP
          session does not support a candidate transport or is not able to
          resolve the connection address, it <bcp14>MUST</bcp14> silently
          discard the candidate and continue processing the rest of the
          request normally.</t>
          <t indent="0" pn="section-4.3.2-8"><xref target="trickle-ice-example" format="default" sectionFormat="of" derivedContent="Figure 3"/> shows an example of the
          Trickle ICE procedure where the WHIP client sends a PATCH request
          with updated ICE candidate information and receives a successful
          response from the WHIP session.</t>
          <figure anchor="trickle-ice-example" align="left" suppress-title="false" pn="figure-3">
            <name slugifiedName="name-example-of-a-trickle-ice-re">Example of a Trickle ICE Request and Response</name>
            <sourcecode type="http-message" markers="false" pn="section-4.3.2-9.1">
PATCH /session/id HTTP/1.1
Host: whip.example.com
If-Match: "xyzzy"
Content-Type: application/trickle-ice-sdpfrag
Content-Length: 576

a=group:BUNDLE 0 1
m=audio 9 UDP/TLS/RTP/SAVPF 111
a=mid:0
a=ice-ufrag:EsAw
a=ice-pwd:P2uYro0UCOQ4zxjKXaWCBui1
a=candidate:1387637174 1 udp 2122260223 192.0.2.1 61764 typ host
   generation 0 ufrag EsAw network-id 1
a=candidate:3471623853 1 udp 2122194687 198.51.100.2 61765 typ host
   generation 0 ufrag EsAw network-id 2
a=candidate:473322822 1 tcp 1518280447 192.0.2.1 9 typ host tcptype
   active generation 0 ufrag EsAw network-id 1
a=candidate:2154773085 1 tcp 1518214911 198.51.100.2 9 typ host
   tcptype active generation 0 ufrag EsAw network-id 2
a=end-of-candidates

HTTP/1.1 204 No Content
</sourcecode>
          </figure>
        </section>
        <section anchor="ice-restarts" numbered="true" removeInRFC="false" toc="include" pn="section-4.3.3">
          <name slugifiedName="name-ice-restarts">ICE Restarts</name>
          <t indent="0" pn="section-4.3.3-1">As defined in <xref target="RFC8839" format="default" sectionFormat="of" derivedContent="RFC8839"/>, when an ICE restart
          occurs, a new SDP offer/answer exchange is triggered. However, as
          WHIP does not support renegotiation of non-ICE-related SDP
          information, a WHIP client will not send a new offer when an ICE
          restart occurs. Instead, the WHIP client and WHIP session will only
          exchange the relevant ICE information via an HTTP PATCH request as
          defined in <xref target="http-patch-usage" format="default" sectionFormat="of" derivedContent="Section 4.3.1"/> and <bcp14>MUST</bcp14>
          assume that the previously negotiated non-ICE-related SDP
          information still applies after the ICE restart.</t>
          <t indent="0" pn="section-4.3.3-2">When performing an ICE restart, the WHIP client
          <bcp14>MUST</bcp14> include the updated "ice-pwd" and "ice-ufrag" in
          the SDP fragment of the HTTP PATCH request body as well as the new
          set of gathered ICE candidates as defined in <xref target="RFC8840" format="default" sectionFormat="of" derivedContent="RFC8840"/>.  Similar to what is defined in <xref target="trickle-ice" format="default" sectionFormat="of" derivedContent="Section 4.3.2"/>, as per <xref target="RFC9429" format="default" sectionFormat="of" derivedContent="RFC9429"/>, only
          "m=" sections not marked as bundle-only can gather ICE candidates, so
          given that the "max-bundle" policy is being used, the SDP fragment
          will contain only the offerer-tagged "m=" line of the bundle group.  A
          WHIP client sending a PATCH request for performing ICE restart
          <bcp14>MUST</bcp14> contain an If-Match header field with a
          field-value of "*" as per <xref section="13.1.1" sectionFormat="of" target="RFC9110" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9110#section-13.1.1" derivedContent="RFC9110"/>.</t>
          <t indent="0" pn="section-4.3.3-3"><xref target="RFC8840" format="default" sectionFormat="of" derivedContent="RFC8840"/> states that an agent <bcp14>MUST</bcp14>
          discard any received requests containing "ice-pwd" and "ice-ufrag"
          attributes that do not match those of the current ICE Negotiation
          Session. However, any WHIP session receiving updated "ice-pwd"
          and "ice-ufrag" attributes <bcp14>MUST</bcp14> consider the request
          as performing an ICE restart instead and, if supported,
          <bcp14>SHALL</bcp14> return a "200 OK" with an
          "application/trickle-ice-sdpfrag" body containing the new ICE
          username fragment and password and a new set of ICE candidates for
          the WHIP session. Also, the "200 OK" response for a successful ICE
          restart <bcp14>MUST</bcp14> contain the new entity-tag corresponding
          to the new ICE session in an ETag response header field and
          <bcp14>MAY</bcp14> contain a new set of ICE candidates for the media
          server.</t>
          <t indent="0" pn="section-4.3.3-4">As defined in <xref section="4.4.1.1.1" sectionFormat="of" target="RFC8839" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8839#section-4.4.1.1.1" derivedContent="RFC8839"/>, the set of candidates after an ICE restart may
          include some, none, or all of the previous candidates for that data
          stream and may include a totally new set of candidates. Therefore, after
          performing a successful ICE restart, both the WHIP client and the
          WHIP session <bcp14>MUST</bcp14> replace the previous set of remote
          candidates with the new set exchanged in the HTTP PATCH request and
          response, discarding any remote ICE candidate not present on the new
          set. Both the WHIP client and the WHIP session <bcp14>MUST</bcp14>
          ensure that the HTTP PATCH request and response bodies include the
          same "ice-options," "ice-pacing," and "ice-lite" attributes as those
          used in the SDP offer or answer.</t>
          <t indent="0" pn="section-4.3.3-5">If the ICE restart request cannot be satisfied by the WHIP
          session, the resource <bcp14>MUST</bcp14> return an appropriate HTTP
          error code and <bcp14>MUST NOT</bcp14> terminate the session
          immediately and keep the existing ICE session. The WHIP client
          <bcp14>MAY</bcp14> retry performing a new ICE restart or terminate
          the session by issuing an HTTP DELETE request instead. In any case,
          the session <bcp14>MUST</bcp14> be terminated if the ICE consent
          expires as a consequence of the failed ICE restart as per <xref section="5.1" sectionFormat="of" target="RFC7675" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7675#section-5.1" derivedContent="RFC7675"/>.</t>
          <t indent="0" pn="section-4.3.3-6">In case of unstable network conditions, the ICE restart HTTP
          PATCH requests and responses might be received out of order. In
          order to mitigate this scenario, when the client performs an ICE
          restart, it <bcp14>MUST</bcp14> discard any previous ICE username fragment
          and password and ignore any further HTTP PATCH response
          received from a pending HTTP PATCH request. WHIP clients
          <bcp14>MUST</bcp14> apply only the ICE information received in the
          response to the last sent request. If there is a mismatch between
          the ICE information at the WHIP client and at the WHIP session
          (because of an out-of-order request), the Session Traversal
          Utilities for NAT (STUN) requests will contain invalid ICE
          information and will be dropped by the receiving side. If this
          situation is detected by the WHIP client, it <bcp14>MUST</bcp14>
          send a new ICE restart request to the server.</t>
          <t indent="0" pn="section-4.3.3-7"><xref target="trickle-restart-example" format="default" sectionFormat="of" derivedContent="Figure 4"/> demonstrates a Trickle ICE
          restart procedure example. The WHIP client sends a PATCH request
          containing updated ICE information, including a new username fragment and
          password, along with newly gathered ICE candidates. In response, the
          WHIP session provides ICE information for the session after the ICE
          restart, including the updated username fragment and password, as well as the
          previous ICE candidate.</t>
          <figure anchor="trickle-restart-example" align="left" suppress-title="false" pn="figure-4">
            <name slugifiedName="name-example-of-an-ice-restart-r">Example of an ICE Restart Request and Response</name>
            <sourcecode type="http-message" markers="false" pn="section-4.3.3-8.1">
PATCH /session/id HTTP/1.1
Host: whip.example.com
If-Match: "*"
Content-Type: application/trickle-ice-sdpfrag
Content-Length: 82

a=ice-options:trickle ice2
a=group:BUNDLE 0 1
m=audio 9 UDP/TLS/RTP/SAVPF 111
a=mid:0
a=ice-ufrag:ysXw
a=ice-pwd:vw5LmwG4y/e6dPP/zAP9Gp5k
a=candidate:1387637174 1 udp 2122260223 192.0.2.1 61764 typ host
   generation 0 ufrag EsAw network-id 1
a=candidate:3471623853 1 udp 2122194687 198.51.100.2 61765 typ host
   generation 0 ufrag EsAw network-id 2
a=candidate:473322822 1 tcp 1518280447 192.0.2.1 9 typ host tcptype
   active generation 0 ufrag EsAw network-id 1
a=candidate:2154773085 1 tcp 1518214911 198.51.100.2 9 typ host
   tcptype active generation 0 ufrag EsAw network-id 2

HTTP/1.1 200 OK
ETag: "abccd"
Content-Type: application/trickle-ice-sdpfrag
Content-Length: 252

a=ice-lite
a=ice-options:trickle ice2
a=group:BUNDLE 0 1
m=audio 9 UDP/TLS/RTP/SAVPF 111
a=mid:0
a=ice-ufrag:289b31b754eaa438
a=ice-pwd:0b66f472495ef0ccac7bda653ab6be49ea13114472a5d10a
a=candidate:1 1 udp 2130706431 198.51.100.1 39132 typ host
a=end-of-candidates
</sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="webrtc-constraints" numbered="true" removeInRFC="false" toc="include" pn="section-4.4">
        <name slugifiedName="name-webrtc-constraints">WebRTC Constraints</name>
        <t indent="0" pn="section-4.4-1">To simplify the implementation of WHIP in both clients and media
        servers, WHIP introduces specific restrictions on WebRTC usage. The
        following subsections will explain these restrictions in detail.</t>
        <section anchor="sdp-bundle" numbered="true" removeInRFC="false" toc="include" pn="section-4.4.1">
          <name slugifiedName="name-sdp-bundle">SDP Bundle</name>
          <t indent="0" pn="section-4.4.1-1">Both the WHIP client and the WHIP endpoint <bcp14>SHALL</bcp14>
          support <xref target="RFC9143" format="default" sectionFormat="of" derivedContent="RFC9143"/> and use the "max-bundle" policy as
          defined in <xref target="RFC9429" format="default" sectionFormat="of" derivedContent="RFC9429"/>. The WHIP client and the media
          server <bcp14>MUST</bcp14> support multiplexed media associated with
          the BUNDLE group as per <xref section="9" sectionFormat="of" target="RFC9143" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9143#section-9" derivedContent="RFC9143"/>. In addition, per <xref target="RFC9143" format="default" sectionFormat="of" derivedContent="RFC9143"/>, the
          WHIP client and media server <bcp14>SHALL</bcp14> use RTP/RTCP
          multiplexing for all bundled media. In order to reduce the network
          resources required at the media server, both the WHIP client and
          WHIP endpoints <bcp14>MUST</bcp14> include the "rtcp-mux-only"
          attribute in each bundled "m=" section as per <xref section="3" sectionFormat="of" target="RFC8858" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8858#section-3" derivedContent="RFC8858"/>.</t>
        </section>
        <section anchor="single-mediastream" numbered="true" removeInRFC="false" toc="include" pn="section-4.4.2">
          <name slugifiedName="name-single-mediastream">Single MediaStream</name>
          <t indent="0" pn="section-4.4.2-1">WHIP only supports a single MediaStream as defined in <xref target="RFC8830" format="default" sectionFormat="of" derivedContent="RFC8830"/>; therefore, all "m=" sections <bcp14>MUST</bcp14>
          contain a "msid" attribute with the same value. The MediaStream
          <bcp14>MUST</bcp14> contain at least one MediaStreamTrack of any
          media kind, and it <bcp14>MUST NOT</bcp14> have two or more 
          MediaStreamTracks for the same media (audio or video). However, it
          would be possible for future revisions of this specification to allow more
          than a single MediaStream or MediaStreamTrack of each media
          kind. Therefore, in order to ensure forward compatibility, if the
          number of audio and/or video MediaStreamTracks or the number of
          MediaStreams are not supported by the WHIP endpoint, it
          <bcp14>MUST</bcp14> reject the HTTP POST request with a "422
          Unprocessable Content" or "400 Bad Request" error response. The WHIP
          endpoint <bcp14>MAY</bcp14> also return a problem statement that provides further error
          details about the failed request, as
          recommended in <xref target="http-usage" format="default" sectionFormat="of" derivedContent="Section 4.1"/>.</t>
        </section>
        <section anchor="no-partially-successful-answers" numbered="true" removeInRFC="false" toc="include" pn="section-4.4.3">
          <name slugifiedName="name-no-partially-successful-ans">No Partially Successful Answers</name>
          <t indent="0" pn="section-4.4.3-1">The WHIP endpoint <bcp14>SHOULD NOT</bcp14> reject individual
          "m=" sections, as specified in <xref section="5.3.1" sectionFormat="of" target="RFC9429" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9429#section-5.3.1" derivedContent="RFC9429"/>, if an error occurs when processing the "m="
          section; instead, it <bcp14>SHOULD</bcp14> reject the HTTP POST request with a "422 Unprocessable
          Content" or "400 Bad Request" error response to prevent having
          partially successful ingest sessions, which can be misleading to end
          users. The WHIP endpoint <bcp14>MAY</bcp14> also return a problem
          statement as recommended in <xref target="http-usage" format="default" sectionFormat="of" derivedContent="Section 4.1"/> proving
          further error details about the failed request.</t>
        </section>
        <section anchor="dtls-setup-role-and-sdp-setup-attribute" numbered="true" removeInRFC="false" toc="include" pn="section-4.4.4">
          <name slugifiedName="name-dtls-setup-role-and-sdp-set">DTLS Setup Role and SDP "setup" Attribute</name>
          <t indent="0" pn="section-4.4.4-1">When a WHIP client sends an SDP offer, it <bcp14>SHOULD</bcp14>
          insert an SDP "setup" attribute with an "actpass" attribute value,
          as defined in <xref target="RFC8842" format="default" sectionFormat="of" derivedContent="RFC8842"/>. However, if the WHIP client
          only implements the DTLS client role, it <bcp14>MAY</bcp14> use an
          SDP "setup" attribute with an "active" attribute value. If the WHIP
          endpoint does not support an SDP offer with an SDP "setup" attribute
          with an "active" attribute value, it <bcp14>SHOULD</bcp14> reject
          the request with a "422 Unprocessable Content" or "400 Bad Request"
          error response.</t>
          <t indent="0" pn="section-4.4.4-2">NOTE: <xref target="RFC8842" format="default" sectionFormat="of" derivedContent="RFC8842"/> defines that the offerer
          must insert an SDP "setup" attribute with an "actpass" attribute
          value. However, the WHIP client will always communicate with a media
          server that is expected to support the DTLS server role, in which
          case the client might choose to only implement support for the DTLS
          client role.</t>
        </section>
        <section anchor="trickle-ice-and-ice-restarts" numbered="true" removeInRFC="false" toc="include" pn="section-4.4.5">
          <name slugifiedName="name-trickle-ice-and-ice-restart">Trickle ICE and ICE Restarts</name>
          <t indent="0" pn="section-4.4.5-1">The media server <bcp14>SHOULD</bcp14> support full ICE, unless
          it is connected to the Internet with an IP address that is
          accessible by each WHIP client that is authorized to use it, in
          which case it <bcp14>MAY</bcp14> support only ICE lite. The WHIP
          client <bcp14>MUST</bcp14> implement and use full ICE.</t>
          <t indent="0" pn="section-4.4.5-2">Trickle ICE and ICE restart support is <bcp14>OPTIONAL</bcp14>
          for both the WHIP clients and media servers as explained in <xref target="ice-support" format="default" sectionFormat="of" derivedContent="Section 4.3"/>.</t>
        </section>
      </section>
      <section anchor="load-balancing-and-redirections" numbered="true" removeInRFC="false" toc="include" pn="section-4.5">
        <name slugifiedName="name-load-balancing-and-redirect">Load Balancing and Redirections</name>
        <t indent="0" pn="section-4.5-1">WHIP endpoints and media servers might not be colocated on the same
        server, so it is possible to load balance incoming requests to
        different media servers.</t>
        <t indent="0" pn="section-4.5-2">WHIP clients <bcp14>SHALL</bcp14> support HTTP redirections as per
        <xref section="15.4" sectionFormat="of" target="RFC9110" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9110#section-15.4" derivedContent="RFC9110"/>. In order
        to avoid POST requests being redirected as GET requests, status codes
        "301 Moved Permanently" and "302 Found" <bcp14>MUST NOT</bcp14> be used; the preferred method
        for performing load balancing is via the "307 Temporary Redirect"
        response status code as described in <xref section="15.4.8" sectionFormat="of" target="RFC9110" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9110#section-15.4.8" derivedContent="RFC9110"/>. Redirections are not required
        to be supported for the PATCH and DELETE requests.</t>
        <t indent="0" pn="section-4.5-3">In case of high load, the WHIP endpoints <bcp14>MAY</bcp14> return
        a "503 Service Unavailable" response indicating that the server is
        currently unable to handle the request due to a temporary overload or
        scheduled maintenance as described in <xref section="15.6.4" sectionFormat="of" target="RFC9110" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9110#section-15.6.4" derivedContent="RFC9110"/>, which will likely be alleviated
        after some delay. The WHIP endpoint might send a Retry-After header
        field indicating the minimum time that the user agent ought to wait
        before making a follow-up request as described in <xref section="10.2.3" sectionFormat="of" target="RFC9110" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9110#section-10.2.3" derivedContent="RFC9110"/>.</t>
      </section>
      <section anchor="stunturn-server-configuration" numbered="true" removeInRFC="false" toc="include" pn="section-4.6">
        <name slugifiedName="name-stun-turn-server-configurat">STUN/TURN Server Configuration</name>
        <t indent="0" pn="section-4.6-1">The WHIP endpoint <bcp14>MAY</bcp14> return STUN/TURN server configuration URLs and credentials usable by the client in the "201 Created" response to the HTTP POST request to the WHIP endpoint URL.</t>
        <t indent="0" pn="section-4.6-2">A reference to each STUN/TURN server will be returned using the Link header field <xref target="RFC8288" format="default" sectionFormat="of" derivedContent="RFC8288"/> with a "rel" attribute value of "ice-server". The Link target URI is the server URI as defined in <xref target="RFC7064" format="default" sectionFormat="of" derivedContent="RFC7064"/> and <xref target="RFC7065" format="default" sectionFormat="of" derivedContent="RFC7065"/>. The credentials are encoded in the Link target attributes as follows:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.6-3">
          <li pn="section-4.6-3.1">username: If the Link header field represents a Traversal Using Relays around NAT (TURN) server, then this attribute specifies the username to use with that TURN server.
            </li>
          <li pn="section-4.6-3.2">credential: This attribute represents a long-term
            authentication password, as described in <xref section="9.2" sectionFormat="of" target="RFC8489" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8489#section-9.2" derivedContent="RFC8489"/>.</li>
        </ul>
        <t indent="0" pn="section-4.6-4"><xref target="stun-server-example" format="default" sectionFormat="of" derivedContent="Figure 5"/> illustrates the Link headers included in a "201 Created" response, providing the ICE server URLs and associated credentials.</t>
        <figure anchor="stun-server-example" align="left" suppress-title="false" pn="figure-5">
          <name slugifiedName="name-example-of-a-stun-turn-serv">Example of a STUN/TURN Server's Configuration</name>
          <sourcecode type="http-message" markers="false" pn="section-4.6-5.1">
Link: &lt;stun:stun.example.net&gt;; rel="ice-server"
Link: &lt;turn:turn.example.net?transport=udp&gt;; rel="ice-server";
      username="user"; credential="myPassword"
Link: &lt;turn:turn.example.net?transport=tcp&gt;; rel="ice-server";
      username="user"; credential="myPassword"
Link: &lt;turns:turn.example.net?transport=tcp&gt;; rel="ice-server";
      username="user"; credential="myPassword"
</sourcecode>
        </figure>
        <t indent="0" pn="section-4.6-6">NOTE: The naming of both the "rel" attribute value of
        "ice-server" and the target attributes follows that used in the
        RTCConfiguration dictionary in Section 4.2.1 of the W3C WebRTC
        recommendation (see <xref target="W3C.REC-webrtc-20250313" format="default" sectionFormat="of" derivedContent="W3C.REC-webrtc-20250313"/>). The "rel"
        attribute value of "ice-server" is not prepended with the
        "urn:ietf:params:whip:" so it can be reused by other specifications,
        which may use this mechanism to configure the usage of STUN/TURN
        servers.</t>
        <t indent="0" pn="section-4.6-7">NOTE: Depending on the ICE agent implementation, the WHIP
        client may need to call the setConfiguration method before calling the
        setLocalDescription method with the local SDP offer in order
        to avoid having to perform an ICE restart for applying the updated
        STUN/TURN server configuration on the next ICE gathering
        phase.</t>
        <t indent="0" pn="section-4.6-8">There are some WebRTC implementations that do not support updating
        the STUN/TURN server configuration after the local offer has been
        created as specified in <xref section="4.1.18" sectionFormat="of" target="RFC9429" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9429#section-4.1.18" derivedContent="RFC9429"/>. In order to support these clients, the WHIP
        endpoint <bcp14>MAY</bcp14> also include the STUN/TURN server
        configuration in the responses to OPTIONS requests sent to the WHIP
        endpoint URL before the POST request is sent. However, this method is
        <bcp14>NOT RECOMMENDED</bcp14> to be used by the WHIP clients, and if it is
        supported by the underlying WHIP client's WebRTC implementation, the
        WHIP client <bcp14>SHOULD</bcp14> wait for the information to be
        returned by the WHIP endpoint in the response of the HTTP POST request
        instead.</t>
        <t indent="0" pn="section-4.6-9">The generation of the TURN server credentials may require
        sending a request to an external provider, which can both add
        latency to the OPTIONS request processing and increase the processing
        required to handle that request. In order to prevent this, the WHIP
        endpoint <bcp14>SHOULD NOT</bcp14> return the STUN/TURN server
        configuration if the OPTIONS request is a preflight request for CORS
        as defined in <xref target="FETCH" format="default" sectionFormat="of" derivedContent="FETCH"/>, that is, if the OPTIONS request
        does not contain an Access-Control-Request-Method with a POST value
        and the Access-Control-Request-Headers HTTP header does not contain
        the Link value.</t>
        <t indent="0" pn="section-4.6-10">The WHIP clients <bcp14>MAY</bcp14> also support configuring the
        STUN/TURN server URIs with long-term credentials provided by either
        the broadcasting service or an external TURN provider, overriding the
        values provided by the WHIP endpoint.</t>
        <section anchor="congestion-control" numbered="true" removeInRFC="false" toc="include" pn="section-4.6.1">
          <name slugifiedName="name-congestion-control">Congestion Control</name>
          <t indent="0" pn="section-4.6.1-1"><xref target="RFC8836" format="default" sectionFormat="of" derivedContent="RFC8836"/> defines the congestion control
          requirements for interactive real-time media to be used in
          WebRTC. These requirements are based on the assumption that the data
          needs to be provided continuously within a very limited time window
          (a delay of no more than hundreds of milliseconds end-to-end). If
          the latency target is higher, some of the requirements present in
          <xref target="RFC8836" format="default" sectionFormat="of" derivedContent="RFC8836"/> could be relaxed to allow more flexible
          implementations.</t>
        </section>
      </section>
      <section anchor="authentication-and-authorization" numbered="true" removeInRFC="false" toc="include" pn="section-4.7">
        <name slugifiedName="name-authentication-and-authoriz">Authentication and Authorization</name>
        <t indent="0" pn="section-4.7-1">All WHIP endpoints, sessions, and clients <bcp14>MUST</bcp14>
        support HTTP authentication as per <xref section="11" sectionFormat="of" target="RFC9110" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9110#section-11" derivedContent="RFC9110"/>. Additionally, in order to
        ensure interoperability, bearer token authentication as defined in the
        next section <bcp14>MUST</bcp14> be supported by all WHIP
        entities. However, this does not preclude the support of additional
        HTTP authentication schemes as defined in <xref section="11.6" sectionFormat="of" target="RFC9110" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9110#section-11.6" derivedContent="RFC9110"/>.</t>
        <section anchor="bearer-token-authentication" numbered="true" removeInRFC="false" toc="include" pn="section-4.7.1">
          <name slugifiedName="name-bearer-token-authentication">Bearer Token Authentication</name>
          <t indent="0" pn="section-4.7.1-1">WHIP endpoints and sessions <bcp14>MAY</bcp14> require the HTTP
          request to be authenticated using an HTTP Authorization header field
          with a bearer token as specified in <xref section="2.1" sectionFormat="of" target="RFC6750" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6750#section-2.1" derivedContent="RFC6750"/>. WHIP clients
          <bcp14>MUST</bcp14> implement this authentication and authorization
          mechanism and send the HTTP Authorization header field in all HTTP
          requests sent to either the WHIP endpoint or session (except the
          preflight OPTIONS requests for CORS).</t>
          <t indent="0" pn="section-4.7.1-2">The nature, syntax, and semantics of the bearer token, as well as
          how to distribute it to the client, are outside the scope of this
          document. Examples of tokens that could be used
          include, but are not limited to, JSON Web Tokens (JWTs) as per
          <xref target="RFC8725" format="default" sectionFormat="of" derivedContent="RFC8725"/> and a shared secret
          stored on a database. The tokens are typically made available to the
          end user alongside the WHIP endpoint URL and configured on the WHIP
          clients (similar to the way Real Time Messaging Protocol (RTMP) URLs
          and Stream Keys are distributed).</t>
          <t indent="0" pn="section-4.7.1-3">WHIP endpoints and sessions could perform the authentication and
          authorization by encoding an authentication token within the URLs
          for the WHIP endpoints or sessions instead. In case the WHIP client
          is not configured to use a bearer token, the HTTP Authorization
          header field <bcp14>MUST NOT</bcp14> be sent in any request.</t>
        </section>
      </section>
      <section anchor="simulcast-and-scalable-video-coding" numbered="true" removeInRFC="false" toc="include" pn="section-4.8">
        <name slugifiedName="name-simulcast-and-scalable-vide">Simulcast and Scalable Video Coding</name>
        <t indent="0" pn="section-4.8-1">Simulcast as per <xref target="RFC8853" format="default" sectionFormat="of" derivedContent="RFC8853"/> <bcp14>MAY</bcp14> be
        supported by both the media servers and WHIP clients through
        negotiation in the SDP offer/answer.</t>
        <t indent="0" pn="section-4.8-2">If the client supports simulcast and wants to enable it for
        ingesting, it <bcp14>MUST</bcp14> negotiate the support in the SDP
        offer according to the procedures in <xref section="5.3" sectionFormat="of" target="RFC8853" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8853#section-5.3" derivedContent="RFC8853"/>. A server accepting a simulcast
        offer <bcp14>MUST</bcp14> create an answer according to the procedures
        in <xref section="5.3.2" sectionFormat="of" target="RFC8853" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8853#section-5.3.2" derivedContent="RFC8853"/>.</t>
        <t indent="0" pn="section-4.8-3">It is possible for both media servers and WHIP clients to support
        Scalable Video Coding (SVC). However, as there is no universal
        negotiation mechanism in SDP for SVC, the encoder must consider the
        negotiated codec(s), intended usage, and SVC support in available
        decoders when configuring SVC.</t>
      </section>
      <section anchor="protocol-extensions" numbered="true" removeInRFC="false" toc="include" pn="section-4.9">
        <name slugifiedName="name-protocol-extensions">Protocol Extensions</name>
        <t indent="0" pn="section-4.9-1">In order to support future extensions to be defined for WHIP, a common procedure for registering and announcing the new
        extensions is defined.</t>
        <t indent="0" pn="section-4.9-2">Protocol extensions supported by the WHIP sessions
        <bcp14>MUST</bcp14> be advertised to the WHIP client in the "201
        Created" response to the initial HTTP POST request sent to the WHIP
        endpoint.  The WHIP endpoint <bcp14>MUST</bcp14> return one Link
        header field for each extension that it supports, with the extension
        "rel" attribute value containing the extension URN and the URL for the
        HTTP resource that will be available for receiving requests related to
        that extension.</t>
        <t indent="0" pn="section-4.9-3">Protocol extensions are optional for both WHIP clients and
        servers. WHIP clients <bcp14>MUST</bcp14> ignore any Link target attribute
        with an unknown "rel" attribute value, and WHIP sessions <bcp14>MUST NOT</bcp14> require the usage of any extension.</t>
        <t indent="0" pn="section-4.9-4">Each protocol extension <bcp14>MUST</bcp14> register a unique "rel"
        attribute value that starts with the prefix
        "urn:ietf:params:whip:ext" in the "WebRTC-HTTP Ingestion Protocol (WHIP)
    Extension URNs" registry (<xref target="urn-whip-ext-registry" format="default" sectionFormat="of" derivedContent="Section 6.4"/>).</t>
        <t indent="0" pn="section-4.9-5">For example, consider a potential extension of server-to-client
        communication using server-sent events as specified in Section 9.2 of
        <xref target="HTML" format="default" sectionFormat="of" derivedContent="HTML"/>. The URL for connecting to the server-sent event
        resource for the ingested stream could be returned in the initial HTTP
        "201 Created" response with a Link header field and a "rel"
        attribute of "urn:ietf:params:whip:ext:example:server-sent-events"
        (this document does not specify such an extension and uses it only as
        an example).</t>
        <t indent="0" pn="section-4.9-6">In this theoretical case, the "201 Created" response to the HTTP
        POST request would look like:</t>
        <t indent="0" pn="section-4.9-7"><xref target="protocol-extension-example" format="default" sectionFormat="of" derivedContent="Figure 6"/> shows the "201 Created"
        response to the HTTP POST request in this theoretical case (i.e., the
        WHIP extension supported by the WHIP session, as indicated in
        the Link header of the "201 Created" response).
        </t>
        <figure anchor="protocol-extension-example" align="left" suppress-title="false" pn="figure-6">
          <name slugifiedName="name-example-of-a-whip-extension">Example of a WHIP Extension</name>
          <sourcecode type="http-message" markers="false" pn="section-4.9-8.1">
HTTP/1.1 201 Created
Content-Type: application/sdp
Location: https://whip.example.com/session/id
Link: &lt;https://whip.example.com/session/id/sse&gt;;
      rel="urn:ietf:params:whip:ext:example:server-sent-events"
</sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" removeInRFC="false" toc="include" pn="section-5">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-5-1">This document specifies a new protocol on top of HTTP and WebRTC;
      thus, security protocols and considerations from related specifications
      apply to the WHIP specification. These include:</t>
      <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-5-2">
        <li pn="section-5-2.1">WebRTC security considerations: See <xref target="RFC8826" format="default" sectionFormat="of" derivedContent="RFC8826"/>. HTTPS <bcp14>SHALL</bcp14> be used in order to
          preserve the WebRTC security model.</li>
        <li pn="section-5-2.2">Transport Layer Security (TLS): See <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/> and
          <xref target="RFC9147" format="default" sectionFormat="of" derivedContent="RFC9147"/>.</li>
        <li pn="section-5-2.3">HTTP security: See <xref section="11" sectionFormat="of" target="RFC9112" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9112#section-11" derivedContent="RFC9112"/> and <xref section="17" sectionFormat="of" target="RFC9110" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9110#section-17" derivedContent="RFC9110"/>.</li>
        <li pn="section-5-2.4">URI security: See <xref section="7" sectionFormat="of" target="RFC3986" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3986#section-7" derivedContent="RFC3986"/>.</li>
      </ul>
      <t indent="0" pn="section-5-3">On top of that, WHIP exposes a thin new attack surface
      specific to the REST API methods used within it:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5-4">
        <li pn="section-5-4.1">HTTP POST flooding and resource exhaustion: It would be possible
          for an attacker in possession of authentication credentials valid
          for ingesting a WHIP stream to make multiple HTTP POST requests to the WHIP
          endpoint.  This will force the WHIP endpoint to process the incoming
          SDP and allocate resources for being able to set up the DTLS/ICE
          connection.  While the malicious client does not need to initiate
          the DTLS/ICE connection at all, the WHIP session will have to wait
          for the DTLS/ICE connection timeout in order to release the
          associated resources.  If the connection rate is high enough, this
          could lead to resource exhaustion on the servers handling the
          requests, and they will not be able to process legitimate incoming
          ingests.  In order to prevent this scenario, WHIP endpoints
          <bcp14>SHOULD</bcp14> implement a rate limit and avalanche control
          mechanism for incoming initial HTTP POST requests.</li>
        <li pn="section-5-4.2">Insecure Direct Object References (IDORs) for WHIP session URLs:
     If the URLs returned by the WHIP endpoint for the location of WHIP
     sessions are easy to guess, it would be possible for an
     attacker to send multiple HTTP DELETE requests and terminate all
     the WHIP sessions currently running.
	  In order to prevent this scenario,
          WHIP endpoints <bcp14>SHOULD</bcp14> generate URLs with enough
          randomness, using a cryptographically secure pseudorandom number
          generator following the best practices in "Randomness Requirements
          for Security" <xref target="RFC4086" format="default" sectionFormat="of" derivedContent="RFC4086"/>, and implement a rate limit and avalanche control
          mechanism for HTTP DELETE requests.  The security considerations for
          Universally Unique IDentifiers (UUIDs) in <xref section="8" sectionFormat="of" target="RFC9562" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9562#section-8" derivedContent="RFC9562"/> are applicable for generating the
          WHIP session URLs.</li>
        <li pn="section-5-4.3">HTTP PATCH flooding: Similar to the HTTP POST flooding, a
          malicious client could also create resource exhaustion by sending
          multiple HTTP PATCH requests to the WHIP session, although the WHIP
          sessions can limit the impact by not allocating new ICE candidates
          and reusing the existing ICE candidates when doing ICE restarts.  In
          order to prevent this scenario, WHIP endpoints <bcp14>SHOULD</bcp14>
          implement a rate limit and avalanche control mechanism for incoming
          HTTP PATCH requests.</li>
      </ul>
    </section>
    <section anchor="iana-considerations" numbered="true" removeInRFC="false" toc="include" pn="section-6">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-6-1">Per this specification, IANA has added a new link relation type and
   a new URN sub-namespace for WHIP. IANA has also created registries
   to manage entries within the "urn:ietf:params:whip" and
   "urn:ietf:params:whip:ext" namespaces.
      </t>
      <section anchor="link-relation-type-ice-server" numbered="true" removeInRFC="false" toc="include" pn="section-6.1">
        <name slugifiedName="name-link-relation-type-ice-serv">Link Relation Type: ice-server</name>
        <t indent="0" pn="section-6.1-1">The link relation type below has been registered by IANA in the
        "Link Relation Types" registry per <xref section="4.2" sectionFormat="of" target="RFC8288" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8288#section-4.2" derivedContent="RFC8288"/>:</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-6.1-2">
          <dt pn="section-6.1-2.1">Relation Name:</dt>
          <dd pn="section-6.1-2.2">ice-server</dd>
          <dt pn="section-6.1-2.3">Description:</dt>
          <dd pn="section-6.1-2.4">Conveys the STUN and TURN servers that can be used by
        an ICE agent to establish a connection with a peer.</dd>
          <dt pn="section-6.1-2.5">Reference:</dt>
          <dd pn="section-6.1-2.6">RFC 9725</dd>
        </dl>
      </section>
      <section anchor="urn-whip-subspace" numbered="true" removeInRFC="false" toc="include" pn="section-6.2">
        <name slugifiedName="name-urn-sub-namespace-for-whip-">URN Sub-namespace for WHIP (urn:ietf:params:whip)</name>
        <t indent="0" pn="section-6.2-1"> IANA has added a new entry in the "IETF URN Sub-namespace for Registered
Protocol Parameter Identifiers" registry, following the template in <xref target="RFC3553" format="default" sectionFormat="of" derivedContent="RFC3553"/>:</t>
        <dl newline="false" indent="3" spacing="normal" pn="section-6.2-2">
          <dt pn="section-6.2-2.1">Registry name:</dt>
          <dd pn="section-6.2-2.2">whip</dd>
          <dt pn="section-6.2-2.3">Specification:</dt>
          <dd pn="section-6.2-2.4">RFC 9725</dd>
          <dt pn="section-6.2-2.5">Repository:</dt>
          <dd pn="section-6.2-2.6">&lt;https://www.iana.org/assignments/whip&gt;</dd>
          <dt pn="section-6.2-2.7">Index value:</dt>
          <dd pn="section-6.2-2.8">An IANA-assigned positive integer that identifies
 the registration.  The first entry added to this registry uses the value 1,
 and this value is incremented for each subsequent entry added to the
 registry.</dd>
        </dl>
        <t indent="0" pn="section-6.2-3">To manage this sub-namespace, IANA has created two registries within
a new registry group called "WebRTC-HTTP Ingestion Protocol (WHIP)":</t>
        <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-6.2-4">
          <li pn="section-6.2-4.1">"WebRTC-HTTP Ingestion Protocol (WHIP) URNs" registry (<xref target="urn-whip-registry" format="default" sectionFormat="of" derivedContent="Section 6.3"/>)</li>
          <li pn="section-6.2-4.2">"WebRTC-HTTP Ingestion Protocol (WHIP) Extension URNs" registry (<xref target="urn-whip-ext-registry" format="default" sectionFormat="of" derivedContent="Section 6.4"/>)</li>
        </ul>
      </section>
      <section anchor="urn-whip-registry" numbered="true" removeInRFC="false" toc="include" pn="section-6.3">
        <name slugifiedName="name-webrtc-http-ingestion-proto">WebRTC-HTTP Ingestion Protocol (WHIP) URNs Registry</name>
        <t indent="0" pn="section-6.3-1">The "WebRTC-HTTP Ingestion Protocol (WHIP) URNs" registry is used
          to manage entries within the "urn:ietf:params:whip" namespace. The
          registration procedure is "Specification Required" <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>.  The registry contains the following fields:
	  URN, Name, Reference, IANA Registry Reference, and Change Controller. This document is listed as the reference.</t>
        <t indent="0" pn="section-6.3-2">The registry contains a single initial entry:</t>
        <dl spacing="normal" indent="3" newline="false" pn="section-6.3-3">
          <dt pn="section-6.3-3.1">URN:</dt>
          <dd pn="section-6.3-3.2">urn:ietf:params:whip:ext</dd>
          <dt pn="section-6.3-3.3">Name:</dt>
          <dd pn="section-6.3-3.4">WebRTC-HTTP Ingestion Protocol (WHIP) extension URNs</dd>
          <dt pn="section-6.3-3.5">Reference:</dt>
          <dd pn="section-6.3-3.6">
            <xref target="urn-whip-ext-registry" format="default" sectionFormat="of" derivedContent="Section 6.4"/> of RFC 9725</dd>
          <dt pn="section-6.3-3.7">IANA Registry Reference:</dt>
          <dd pn="section-6.3-3.8">See "WebRTC-HTTP Ingestion Protocol (WHIP) Extension URNs" on &lt;https://www.iana.org/assignments/whip&gt;</dd>
          <dt pn="section-6.3-3.9">Change Controller:</dt>
          <dd pn="section-6.3-3.10">IETF</dd>
        </dl>
      </section>
      <section anchor="urn-whip-ext-registry" numbered="true" removeInRFC="false" toc="include" pn="section-6.4">
        <name slugifiedName="name-webrtc-http-ingestion-protoc">WebRTC-HTTP Ingestion Protocol (WHIP) Extension URNs Registry</name>
        <t indent="0" pn="section-6.4-1">The "WebRTC-HTTP Ingestion Protocol (WHIP) Extension URNs" registry is
          used to manage entries within the "urn:ietf:params:whip:ext"
          namespace.  The registration procedure is "Specification Required"
          <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>.
          The registry contains the following fields:
	  URN, Name, Reference, IANA Registry Reference, and Change Controller. This document is listed as the reference.
        </t>
        <t indent="0" pn="section-6.4-2">A WHIP extension URN is used as a value in the "rel" attribute of the Link header as defined in <xref target="protocol-extensions" format="default" sectionFormat="of" derivedContent="Section 4.9"/> for the purpose of signaling the WHIP extensions supported by the WHIP endpoint. WHIP extension URNs have an "ext" type.</t>
      </section>
      <section anchor="registering-whip-protocol-extensions-urns" numbered="true" removeInRFC="false" toc="include" pn="section-6.5">
        <name slugifiedName="name-registering-whip-urns-and-w">Registering WHIP URNs and WHIP Extension URNs</name>
        <t indent="0" pn="section-6.5-1">This section defines the process for registering new URNs in the
        "WebRTC-HTTP Ingestion Protocol (WHIP) URNs" registry (<xref target="urn-whip-registry" format="default" sectionFormat="of" derivedContent="Section 6.3"/>) and the "WebRTC-HTTP Ingestion Protocol
        (WHIP) Extension URNs" registry (<xref target="urn-whip-ext-registry" format="default" sectionFormat="of" derivedContent="Section 6.4"/>).
        </t>
        <section anchor="registration-procedure" numbered="true" removeInRFC="false" toc="include" pn="section-6.5.1">
          <name slugifiedName="name-registration-procedure">Registration Procedure</name>
          <t indent="0" pn="section-6.5.1-1">The IETF has created a mailing list, &lt;wish@ietf.org&gt;, which can
          be used for public discussion of proposals
          prior to registration.  Use of the mailing list is strongly
          encouraged. A designated expert (DE) <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>, appointed by the IESG,  will monitor the &lt;wish@ietf.org&gt; mailing list
          and review registrations.</t>
          <t indent="0" pn="section-6.5.1-2">Registration of new entries in the WHIP registries defined in this document
          <bcp14>MUST</bcp14> be documented in a permanent and readily
          available public specification, in sufficient detail so that
          interoperability between independent implementations is possible, and
          reviewed by the DE as per <xref section="4.6" sectionFormat="of" target="RFC8126" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8126#section-4.6" derivedContent="RFC8126"/>.  A Standards Track RFC is
          <bcp14>REQUIRED</bcp14> for the registration of new value data types
          that modify existing properties.  A Standards Track RFC is also
          <bcp14>REQUIRED</bcp14> for registration of WHIP extension
          URNs that modify WHIP extensions previously documented in
          an existing RFC.</t>
          <t indent="0" pn="section-6.5.1-3">The registration procedure begins when a completed registration template, defined in <xref target="whip-protocol-extension-registration-template" format="default" sectionFormat="of" derivedContent="Section 6.5.3"/>, is sent to &lt;iana@iana.org&gt;.
   Decisions made by the DE can be appealed to an Applications and Real-Time (ART) Area Director, then to the IESG.
   The normal appeals procedure described in RFC 2026 <xref target="BCP9" format="default" sectionFormat="of" derivedContent="BCP9"/> is to be followed.</t>
          <t indent="0" pn="section-6.5.1-4">Once the registration procedure concludes successfully, IANA will create
   or modify the corresponding record in the "WebRTC-HTTP Ingestion Protocol (WHIP) URNs Registry" or "WebRTC-HTTP Ingestion Protocol (WHIP) Extension URNs" registry.</t>
          <t indent="0" pn="section-6.5.1-5">An RFC specifying one or more new WHIP extension URNs <bcp14>MUST</bcp14> include the
   completed registration template(s), which <bcp14>MAY</bcp14> be expanded with
   additional information. These completed template(s) are intended to go
   in the body of the document, not in the IANA Considerations section.
   The RFC <bcp14>MUST</bcp14> include the syntax and semantics of any extension-specific attributes that may be provided in a Link header
   field advertising the extension.</t>
        </section>
        <section anchor="guidance-for-designated-experts" numbered="true" removeInRFC="false" toc="include" pn="section-6.5.2">
          <name slugifiedName="name-guidance-for-the-designated">Guidance for the Designated Expert</name>
          <t indent="0" pn="section-6.5.2-1">The DE is expected to do the following:</t>
          <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-6.5.2-2">
            <li pn="section-6.5.2-2.1">Ascertain the existence of suitable documentation (a
	  specification) as described in <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/> and verify
	  that the document is permanently and publicly
	  available. Specifications should be documented in an
	  Internet-Draft.</li>
            <li pn="section-6.5.2-2.2">Check the clarity of purpose and use of the requested
          registration.</li>
            <li pn="section-6.5.2-2.3">Verify that any request for one of these
          registrations has been made available for review and comments by
          posting the request to the &lt;wish@ietf.org&gt; mailing list.</li>
            <li pn="section-6.5.2-2.4">Ensure that any other request for a code point does not conflict with work that is active or already published by the IETF.</li>
          </ul>
        </section>
        <section anchor="whip-protocol-extension-registration-template" numbered="true" removeInRFC="false" toc="include" pn="section-6.5.3">
          <name slugifiedName="name-registration-template">Registration Template</name>
          <t indent="0" pn="section-6.5.3-1">A WHIP extension URN is defined by completing the following template:</t>
          <dl spacing="normal" indent="3" newline="false" pn="section-6.5.3-2">
            <dt pn="section-6.5.3-2.1">URN:</dt>
            <dd pn="section-6.5.3-2.2">A unique URN (e.g., "urn:ietf:params:whip:ext:example:server-sent-events")</dd>
            <dt pn="section-6.5.3-2.3">Name:</dt>
            <dd pn="section-6.5.3-2.4">A descriptive name (e.g., "Sender Side events")</dd>
            <dt pn="section-6.5.3-2.5">Reference:</dt>
            <dd pn="section-6.5.3-2.6">A formal reference to the publicly available specification</dd>
            <dt pn="section-6.5.3-2.7">IANA Registry Reference:</dt>
            <dd pn="section-6.5.3-2.8">The registry related to the new URN
	    </dd>
            <dt pn="section-6.5.3-2.9">Change Controller:</dt>
            <dd pn="section-6.5.3-2.10">For Standards Track documents, this is "IETF".
       Otherwise, this is the name of the person or body
       that has change control over the specification.</dd>
          </dl>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references" pn="section-7">
      <name slugifiedName="name-references">References</name>
      <references anchor="sec-normative-references" pn="section-7.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="FETCH" target="https://fetch.spec.whatwg.org" quoteTitle="true" derivedAnchor="FETCH">
          <front>
            <title>Fetch</title>
            <author>
              <organization showOnFrontPage="true">WHATWG</organization>
            </author>
          </front>
          <refcontent>WHATWG Living Standard</refcontent>
          <annotation>Commit snapshot: <eref target="https://fetch.spec.whatwg.org/commit-snapshots/edfa8d100cf1ecfde385f65c172e0e8d018fcd98/" brackets="angle"/>.</annotation>
        </reference>
        <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 fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <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 fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"/>
            <date month="June" year="2002"/>
            <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="RFC3553" target="https://www.rfc-editor.org/info/rfc3553" quoteTitle="true" derivedAnchor="RFC3553">
          <front>
            <title>An IETF URN Sub-namespace for Registered Protocol Parameters</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <author fullname="T. Hardie" initials="T." surname="Hardie"/>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <date month="June" year="2003"/>
            <abstract>
              <t indent="0">This document describes a new sub-delegation for the 'ietf' URN namespace for registered protocol items. The 'ietf' URN namespace is defined in RFC 2648 as a root for persistent URIs that refer to IETF- defined resources. 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="73"/>
          <seriesInfo name="RFC" value="3553"/>
          <seriesInfo name="DOI" value="10.17487/RFC3553"/>
        </reference>
        <reference anchor="RFC3986" target="https://www.rfc-editor.org/info/rfc3986" quoteTitle="true" derivedAnchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t indent="0">A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC4086" target="https://www.rfc-editor.org/info/rfc4086" quoteTitle="true" derivedAnchor="RFC4086">
          <front>
            <title>Randomness Requirements for Security</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="J. Schiller" initials="J." surname="Schiller"/>
            <author fullname="S. Crocker" initials="S." surname="Crocker"/>
            <date month="June" year="2005"/>
            <abstract>
              <t indent="0">Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts. However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities. The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
              <t indent="0">Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult. This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities. It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications. 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="106"/>
          <seriesInfo name="RFC" value="4086"/>
          <seriesInfo name="DOI" value="10.17487/RFC4086"/>
        </reference>
        <reference anchor="RFC5789" target="https://www.rfc-editor.org/info/rfc5789" quoteTitle="true" derivedAnchor="RFC5789">
          <front>
            <title>PATCH Method for HTTP</title>
            <author fullname="L. Dusseault" initials="L." surname="Dusseault"/>
            <author fullname="J. Snell" initials="J." surname="Snell"/>
            <date month="March" year="2010"/>
            <abstract>
              <t indent="0">Several applications extending the Hypertext Transfer Protocol (HTTP) require a feature to do partial resource modification. The existing HTTP PUT method only allows a complete replacement of a document. This proposal adds a new HTTP method, PATCH, to modify an existing HTTP resource. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5789"/>
          <seriesInfo name="DOI" value="10.17487/RFC5789"/>
        </reference>
        <reference anchor="RFC6585" target="https://www.rfc-editor.org/info/rfc6585" quoteTitle="true" derivedAnchor="RFC6585">
          <front>
            <title>Additional HTTP Status Codes</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <date month="April" year="2012"/>
            <abstract>
              <t indent="0">This document specifies additional HyperText Transfer Protocol (HTTP) status codes for a variety of common situations. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6585"/>
          <seriesInfo name="DOI" value="10.17487/RFC6585"/>
        </reference>
        <reference anchor="RFC6750" target="https://www.rfc-editor.org/info/rfc6750" quoteTitle="true" derivedAnchor="RFC6750">
          <front>
            <title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t indent="0">This specification describes how to use bearer tokens in HTTP requests to access OAuth 2.0 protected resources. Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6750"/>
          <seriesInfo name="DOI" value="10.17487/RFC6750"/>
        </reference>
        <reference anchor="RFC7064" target="https://www.rfc-editor.org/info/rfc7064" quoteTitle="true" derivedAnchor="RFC7064">
          <front>
            <title>URI Scheme for the Session Traversal Utilities for NAT (STUN) Protocol</title>
            <author fullname="S. Nandakumar" initials="S." surname="Nandakumar"/>
            <author fullname="G. Salgueiro" initials="G." surname="Salgueiro"/>
            <author fullname="P. Jones" initials="P." surname="Jones"/>
            <author fullname="M. Petit-Huguenin" initials="M." surname="Petit-Huguenin"/>
            <date month="November" year="2013"/>
            <abstract>
              <t indent="0">This document specifies the syntax and semantics of the Uniform Resource Identifier (URI) scheme for the Session Traversal Utilities for NAT (STUN) protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7064"/>
          <seriesInfo name="DOI" value="10.17487/RFC7064"/>
        </reference>
        <reference anchor="RFC7065" target="https://www.rfc-editor.org/info/rfc7065" quoteTitle="true" derivedAnchor="RFC7065">
          <front>
            <title>Traversal Using Relays around NAT (TURN) Uniform Resource Identifiers</title>
            <author fullname="M. Petit-Huguenin" initials="M." surname="Petit-Huguenin"/>
            <author fullname="S. Nandakumar" initials="S." surname="Nandakumar"/>
            <author fullname="G. Salgueiro" initials="G." surname="Salgueiro"/>
            <author fullname="P. Jones" initials="P." surname="Jones"/>
            <date month="November" year="2013"/>
            <abstract>
              <t indent="0">This document specifies the syntax of Uniform Resource Identifier (URI) schemes for the Traversal Using Relays around NAT (TURN) protocol. It defines two URI schemes to provision the TURN Resolution Mechanism (RFC 5928).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7065"/>
          <seriesInfo name="DOI" value="10.17487/RFC7065"/>
        </reference>
        <reference anchor="RFC7675" target="https://www.rfc-editor.org/info/rfc7675" quoteTitle="true" derivedAnchor="RFC7675">
          <front>
            <title>Session Traversal Utilities for NAT (STUN) Usage for Consent Freshness</title>
            <author fullname="M. Perumal" initials="M." surname="Perumal"/>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <author fullname="R. Ravindranath" initials="R." surname="Ravindranath"/>
            <author fullname="T. Reddy" initials="T." surname="Reddy"/>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <date month="October" year="2015"/>
            <abstract>
              <t indent="0">To prevent WebRTC applications, such as browsers, from launching attacks by sending traffic to unwilling victims, periodic consent to send needs to be obtained from remote endpoints.</t>
              <t indent="0">This document describes a consent mechanism using a new Session Traversal Utilities for NAT (STUN) usage.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7675"/>
          <seriesInfo name="DOI" value="10.17487/RFC7675"/>
        </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 fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <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="RFC8288" target="https://www.rfc-editor.org/info/rfc8288" quoteTitle="true" derivedAnchor="RFC8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="October" year="2017"/>
            <abstract>
              <t indent="0">This specification defines a model for the relationships between resources on the Web ("links") and the type of those relationships ("link relation types").</t>
              <t indent="0">It also defines the serialisation of such links in HTTP headers with the Link header field.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8288"/>
          <seriesInfo name="DOI" value="10.17487/RFC8288"/>
        </reference>
        <reference anchor="RFC8445" target="https://www.rfc-editor.org/info/rfc8445" quoteTitle="true" derivedAnchor="RFC8445">
          <front>
            <title>Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal</title>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="July" year="2018"/>
            <abstract>
              <t indent="0">This document describes a protocol for Network Address Translator (NAT) traversal for UDP-based communication. This protocol is called Interactive Connectivity Establishment (ICE). ICE makes use of the Session Traversal Utilities for NAT (STUN) protocol and its extension, Traversal Using Relay NAT (TURN).</t>
              <t indent="0">This document obsoletes RFC 5245.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8445"/>
          <seriesInfo name="DOI" value="10.17487/RFC8445"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" quoteTitle="true" derivedAnchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t indent="0">This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t indent="0">This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8489" target="https://www.rfc-editor.org/info/rfc8489" quoteTitle="true" derivedAnchor="RFC8489">
          <front>
            <title>Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="M. Petit-Huguenin" initials="M." surname="Petit-Huguenin"/>
            <author fullname="G. Salgueiro" initials="G." surname="Salgueiro"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <author fullname="R. Mahy" initials="R." surname="Mahy"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <date month="February" year="2020"/>
            <abstract>
              <t indent="0">Session Traversal Utilities for NAT (STUN) is a protocol that serves as a tool for other protocols in dealing with NAT traversal. It can be used by an endpoint to determine the IP address and port allocated to it by a NAT. It can also be used to check connectivity between two endpoints and as a keep-alive protocol to maintain NAT bindings. STUN works with many existing NATs and does not require any special behavior from them.</t>
              <t indent="0">STUN is not a NAT traversal solution by itself. Rather, it is a tool to be used in the context of a NAT traversal solution.</t>
              <t indent="0">This document obsoletes RFC 5389.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8489"/>
          <seriesInfo name="DOI" value="10.17487/RFC8489"/>
        </reference>
        <reference anchor="RFC8725" target="https://www.rfc-editor.org/info/rfc8725" quoteTitle="true" derivedAnchor="RFC8725">
          <front>
            <title>JSON Web Token Best Current Practices</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="February" year="2020"/>
            <abstract>
              <t indent="0">JSON Web Tokens, also known as JWTs, are URL-safe JSON-based security tokens that contain a set of claims that can be signed and/or encrypted. JWTs are being widely used and deployed as a simple security token format in numerous protocols and applications, both in the area of digital identity and in other application areas. This Best Current Practices document updates RFC 7519 to provide actionable guidance leading to secure implementation and deployment of JWTs.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="225"/>
          <seriesInfo name="RFC" value="8725"/>
          <seriesInfo name="DOI" value="10.17487/RFC8725"/>
        </reference>
        <reference anchor="RFC8826" target="https://www.rfc-editor.org/info/rfc8826" quoteTitle="true" derivedAnchor="RFC8826">
          <front>
            <title>Security Considerations for WebRTC</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="January" year="2021"/>
            <abstract>
              <t indent="0">WebRTC is a protocol suite for use with real-time applications that can be deployed in browsers -- "real-time communication on the Web". This document defines the WebRTC threat model and analyzes the security threats of WebRTC in that model.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8826"/>
          <seriesInfo name="DOI" value="10.17487/RFC8826"/>
        </reference>
        <reference anchor="RFC8830" target="https://www.rfc-editor.org/info/rfc8830" quoteTitle="true" derivedAnchor="RFC8830">
          <front>
            <title>WebRTC MediaStream Identification in the Session Description Protocol</title>
            <author fullname="H. Alvestrand" initials="H." surname="Alvestrand"/>
            <date month="January" year="2021"/>
            <abstract>
              <t indent="0">This document specifies a Session Description Protocol (SDP) grouping mechanism for RTP media streams that can be used to specify relations between media streams.</t>
              <t indent="0">This mechanism is used to signal the association between the SDP concept of "media description" and the Web Real-Time Communication (WebRTC) concept of MediaStream/MediaStreamTrack using SDP signaling.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8830"/>
          <seriesInfo name="DOI" value="10.17487/RFC8830"/>
        </reference>
        <reference anchor="RFC8838" target="https://www.rfc-editor.org/info/rfc8838" quoteTitle="true" derivedAnchor="RFC8838">
          <front>
            <title>Trickle ICE: Incremental Provisioning of Candidates for the Interactive Connectivity Establishment (ICE) Protocol</title>
            <author fullname="E. Ivov" initials="E." surname="Ivov"/>
            <author fullname="J. Uberti" initials="J." surname="Uberti"/>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <date month="January" year="2021"/>
            <abstract>
              <t indent="0">This document describes "Trickle ICE", an extension to the Interactive Connectivity Establishment (ICE) protocol that enables ICE agents to begin connectivity checks while they are still gathering candidates, by incrementally exchanging candidates over time instead of all at once. This method can considerably accelerate the process of establishing a communication session.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8838"/>
          <seriesInfo name="DOI" value="10.17487/RFC8838"/>
        </reference>
        <reference anchor="RFC8839" target="https://www.rfc-editor.org/info/rfc8839" quoteTitle="true" derivedAnchor="RFC8839">
          <front>
            <title>Session Description Protocol (SDP) Offer/Answer Procedures for Interactive Connectivity Establishment (ICE)</title>
            <author fullname="M. Petit-Huguenin" initials="M." surname="Petit-Huguenin"/>
            <author fullname="S. Nandakumar" initials="S." surname="Nandakumar"/>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="A. Keränen" initials="A." surname="Keränen"/>
            <author fullname="R. Shpount" initials="R." surname="Shpount"/>
            <date month="January" year="2021"/>
            <abstract>
              <t indent="0">This document describes Session Description Protocol (SDP) Offer/Answer procedures for carrying out Interactive Connectivity Establishment (ICE) between the agents.</t>
              <t indent="0">This document obsoletes RFCs 5245 and 6336.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8839"/>
          <seriesInfo name="DOI" value="10.17487/RFC8839"/>
        </reference>
        <reference anchor="RFC8840" target="https://www.rfc-editor.org/info/rfc8840" quoteTitle="true" derivedAnchor="RFC8840">
          <front>
            <title>A Session Initiation Protocol (SIP) Usage for Incremental Provisioning of Candidates for the Interactive Connectivity Establishment (Trickle ICE)</title>
            <author fullname="E. Ivov" initials="E." surname="Ivov"/>
            <author fullname="T. Stach" initials="T." surname="Stach"/>
            <author fullname="E. Marocco" initials="E." surname="Marocco"/>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <date month="January" year="2021"/>
            <abstract>
              <t indent="0">The Interactive Connectivity Establishment (ICE) protocol describes a Network Address Translator (NAT) traversal mechanism for UDP-based multimedia sessions established with the Offer/Answer model. The ICE extension for Incremental Provisioning of Candidates (Trickle ICE) defines a mechanism that allows ICE Agents to shorten session establishment delays by making the candidate gathering and connectivity checking phases of ICE non-blocking and by executing them in parallel.</t>
              <t indent="0">This document defines usage semantics for Trickle ICE with the Session Initiation Protocol (SIP). The document also defines a new SIP Info Package to support this usage together with the corresponding media type. Additionally, a new Session Description Protocol (SDP) "end-of-candidates" attribute and a new SIP option tag "trickle-ice" are defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8840"/>
          <seriesInfo name="DOI" value="10.17487/RFC8840"/>
        </reference>
        <reference anchor="RFC8842" target="https://www.rfc-editor.org/info/rfc8842" quoteTitle="true" derivedAnchor="RFC8842">
          <front>
            <title>Session Description Protocol (SDP) Offer/Answer Considerations for Datagram Transport Layer Security (DTLS) and Transport Layer Security (TLS)</title>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="R. Shpount" initials="R." surname="Shpount"/>
            <date month="January" year="2021"/>
            <abstract>
              <t indent="0">This document defines the Session Description Protocol (SDP) offer/answer procedures for negotiating and establishing a Datagram Transport Layer Security (DTLS) association. The document also defines the criteria for when a new DTLS association must be established. The document updates RFCs 5763 and 7345 by replacing common SDP offer/answer procedures with a reference to this specification.</t>
              <t indent="0">This document defines a new SDP media-level attribute, "tls-id".</t>
              <t indent="0">This document also defines how the "tls-id" attribute can be used for negotiating and establishing a Transport Layer Security (TLS) connection, in conjunction with the procedures in RFCs 4145 and 8122.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8842"/>
          <seriesInfo name="DOI" value="10.17487/RFC8842"/>
        </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 fullname="B. Burman" initials="B." surname="Burman"/>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <author fullname="S. Nandakumar" initials="S." surname="Nandakumar"/>
            <author fullname="M. Zanaty" initials="M." surname="Zanaty"/>
            <date month="January" year="2021"/>
            <abstract>
              <t indent="0">In some application scenarios, it may be desirable to send multiple differently encoded versions of the same media source in different RTP streams. This is called simulcast. This document describes how to accomplish simulcast in RTP and how to signal it in the Session Description Protocol (SDP). The described solution uses an RTP/RTCP identification method to identify RTP streams belonging to the same media source and makes an extension to SDP to indicate that those RTP streams are different simulcast formats of that media source. The SDP extension consists of a new media-level SDP attribute that expresses capability to send and/or receive simulcast RTP streams.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8853"/>
          <seriesInfo name="DOI" value="10.17487/RFC8853"/>
        </reference>
        <reference anchor="RFC8858" target="https://www.rfc-editor.org/info/rfc8858" quoteTitle="true" derivedAnchor="RFC8858">
          <front>
            <title>Indicating Exclusive Support of RTP and RTP Control Protocol (RTCP) Multiplexing Using the Session Description Protocol (SDP)</title>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <date month="January" year="2021"/>
            <abstract>
              <t indent="0">This document defines a new Session Description Protocol (SDP) media-level attribute, 'rtcp-mux-only', that can be used by an endpoint to indicate exclusive support of RTP and RTP Control Protocol (RTCP) multiplexing. The document also updates RFC 5761 by clarifying that an offerer can use a mechanism to indicate that it is not able to send and receive RTCP on separate ports.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8858"/>
          <seriesInfo name="DOI" value="10.17487/RFC8858"/>
        </reference>
        <reference anchor="RFC9110" target="https://www.rfc-editor.org/info/rfc9110" quoteTitle="true" derivedAnchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t indent="0">The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t indent="0">This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9112" target="https://www.rfc-editor.org/info/rfc9112" quoteTitle="true" derivedAnchor="RFC9112">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t indent="0">The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns.</t>
              <t indent="0">This document obsoletes portions of RFC 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="99"/>
          <seriesInfo name="RFC" value="9112"/>
          <seriesInfo name="DOI" value="10.17487/RFC9112"/>
        </reference>
        <reference anchor="RFC9143" target="https://www.rfc-editor.org/info/rfc9143" quoteTitle="true" derivedAnchor="RFC9143">
          <front>
            <title>Negotiating Media Multiplexing Using the Session Description Protocol (SDP)</title>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="H. Alvestrand" initials="H." surname="Alvestrand"/>
            <author fullname="C. Jennings" initials="C." surname="Jennings"/>
            <date month="February" year="2022"/>
            <abstract>
              <t indent="0">This specification defines a new Session Description Protocol (SDP) Grouping Framework extension called 'BUNDLE'. The extension can be used with the SDP offer/answer mechanism to negotiate the usage of a single transport (5-tuple) for sending and receiving media described by multiple SDP media descriptions ("m=" sections). Such transport is referred to as a "BUNDLE transport", and the media is referred to as "bundled media". The "m=" sections that use the BUNDLE transport form a BUNDLE group.</t>
              <t indent="0">This specification defines a new RTP Control Protocol (RTCP) Source Description (SDES) item and a new RTP header extension.</t>
              <t indent="0">This specification updates RFCs 3264, 5888, and 7941.</t>
              <t indent="0">This specification obsoletes RFC 8843.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9143"/>
          <seriesInfo name="DOI" value="10.17487/RFC9143"/>
        </reference>
        <reference anchor="RFC9147" target="https://www.rfc-editor.org/info/rfc9147" quoteTitle="true" derivedAnchor="RFC9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="April" year="2022"/>
            <abstract>
              <t indent="0">This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t indent="0">The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t indent="0">This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="RFC9429" target="https://www.rfc-editor.org/info/rfc9429" quoteTitle="true" derivedAnchor="RFC9429">
          <front>
            <title>JavaScript Session Establishment Protocol (JSEP)</title>
            <author fullname="J. Uberti" initials="J." surname="Uberti"/>
            <author fullname="C. Jennings" initials="C." surname="Jennings"/>
            <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla"/>
            <date month="April" year="2024"/>
            <abstract>
              <t indent="0">This document describes the mechanisms for allowing a JavaScript application to control the signaling plane of a multimedia session via the interface specified in the W3C RTCPeerConnection API and discusses how this relates to existing signaling protocols.</t>
              <t indent="0">This specification obsoletes RFC 8829.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9429"/>
          <seriesInfo name="DOI" value="10.17487/RFC9429"/>
        </reference>
        <reference anchor="RFC9562" target="https://www.rfc-editor.org/info/rfc9562" quoteTitle="true" derivedAnchor="RFC9562">
          <front>
            <title>Universally Unique IDentifiers (UUIDs)</title>
            <author fullname="K. Davis" initials="K." surname="Davis"/>
            <author fullname="B. Peabody" initials="B." surname="Peabody"/>
            <author fullname="P. Leach" initials="P." surname="Leach"/>
            <date month="May" year="2024"/>
            <abstract>
              <t indent="0">This specification defines UUIDs (Universally Unique IDentifiers) --
also known as GUIDs (Globally Unique IDentifiers) -- and a Uniform
Resource Name namespace for UUIDs. A UUID is 128 bits long and is
intended to guarantee uniqueness across space and time. UUIDs were
originally used in the Apollo Network Computing System (NCS), later
in the Open Software Foundation's (OSF's) Distributed Computing
Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t indent="0">This specification is derived from the OSF DCE specification with the
kind permission of the OSF (now known as "The Open Group"). Information from earlier versions of the OSF DCE specification have
been incorporated into this document. This document obsoletes RFC
4122.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9562"/>
          <seriesInfo name="DOI" value="10.17487/RFC9562"/>
        </reference>
        <reference anchor="W3C.REC-ldp-20150226" target="https://www.w3.org/TR/2015/REC-ldp-20150226/" quoteTitle="true" derivedAnchor="W3C.REC-ldp-20150226">
          <front>
            <title>Linked Data Platform 1.0</title>
            <author fullname="John Arwe" role="editor"/>
            <author fullname="Steve Speicher" role="editor"/>
            <author fullname="Ashok Malhotra" role="editor"/>
            <date day="26" month="February" year="2015"/>
          </front>
          <refcontent>W3C Recommendation</refcontent>
          <annotation>Latest version available at: <eref target="https://www.w3.org/TR/ldp/" brackets="angle"/>.</annotation>
        </reference>
      </references>
      <references anchor="sec-informative-references" pn="section-7.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <referencegroup anchor="BCP56" target="https://www.rfc-editor.org/info/bcp56" derivedAnchor="BCP56">
          <reference anchor="RFC9205" target="https://www.rfc-editor.org/info/rfc9205" quoteTitle="true">
            <front>
              <title>Building Protocols with HTTP</title>
              <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
              <date month="June" year="2022"/>
              <abstract>
                <t indent="0">Applications often use HTTP as a substrate to create HTTP-based APIs. This document specifies best practices for writing specifications that use HTTP to define new application protocols. It is written primarily to guide IETF efforts to define application protocols using HTTP for deployment on the Internet but might be applicable in other situations.</t>
                <t indent="0">This document obsoletes RFC 3205.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="56"/>
            <seriesInfo name="RFC" value="9205"/>
            <seriesInfo name="DOI" value="10.17487/RFC9205"/>
          </reference>
        </referencegroup>
        <referencegroup anchor="BCP9" target="https://www.rfc-editor.org/info/bcp9" derivedAnchor="BCP9">
          <reference anchor="RFC2026" target="https://www.rfc-editor.org/info/rfc2026" quoteTitle="true">
            <front>
              <title>The Internet Standards Process -- Revision 3</title>
              <author fullname="S. Bradner" initials="S." surname="Bradner"/>
              <date month="October" year="1996"/>
              <abstract>
                <t indent="0">This memo documents the process used by the Internet community for the standardization of protocols and procedures. It defines the stages in the standardization process, the requirements for moving a document between stages and the types of documents used during this process. 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="9"/>
            <seriesInfo name="RFC" value="2026"/>
            <seriesInfo name="DOI" value="10.17487/RFC2026"/>
          </reference>
          <reference anchor="RFC5657" target="https://www.rfc-editor.org/info/rfc5657" quoteTitle="true">
            <front>
              <title>Guidance on Interoperation and Implementation Reports for Advancement to Draft Standard</title>
              <author fullname="L. Dusseault" initials="L." surname="Dusseault"/>
              <author fullname="R. Sparks" initials="R." surname="Sparks"/>
              <date month="September" year="2009"/>
              <abstract>
                <t indent="0">Advancing a protocol to Draft Standard requires documentation of the interoperation and implementation of the protocol. Historic reports have varied widely in form and level of content and there is little guidance available to new report preparers. This document updates the existing processes and provides more detail on what is appropriate in an interoperability and implementation report. 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="9"/>
            <seriesInfo name="RFC" value="5657"/>
            <seriesInfo name="DOI" value="10.17487/RFC5657"/>
          </reference>
          <reference anchor="RFC6410" target="https://www.rfc-editor.org/info/rfc6410" quoteTitle="true">
            <front>
              <title>Reducing the Standards Track to Two Maturity Levels</title>
              <author fullname="R. Housley" initials="R." surname="Housley"/>
              <author fullname="D. Crocker" initials="D." surname="Crocker"/>
              <author fullname="E. Burger" initials="E." surname="Burger"/>
              <date month="October" year="2011"/>
              <abstract>
                <t indent="0">This document updates the Internet Engineering Task Force (IETF) Standards Process defined in RFC 2026. Primarily, it reduces the Standards Process from three Standards Track maturity levels to two. This memo documents an Internet Best Current Practice.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="9"/>
            <seriesInfo name="RFC" value="6410"/>
            <seriesInfo name="DOI" value="10.17487/RFC6410"/>
          </reference>
          <reference anchor="RFC7100" target="https://www.rfc-editor.org/info/rfc7100" quoteTitle="true">
            <front>
              <title>Retirement of the "Internet Official Protocol Standards" Summary Document</title>
              <author fullname="P. Resnick" initials="P." surname="Resnick"/>
              <date month="December" year="2013"/>
              <abstract>
                <t indent="0">This document updates RFC 2026 to no longer use STD 1 as a summary of "Internet Official Protocol Standards". It obsoletes RFC 5000 and requests the IESG to move RFC 5000 (and therefore STD 1) to Historic status.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="9"/>
            <seriesInfo name="RFC" value="7100"/>
            <seriesInfo name="DOI" value="10.17487/RFC7100"/>
          </reference>
          <reference anchor="RFC7127" target="https://www.rfc-editor.org/info/rfc7127" quoteTitle="true">
            <front>
              <title>Characterization of Proposed Standards</title>
              <author fullname="O. Kolkman" initials="O." surname="Kolkman"/>
              <author fullname="S. Bradner" initials="S." surname="Bradner"/>
              <author fullname="S. Turner" initials="S." surname="Turner"/>
              <date month="January" year="2014"/>
              <abstract>
                <t indent="0">RFC 2026 describes the review performed by the Internet Engineering Steering Group (IESG) on IETF Proposed Standard RFCs and characterizes the maturity level of those documents. This document updates RFC 2026 by providing a current and more accurate characterization of Proposed Standards.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="9"/>
            <seriesInfo name="RFC" value="7127"/>
            <seriesInfo name="DOI" value="10.17487/RFC7127"/>
          </reference>
          <reference anchor="RFC7475" target="https://www.rfc-editor.org/info/rfc7475" quoteTitle="true">
            <front>
              <title>Increasing the Number of Area Directors in an IETF Area</title>
              <author fullname="S. Dawkins" initials="S." surname="Dawkins"/>
              <date month="March" year="2015"/>
              <abstract>
                <t indent="0">This document removes a limit on the number of Area Directors who manage an Area in the definition of "IETF Area". This document updates RFC 2026 (BCP 9) and RFC 2418 (BCP 25).</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="9"/>
            <seriesInfo name="RFC" value="7475"/>
            <seriesInfo name="DOI" value="10.17487/RFC7475"/>
          </reference>
          <reference anchor="RFC8789" target="https://www.rfc-editor.org/info/rfc8789" quoteTitle="true">
            <front>
              <title>IETF Stream Documents Require IETF Rough Consensus</title>
              <author fullname="J. Halpern" initials="J." role="editor" surname="Halpern"/>
              <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla"/>
              <date month="June" year="2020"/>
              <abstract>
                <t indent="0">This document requires that the IETF never publish any IETF Stream RFCs without IETF rough consensus. This updates RFC 2026.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="9"/>
            <seriesInfo name="RFC" value="8789"/>
            <seriesInfo name="DOI" value="10.17487/RFC8789"/>
          </reference>
          <reference anchor="RFC9282" target="https://www.rfc-editor.org/info/rfc9282" quoteTitle="true">
            <front>
              <title>Responsibility Change for the RFC Series</title>
              <author fullname="B. Rosen" initials="B." surname="Rosen"/>
              <date month="June" year="2022"/>
              <abstract>
                <t indent="0">In RFC 9280, responsibility for the RFC Series moved to the RFC Series Working Group and the RFC Series Approval Board. It is no longer the responsibility of the RFC Editor, and the role of the IAB in the RFC Series is altered. Accordingly, in Section 2.1 of RFC 2026, the sentence "RFC publication is the direct responsibility of the RFC Editor, under the general direction of the IAB" is deleted.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="9"/>
            <seriesInfo name="RFC" value="9282"/>
            <seriesInfo name="DOI" value="10.17487/RFC9282"/>
          </reference>
        </referencegroup>
        <reference anchor="HTML" target="https://html.spec.whatwg.org/" quoteTitle="true" derivedAnchor="HTML">
          <front>
            <title>HTML</title>
            <author>
              <organization showOnFrontPage="true">WHATWG</organization>
            </author>
          </front>
          <refcontent>WHATWG Living Standard</refcontent>
          <annotation>Commit snapshot: <eref target="https://html.spec.whatwg.org/commit-snapshots/09db56ba9343c597340b2c7715f43ff9b10826f6/" brackets="angle"/>.</annotation>
        </reference>
        <reference anchor="RFC3261" target="https://www.rfc-editor.org/info/rfc3261" quoteTitle="true" derivedAnchor="RFC3261">
          <front>
            <title>SIP: Session Initiation Protocol</title>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"/>
            <author fullname="G. Camarillo" initials="G." surname="Camarillo"/>
            <author fullname="A. Johnston" initials="A." surname="Johnston"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="R. Sparks" initials="R." surname="Sparks"/>
            <author fullname="M. Handley" initials="M." surname="Handley"/>
            <author fullname="E. Schooler" initials="E." surname="Schooler"/>
            <date month="June" year="2002"/>
            <abstract>
              <t indent="0">This document describes Session Initiation Protocol (SIP), an application-layer control (signaling) protocol for creating, modifying, and terminating sessions with one or more participants. These sessions include Internet telephone calls, multimedia distribution, and multimedia conferences. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3261"/>
          <seriesInfo name="DOI" value="10.17487/RFC3261"/>
        </reference>
        <reference anchor="RFC6120" target="https://www.rfc-editor.org/info/rfc6120" quoteTitle="true" derivedAnchor="RFC6120">
          <front>
            <title>Extensible Messaging and Presence Protocol (XMPP): Core</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <date month="March" year="2011"/>
            <abstract>
              <t indent="0">The Extensible Messaging and Presence Protocol (XMPP) is an application profile of the Extensible Markup Language (XML) that enables the near-real-time exchange of structured yet extensible data between any two or more network entities. This document defines XMPP's core protocol methods: setup and teardown of XML streams, channel encryption, authentication, error handling, and communication primitives for messaging, network availability ("presence"), and request-response interactions. This document obsoletes RFC 3920. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6120"/>
          <seriesInfo name="DOI" value="10.17487/RFC6120"/>
        </reference>
        <reference anchor="RFC7826" target="https://www.rfc-editor.org/info/rfc7826" quoteTitle="true" derivedAnchor="RFC7826">
          <front>
            <title>Real-Time Streaming Protocol Version 2.0</title>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"/>
            <author fullname="A. Rao" initials="A." surname="Rao"/>
            <author fullname="R. Lanphier" initials="R." surname="Lanphier"/>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <author fullname="M. Stiemerling" initials="M." role="editor" surname="Stiemerling"/>
            <date month="December" year="2016"/>
            <abstract>
              <t indent="0">This memorandum defines the Real-Time Streaming Protocol (RTSP) version 2.0, which obsoletes RTSP version 1.0 defined in RFC 2326.</t>
              <t indent="0">RTSP is an application-layer protocol for the setup and control of the delivery of data with real-time properties. RTSP provides an extensible framework to enable controlled, on-demand delivery of real-time data, such as audio and video. Sources of data can include both live data feeds and stored clips. This protocol is intended to control multiple data delivery sessions; provide a means for choosing delivery channels such as UDP, multicast UDP, and TCP; and provide a means for choosing delivery mechanisms based upon RTP (RFC 3550).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7826"/>
          <seriesInfo name="DOI" value="10.17487/RFC7826"/>
        </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 fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <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="RFC8836" target="https://www.rfc-editor.org/info/rfc8836" quoteTitle="true" derivedAnchor="RFC8836">
          <front>
            <title>Congestion Control Requirements for Interactive Real-Time Media</title>
            <author fullname="R. Jesup" initials="R." surname="Jesup"/>
            <author fullname="Z. Sarker" initials="Z." role="editor" surname="Sarker"/>
            <date month="January" year="2021"/>
            <abstract>
              <t indent="0">Congestion control is needed for all data transported across the Internet, in order to promote fair usage and prevent congestion collapse. The requirements for interactive, point-to-point real-time multimedia, which needs low-delay, semi-reliable data delivery, are different from the requirements for bulk transfer like FTP or bursty transfers like web pages. Due to an increasing amount of RTP-based real-time media traffic on the Internet (e.g., with the introduction of the Web Real-Time Communication (WebRTC)), it is especially important to ensure that this kind of traffic is congestion controlled.</t>
              <t indent="0">This document describes a set of requirements that can be used to evaluate other congestion control mechanisms in order to figure out their fitness for this purpose, and in particular to provide a set of possible requirements for a real-time media congestion avoidance technique.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8836"/>
          <seriesInfo name="DOI" value="10.17487/RFC8836"/>
        </reference>
        <reference anchor="RFC9457" target="https://www.rfc-editor.org/info/rfc9457" quoteTitle="true" derivedAnchor="RFC9457">
          <front>
            <title>Problem Details for HTTP APIs</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <author fullname="S. Dalal" initials="S." surname="Dalal"/>
            <date month="July" year="2023"/>
            <abstract>
              <t indent="0">This document defines a "problem detail" to carry machine-readable details of errors in HTTP response content to avoid the need to define new error response formats for HTTP APIs.</t>
              <t indent="0">This document obsoletes RFC 7807.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9457"/>
          <seriesInfo name="DOI" value="10.17487/RFC9457"/>
        </reference>
        <reference anchor="W3C.REC-webrtc-20250313" target="https://www.w3.org/TR/2025/REC-webrtc-20250313/" quoteTitle="true" derivedAnchor="W3C.REC-webrtc-20250313">
          <front>
            <title>WebRTC: Real-Time Communication in Browsers</title>
            <author fullname="Cullen Jennings" role="editor"/>
            <author fullname="Florent Castelli" role="editor"/>
            <author fullname="Henrik Boström" role="editor"/>
            <author fullname="Jan-Ivar Bruaroey" role="editor"/>
            <date day="13" month="March" year="2025"/>
          </front>
          <refcontent>W3C Recommendation</refcontent>
          <annotation>Latest version available at: <eref target="https://www.w3.org/TR/webrtc/" brackets="angle"/>.</annotation>
        </reference>
      </references>
    </references>
    <section anchor="acknowledgements" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1">The authors wish to thank <contact fullname="Lorenzo Miniero"/>,
      <contact fullname="Juliusz Chroboczek"/>, <contact fullname="Adam       Roach"/>, <contact fullname="Nils Ohlmeier"/>, <contact fullname="Christer Holmberg"/>, <contact fullname="Cameron Elliott"/>,
      <contact fullname="Gustavo Garcia"/>, <contact fullname="Jonas Birme"/>,
      <contact fullname="Sandro Gauci"/>, <contact fullname="Christer       Holmberg"/>, and everyone else in the WebRTC community that have provided
      comments, feedback, text, and improvement proposals on the document and
      contributed early implementations of the spec.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author initials="S." surname="Garcia Murillo" fullname="Sergio Garcia Murillo">
        <organization showOnFrontPage="true">Millicast</organization>
        <address>
          <email>sergio.garcia.murillo@cosmosoftware.io</email>
        </address>
      </author>
      <author initials="A." surname="Gouaillard" fullname="Alexandre Gouaillard">
        <organization showOnFrontPage="true">CoSMo Software</organization>
        <address>
          <email>alex.gouaillard@cosmosoftware.io</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
