<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-wish-whep-03" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="whep">WebRTC-HTTP Egress Protocol (WHEP)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-wish-whep-03"/>
    <author initials="S." surname="Murillo" fullname="Sergio Garcia Murillo">
      <organization>Millicast</organization>
      <address>
        <email>sergio.garcia.murillo@cosmosoftware.io</email>
      </address>
    </author>
    <author initials="C." surname="Chen" fullname="Cheng Chen">
      <organization>ByteDance</organization>
      <address>
        <email>webrtc@bytedance.com</email>
      </address>
    </author>
    <author initials="D." surname="Jenkins" fullname="Dan Jenkins" role="editor">
      <organization>Everycast Labs Ltd</organization>
      <address>
        <email>dan@everycastlabs.uk</email>
      </address>
    </author>
    <date year="2025" month="August" day="18"/>
    <area>ART</area>
    <workgroup>wish</workgroup>
    <keyword>WebRTC</keyword>
    <abstract>
      <?line 49?>

<t>This document describes a simple HTTP-based protocol that will allow WebRTC-based viewers to watch content from streaming services and/or Content Delivery Networks (CDNs) or WebRTC Transmission Network (WTNs).</t>
    </abstract>
  </front>
  <middle>
    <?line 53?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The IETF RTCWEB working group standardized JSEP (<xref target="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"/> 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 application level.</t>
      <t>While WebRTC can be integrated with standard signaling protocols like SIP <xref target="RFC3261"/> or XMPP <xref target="RFC6120"/>, they are not designed to be used in broadcasting/streaming services, and there also is no sign of adoption in that industry. RTSP <xref target="RFC7826"/>, which is based on RTP, does not support the SDP offer/answer model <xref target="RFC3264"/> for negotiating the characteristics of the media session.</t>
      <t>There are many situations in which the lack of a standard protocol for consuming media from streaming service using WebRTC has become a problem:</t>
      <ul spacing="normal">
        <li>
          <t>Interoperability between WebRTC services and products.</t>
        </li>
        <li>
          <t>Reusing player software which can be integrated easily.</t>
        </li>
        <li>
          <t>Integration with Dynamic Adaptive Streaming over HTTP (DASH) for offering live streams via WebRTC while offering a time-shifted version via DASH.</t>
        </li>
        <li>
          <t>Playing WebRTC streams on devices that don't support custom javascript to be run (like TVs).</t>
        </li>
      </ul>
      <t>This document mimics what has been done in the WebRTC HTTP Ingest Protocol (WHIP) <xref target="I-D.draft-ietf-wish-whip"/> for ingestion and specifies a simple HTTP-based protocol that can be used for consuming media from a streaming service using WebRTC.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="overview">
      <name>Overview</name>
      <t>The WebRTC-HTTP Egress Protocol (WHEP) is designed to facilitate an 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 WHEP player and the streaming service endpoint (Media Server).</t>
      <t>Upon successful establishment of the ICE/DTLS session, unidirectional media data transmission commences from the media server to the WHEP player. It is important to note that SDP renegotiations are not supported in WHEP, meaning that no modifications to the "m=" sections can be made after the initial SDP offer/answer exchange via HTTP POST is completed and only ICE related information can be updated via HTTP PATCH requests as defined in <xref target="ice-support"/>.</t>
      <t>The WHEP player always initiates the streaming session by sending an SDP offer to the WHEP endpoint. The WHEP endpoint can then choose to either accept the client's offer by responding with an SDP answer, or reject the client's offer and counter with its own SDP offer. If the WHEP endpoint sends a counter-offer, the client must then respond with an SDP answer. A WHEP player must support processing both SDP answers (when the WHEP endpoint accepts the client's offer) and SDP offers (when the WHEP endpoint sends a counter-offer) in response to the initial request.</t>
      <section anchor="protocol-operation-flow">
        <name>Protocol Operation Flow</name>
        <t>The following diagram illustrates the core operation of the WHEP protocol for initiating and terminating a viewing session:</t>
        <figure anchor="whep-protocol-operation">
          <name>WHEP session setup and teardown</name>
          <artwork><![CDATA[
 +-------------+    +---------------+ +--------------+ +---------------+
 | WHEP player |    | WHEP endpoint | | Media Server | | WHEP session |
 +--+----------+    +---------+-----+ +------+-------+ +--------|------+
    |                         |              |                  |       
    |                         |              |                  |       
    |HTTP POST (SDP Offer)    |              |                  |       
    +------------------------>+              |                  |       
    |201 Created (SDP answer) |              |                  |       
    |   OR                    |              |                  |
    |406 Not Acceptable       |              |                  |       
    |   (SDP offer)           |              |                  |
    +<------------------------+              |                  |
    |                         |              |                  |
    |  [IF 406 Not Acceptable]|              |                  |
    |HTTP PATCH [session]     |              |                  |
    |   (SDP answer)          |              |                  |
    +---------------------------------------------------------->+
    |204 No Content           |              |                  |
    +<----------------------------------------------------------+ 
    |          ICE REQUEST                   |                  |       
    +--------------------------------------->+                  |       
    |          ICE RESPONSE                  |                  |       
    |<---------------------------------------+                  |       
    |          DTLS SETUP                    |                  |       
    |<======================================>|                  |       
    |          RTP/RTCP FLOW                 |                  |       
    +<-------------------------------------->+                  |       
    | HTTP DELETE                                               |       
    +---------------------------------------------------------->+       
    | 200 OK                                                    |       
    <-----------------------------------------------------------x       
                                                                               
]]></artwork>
        </figure>
        <t>The elements in <xref target="whep-protocol-operation"/> are described as follows:</t>
        <ul spacing="normal">
          <li>
            <t>WHEP player: This represents the WebRTC media player, which functions as a client of the WHEP protocol by receiving and decoding the media from a remote media server.</t>
          </li>
          <li>
            <t>WHEP endpoint: This denotes the egress server that receives the initial WHEP request.</t>
          </li>
          <li>
            <t>WHEP endpoint URL: Refers to the URL of the WHEP endpoint responsible for creating the WHEP session.</t>
          </li>
          <li>
            <t>Media server: This is the WebRTC Media Server that establishes the media session with the WHEP player and delivers the media to it.</t>
          </li>
          <li>
            <t>WHEP session: Indicates the allocated HTTP resource by the WHEP endpoint for an ongoing egress session.</t>
          </li>
          <li>
            <t>WHEP session URL: Refers to the URL of the WHEP resource allocated by the WHEP endpoint for a specific media session. The WHEP player can send requests to the WHEP session using this URL to modify the session, such as ICE operations or termination.</t>
          </li>
        </ul>
        <t>The <xref target="whep-protocol-operation"/> illustrates the communication flow between a WHEP player, WHEP endpoint, media server, and WHEP session. This flow outlines the process of setting up and tearing down a playback session using the WHEP protocol, involving negotiation, ICE for Network Address Translation (NAT) traversal, DTLS and Secure Real-time Transport Protocol (SRTP) for security, and RTP/RTCP for media transport:</t>
      </section>
      <section anchor="protocol-operation-steps">
        <name>Protocol Operation Steps</name>
        <ul spacing="normal">
          <li>
            <t>WHEP player: Initiates the communication by sending an HTTP POST with an SDP offer to the WHEP endpoint.</t>
          </li>
          <li>
            <t>WHEP endpoint: Responds with either a "201 Created" message containing an SDP answer (accepting the client's offer) or a "406 Not Acceptable" message containing an SDP counter-offer (rejecting the client's offer).</t>
          </li>
          <li>
            <t>WHEP player: If the WHEP endpoint responded with "406 Not Acceptable", the player sends an HTTP PATCH containing an SDP answer to the WHEP session URL.</t>
          </li>
          <li>
            <t>WHEP session: If applicable, responds with a "204 No Content" message to the PATCH request.</t>
          </li>
          <li>
            <t>WHEP player and media server: Establish ICE and DTLS sessions for NAT traversal and secure communication.</t>
          </li>
          <li>
            <t>RTP/RTCP Flow: Real-time Transport Protocol and Real-time Transport Control Protocol flows are established for media transmission from the media server to the WHEP player, secured by the SRTP profile.</t>
          </li>
          <li>
            <t>WHEP player: Sends an HTTP DELETE to terminate the WHEP session.</t>
          </li>
          <li>
            <t>WHEP session: Responds with a "200 OK" to confirm the session termination.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="protocol-operation">
      <name>Protocol Operation</name>
      <section anchor="http-usage">
        <name>HTTP usage</name>
        <t>Following <xref target="BCP56"/> guidelines, WHEP players <bcp14>MUST NOT</bcp14> match error codes returned by the WHEP endpoints and resources to a specific error cause indicated in this specification. WHEP players <bcp14>MUST</bcp14> be able to handle all applicable status codes gracefully falling back to the generic n00 semantics of a given status code on unknown error codes. WHEP endpoints and resources could convey finer-grained error information by a problem statement json object in the response message body of the failed request as per <xref target="RFC9457"/>.</t>
        <t>The WHEP endpoints and sessions are origin servers as defined in <xref section="3.6." sectionFormat="of" target="RFC9110"/> handling the requests and providing responses for the underlying HTTP resources. Those HTTP resources do not have any representation defined in this specification, so the WHEP endpoints and sessions <bcp14>MUST</bcp14> return a 2XX successful response with no content when a GET request is received.</t>
      </section>
      <section anchor="playback-session-setup">
        <name>Playback session set up</name>
        <t>In order to set up a streaming session, the WHEP player <bcp14>MUST</bcp14> generate an SDP offer according to the JSEP rules for an initial offer as in <xref section="5.2.1" sectionFormat="of" target="RFC9429"/> and perform an HTTP POST request as per <xref section="9.3.3" sectionFormat="of" target="RFC9110"/> to the configured WHEP endpoint URL.</t>
        <t>The HTTP POST request <bcp14>MUST</bcp14> have a content type of "application/sdp" and contain the SDP offer as the body. Upon receiving the HTTP POST request, the WHEP endpoint can choose to either accept the client's offer or reject it in favor of sending its own offer.</t>
        <section anchor="server-accepts-client-offer">
          <name>Server Accepts Client Offer</name>
          <t>If the WHEP endpoint chooses to accept the client's SDP offer, it <bcp14>MUST</bcp14> generate an SDP answer according to the JSEP rules for an initial answer as in <xref section="5.3.1" sectionFormat="of" target="RFC9429"/> and return 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 WHEP session.</t>
        </section>
        <section anchor="server-sends-counter-offer">
          <name>Server Sends Counter-offer</name>
          <t>If the WHEP endpoint chooses to reject the client's SDP offer, it <bcp14>MUST</bcp14> generate its own SDP offer according to the JSEP rules for an initial offer as in <xref section="5.2.1" sectionFormat="of" target="RFC9429"/> and return a "406 Not Acceptable" response with a content type of "application/sdp", the SDP counter-offer as the body, and a Location header field pointing to the WHEP session resource that will be created upon completion of the offer/answer exchange.</t>
          <t>The WHEP endpoint <bcp14>MAY</bcp14> include a "valid-until" parameter in the Content-Type header to indicate how long the counter-offer remains valid. If no "valid-until" parameter is provided, the counter-offer remains valid for 30 seconds from the time the response was sent. The "valid-until" parameter value <bcp14>MUST</bcp14> be an HTTP-date as defined in <xref section="5.6.7" sectionFormat="of" target="RFC9110"/>.</t>
          <t>When the WHEP player receives a counter-offer from the WHEP endpoint, it <bcp14>MUST</bcp14> generate an SDP answer according to the JSEP rules for an initial answer as in <xref section="5.3.1" sectionFormat="of" target="RFC9429"/>. To send the SDP answer, the WHEP player <bcp14>MUST</bcp14> perform an HTTP PATCH request as per <xref target="RFC5789"/> to the WHEP session URL with content type of "application/sdp" and the SDP answer as the body. The WHEP endpoint <bcp14>MUST</bcp14> return a "204 No Content" response. If the SDP is malformed, the WHEP endpoint <bcp14>MUST</bcp14> reject the HTTP PATCH request with an appropriate 4XX error response.</t>
        </section>
        <section anchor="determining-server-response-type">
          <name>Determining Server Response Type</name>
          <t>WHEP players can determine the WHEP endpoint's response type by examining the HTTP status code:</t>
          <ul spacing="normal">
            <li>
              <t><strong>"201 Created"</strong>: The WHEP endpoint has accepted the client's offer and responded with an SDP answer. The WHEP session has been created and is ready for media transmission.</t>
            </li>
            <li>
              <t><strong>"406 Not Acceptable"</strong>: The WHEP endpoint has rejected the client's offer and responded with an SDP counter-offer. The client <bcp14>MUST</bcp14> send an HTTP PATCH request to the WHEP session URL with an SDP answer to complete the session establishment.</t>
            </li>
          </ul>
        </section>
        <section anchor="error-conditions">
          <name>Error Conditions</name>
          <t>If the HTTP POST to the WHEP endpoint has a content type different than "application/sdp" or the SDP is malformed, the WHEP endpoint <bcp14>MUST</bcp14> reject the HTTP POST request with an appropriate 4XX error response.</t>
        </section>
        <section anchor="media-direction-attributes">
          <name>Media Direction Attributes</name>
          <t>As the WHEP protocol only supports the playback use case with unidirectional media:</t>
          <ul spacing="normal">
            <li>
              <t>When a WHEP player sends an SDP offer, it <bcp14>SHOULD</bcp14> use "recvonly" attribute but <bcp14>MAY</bcp14> use the "sendrecv" attribute instead. The "inactive" and "sendonly" attributes <bcp14>MUST NOT</bcp14> be used.</t>
            </li>
            <li>
              <t>When a WHEP endpoint sends an SDP answer (accepting client offer), it <bcp14>MUST</bcp14> use "sendonly" attribute in the SDP answer.</t>
            </li>
            <li>
              <t>When a WHEP endpoint sends an SDP counter-offer, it <bcp14>SHOULD</bcp14> use "sendonly" attribute but <bcp14>MAY</bcp14> use the "sendrecv" attribute instead. The "inactive" and "recvonly" attributes <bcp14>MUST NOT</bcp14> be used.</t>
            </li>
            <li>
              <t>When a WHEP player sends an SDP answer (responding to server counter-offer), it <bcp14>MUST</bcp14> use "recvonly" attribute in the SDP answer.</t>
            </li>
          </ul>
        </section>
        <section anchor="codec-recommendations">
          <name>Codec Recommendations</name>
          <t>WHEP players <bcp14>SHOULD</bcp14> include as many supported codecs as possible in their SDP offers and answers to maximize compatibility and enable dynamic streaming scenarios. This applies whether the WHEP player is sending the initial offer or responding to a server counter-offer with an answer.</t>
          <t>Including a comprehensive list of supported codecs enables several important use cases:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Dynamic source switching</strong>: A WHEP endpoint may need to change which camera or media source a stream is connected to, potentially requiring different codecs for optimal quality or performance.</t>
            </li>
            <li>
              <t><strong>Adaptive streaming</strong>: The WHEP endpoint may switch between different codec configurations based on network conditions, viewer capabilities, or content characteristics.</t>
            </li>
            <li>
              <t><strong>Failover scenarios</strong>: If the primary codec encounters issues, having alternative codecs available allows seamless fallback without requiring renegotiation.</t>
            </li>
            <li>
              <t><strong>Multi-resolution support</strong>: Different codecs may be optimal for different resolutions or bitrates that the WHEP endpoint may need to provide.</t>
            </li>
          </ul>
          <t>WHEP players that restrict their codec offerings may prevent these advanced streaming scenarios and limit the WHEP endpoint's ability to provide optimal streaming experiences.</t>
        </section>
        <section anchor="examples">
          <name>Examples</name>
          <t>Following <xref target="sdp-exchange-example-server-accepts"/> is an example where the WHEP endpoint accepts the client's offer:</t>
          <figure anchor="sdp-exchange-example-server-accepts">
            <name>Example where WHEP endpoint accepts client offer</name>
            <artwork><![CDATA[
POST /whep/endpoint HTTP/1.1
Host: whep.example.com
Content-Type: application/sdp
Content-Length: 1326

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:zjkk
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=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=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:zjkk
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: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=rtcp-mux
a=rtcp-mux-only
a=rtcp-rsize
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: 1400
Location: https://whep.example.org/sessions/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:526be20a538ee422
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=bundle-only
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=sendonly
a=rtcp-mux
a=rtcp-mux-only
a=rtcp-rsize
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
a=msid:- d46fb922-d52a-4e9c-aa87-444eadc1521b
m=video 0 UDP/TLS/RTP/SAVPF 96 97
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:526be20a538ee422
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: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=rtcp-mux
a=rtcp-mux-only
a=rtcp-rsize
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
a=msid:- d46fb922-d52a-4e9c-aa87-444eadc1521b
]]></artwork>
          </figure>
          <t>Following <xref target="sdp-exchange-example-server-counter-offer"/> is an example where the WHEP endpoint sends a counter-offer:</t>
          <figure anchor="sdp-exchange-example-server-counter-offer">
            <name>Example where WHEP endpoint sends counter-offer</name>
            <artwork><![CDATA[
POST /channel/teeny-tasty-crayon HTTP/1.1
Host: whep.example.com
Content-Type: application/sdp
Content-Length: 1326

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:zjkk
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=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=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:zjkk
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: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=rtcp-mux
a=rtcp-mux-only
a=rtcp-rsize
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 406 Not Acceptable
Content-Type: application/sdp; valid-until="Wed, 09 Oct 2024 10:00:00 GMT"
Content-Length: 3552
Location: https://whep.example.com/channel/teeny-tasty-crayon/3de3c94a-fc0f-4659-bcaf-8bdebf718457

v=0
o=- 2438602337097565327 2 IN IP4 127.0.0.1
s=-
t=0 0
a=msid-semantic: WMS feedbackvideomslabel e6ddf4a9-b5ed-4e87-9ae3-ef126a9164d6
a=group:BUNDLE 0 1 2 3
m=video 9 RTP/SAVPF 100 96
c=IN IP4 0.0.0.0
a=rtpmap:100 VP8/90000
a=rtpmap:96 rtx/90000
a=fmtp:96 apt=100
a=rtcp:9 IN IP4 0.0.0.0
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=setup:active
a=mid:0
a=sendonly
a=ice-ufrag:CiYfXaM3jHrmpF
a=ice-pwd:VQFGPhTQj/BnaJ/tkec9m1Hi
a=fingerprint:sha-256 4C:C3:25:E0:29:75:AF:01:53:94:CD:C4:6F:5F:15:5E:E3:1A:10:AE:8C:96:07:5A:18:AC:49:5F:55:68:6C:C5
a=candidate:676201573392 1 udp 142541055 172.234.108.130 10000 typ host generation 0 network-id 1
a=ssrc:3592962548 cname:feedbackvideocname
a=ssrc:3592962548 label:feedbackvideolabel
a=ssrc:3592962548 mslabel:feedbackvideomslabel
a=ssrc:3592962548 msid:feedbackvideomslabel feedbackvideolabel
a=rtcp-mux
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=setup:active
a=mid:1
a=sendonly
a=ice-ufrag:CiYfXaM3jHrmpF
a=ice-pwd:VQFGPhTQj/BnaJ/tkec9m1Hi
a=fingerprint:sha-256 4C:C3:25:E0:29:75:AF:01:53:94:CD:C4:6F:5F:15:5E:E3:1A:10:AE:8C:96:07:5A:18:AC:49:5F:55:68:6C:C5
a=candidate:676201573392 1 udp 142541055 172.234.108.130 10000 typ host generation 0 network-id 1
a=rtcp-mux
a=sctpmap:5000 webrtc-datachannel 262144
m=audio 9 RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
a=rtcp:9 IN IP4 0.0.0.0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:8 c9:params:rtp-hdrext:info
a=setup:active
a=mid:2
a=sendonly
a=ice-ufrag:CiYfXaM3jHrmpF
a=ice-pwd:VQFGPhTQj/BnaJ/tkec9m1Hi
a=fingerprint:sha-256 4C:C3:25:E0:29:75:AF:01:53:94:CD:C4:6F:5F:15:5E:E3:1A:10:AE:8C:96:07:5A:18:AC:49:5F:55:68:6C:C5
a=candidate:676201573392 1 udp 142541055 172.234.108.130 10000 typ host generation 0 network-id 1
a=ssrc:2338673210 cname:0p6mZhWJw+/818iW
a=ssrc:2338673210 label:2fcad988-9bc2-4705-b408-9aee41bc3d71
a=ssrc:2338673210 mslabel:e6ddf4a9-b5ed-4e87-9ae3-ef126a9164d6
a=ssrc:2338673210 msid:e6ddf4a9-b5ed-4e87-9ae3-ef126a9164d6 2fcad988-9bc2-4705-b408-9aee41bc3d71
a=rtcp-mux
m=video 9 RTP/SAVPF 100 96
c=IN IP4 0.0.0.0
a=rtpmap:100 VP8/90000
a=rtpmap:96 rtx/90000
a=fmtp:96 apt=100
a=rtcp:9 IN IP4 0.0.0.0
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=setup:active
a=mid:3
a=sendonly
a=ice-ufrag:CiYfXaM3jHrmpF
a=ice-pwd:VQFGPhTQj/BnaJ/tkec9m1Hi
a=fingerprint:sha-256 4C:C3:25:E0:29:75:AF:01:53:94:CD:C4:6F:5F:15:5E:E3:1A:10:AE:8C:96:07:5A:18:AC:49:5F:55:68:6C:C5
a=candidate:676201573392 1 udp 142541055 172.234.108.130 10000 typ host generation 0 network-id 1
a=ssrc:755359452 cname:0p6mZhWJw+/818iW
a=ssrc:755359452 label:d6bca5d1-b69d-4d9d-8b5d-9117707cdb81
a=ssrc:755359452 mslabel:e6ddf4a9-b5ed-4e87-9ae3-ef126a9164d6
a=ssrc:755359452 msid:e6ddf4a9-b5ed-4e87-9ae3-ef126a9164d6 d6bca5d1-b69d-4d9d-8b5d-9117707cdb81
a=ssrc:280880788 cname:0p6mZhWJw+/818iW
a=ssrc:280880788 label:d6bca5d1-b69d-4d9d-8b5d-9117707cdb81
a=ssrc:280880788 mslabel:e6ddf4a9-b5ed-4e87-9ae3-ef126a9164d6
a=ssrc:280880788 msid:e6ddf4a9-b5ed-4e87-9ae3-ef126a9164d6 d6bca5d1-b69d-4d9d-8b5d-9117707cdb81
a=ssrc-group:FID 755359452 280880788
a=rtcp-mux

PATCH /channel/teeny-tasty-crayon/3de3c94a-fc0f-4659-bcaf-8bdebf718457 HTTP/1.1
Host: whep.example.com
Content-Type: application/sdp
Content-Length: 2410

v=0
o=- 4541478638207698795 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1 2 3
a=msid-semantic: WMS
m=video 56464 RTP/SAVPF 100 96
c=IN IP4 192.168.167.137
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:170904481 1 udp 2122129151 192.168.167.137 56464 typ host generation 0 network-id 1 network-cost 10
a=candidate:3499970512 1 udp 2122265343 fd2e:9c8b:abe4:2:838:1bbe:9d48:3ec 53930 typ host generation 0 network-id 3 network-cost 10
a=candidate:3061500384 1 udp 2122197247 2001:9b1:28fe:9400:88fb:57a4:5888:153b 62309 typ host generation 0 network-id 2 network-cost 10
a=ice-ufrag:37nK
a=ice-pwd:NZH/oQX6FHAl+EmWvpgoPZzC
a=ice-options:trickle
a=fingerprint:sha-256 00:91:87:75:0D:C7:F6:D4:65:4D:9F:1D:EF:52:A1:60:02:8D:E7:67:73:68:B9:78:12:D9:FD:3E:09:F8:BF:3D
a=setup:passive
a=mid:0
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtpmap:100 VP8/90000
a=rtpmap:96 rtx/90000
a=fmtp:96 apt=100
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:37nK
a=ice-pwd:NZH/oQX6FHAl+EmWvpgoPZzC
a=ice-options:trickle
a=fingerprint:sha-256 00:91:87:75:0D:C7:F6:D4:65:4D:9F:1D:EF:52:A1:60:02:8D:E7:67:73:68:B9:78:12:D9:FD:3E:09:F8:BF:3D
a=setup:passive
a=mid:1
a=sctp-port:5000
m=audio 9 RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:37nK
a=ice-pwd:NZH/oQX6FHAl+EmWvpgoPZzC
a=ice-options:trickle
a=fingerprint:sha-256 00:91:87:75:0D:C7:F6:D4:65:4D:9F:1D:EF:52:A1:60:02:8D:E7:67:73:68:B9:78:12:D9:FD:3E:09:F8:BF:3D
a=setup:passive
a=mid:2
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=recvonly
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
m=video 9 RTP/SAVPF 100 96
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:37nK
a=ice-pwd:NZH/oQX6FHAl+EmWvpgoPZzC
a=ice-options:trickle
a=fingerprint:sha-256 00:91:87:75:0D:C7:F6:D4:65:4D:9F:1D:EF:52:A1:60:02:8D:E7:67:73:68:B9:78:12:D9:FD:3E:09:F8:BF:3D
a=setup:passive
a=mid:3
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtpmap:100 VP8/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=rtpmap:96 rtx/90000
a=fmtp:96 apt=100

HTTP/1.1 204 No Content
]]></artwork>
          </figure>
        </section>
        <section anchor="session-management">
          <name>Session Management</name>
          <t>The WHEP endpoint COULD require a live publishing to be happening in order to allow a WHEP players to start viewing a stream.
In that case, the WHEP endpoint <bcp14>SHALL</bcp14> return a "409 Conflict" response to the POST request issued by the WHEP player with a "Retry-After" header indicating the number of seconds before sending a new request.
WHEP players <bcp14>MAY</bcp14> periodically try to connect to the WHEP session with exponential backoff period with an initial value of the "Retry-After" header value in the "409 Conflict" response.</t>
          <t>Once a session is setup, consent freshness as per <xref target="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>
        </section>
      </section>
      <section anchor="playback-session-termination">
        <name>Playback session termination</name>
        <t>To explicitly terminate a WHEP session, the WHEP player <bcp14>MUST</bcp14> perform an HTTP DELETE request to the WHEP session URL returned in the Location header field of the initial HTTP POST. Upon receiving the HTTP DELETE request, the WHEP session will be removed and the resources freed on the media server, terminating the ICE and DTLS sessions.</t>
        <t>A media server terminating a session <bcp14>MUST</bcp14> follow the procedures in <xref section="5.2" sectionFormat="of" target="RFC7675"/>  for immediate revocation of consent.</t>
        <t>The WHEP endpoints <bcp14>MUST</bcp14> support OPTIONS requests for Cross-Origin Resource Sharing (CORS) as defined in <xref target="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"/>.</t>
      </section>
      <section anchor="ice-support">
        <name>ICE support</name>
        <t>ICE <xref target="RFC8445"/> is a protocol addressing 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>Trickle ICE <xref target="RFC8838"/> optimizes the connectivity process by incrementally sharing potential communication paths, reducing latency, and facilitating quicker establishment.</t>
        <t>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>Trickle ICE and ICE restart support are <bcp14>RECOMMENDED</bcp14> for both WHEP sessions and clients.</t>
        <section anchor="http-patch-usage">
          <name>HTTP PATCH request usage</name>
          <t>The WHEP player <bcp14>MAY</bcp14> perform trickle ICE or ICE restarts by sending an HTTP PATCH request as per <xref target="RFC5789"/> to the WHEP session URL, with a body containing a SDP fragment with media type "application/trickle-ice-sdpfrag" as specified in <xref target="RFC8840"/> carrying the relevant ICE information. If the HTTP PATCH to the WHEP session has a content type different than "application/trickle-ice-sdpfrag" or the SDP fragment is malformed, the WHEP session <bcp14>MUST</bcp14> reject the HTTP PATCH with an appropriate 4XX error response.</t>
          <t>If the WHEP 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"/>.</t>
          <t>The WHEP player <bcp14>MAY</bcp14> send overlapping HTTP PATCH requests to one WHEP session. Consequently, as those HTTP PATCH requests may be received out-of-order by the WHEP session, if WHEP 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"/>, being <bcp14>OPTIONAL</bcp14> otherwise. 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 WHEP endpoint.</t>
          <t>WHEP players <bcp14>SHOULD NOT</bcp14> use entity-tag validation when matching a specific ICE session is not required, such as for example when initiating a DELETE request to terminate a session. WHEP sessions <bcp14>MUST</bcp14> ignore any entity-tag value sent by the WHEP player when ICE session matching is not required, as in the HTTP DELETE request.</t>
          <t>Missing or outdated ETags in the PATCH requests from WHEP players  will be answered by WHEP sessions as per <xref section="13.1.1" sectionFormat="of" target="RFC9110"/> and <xref section="3" sectionFormat="of" target="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">
          <name>Trickle ICE</name>
          <t>Depending on the Trickle ICE support on the WHEP player, the initial offer by the WHEP player <bcp14>MAY</bcp14> be sent after the full ICE gathering is complete with the full list of ICE candidates, it <bcp14>MAY</bcp14> only contain local candidates as per <xref target="RFC8445"/> or even an empty list of candidates as per <xref target="RFC8863"/>. For the purpose of reducing setup times, when using Trickle ICE the WHEP player <bcp14>SHOULD</bcp14> send the SDP offer as soon as possible, containing either locally gathered ICE candidates or an empty list of candidates.</t>
          <t>In order to simplify the protocol, the WHEP session cannot signal additional ICE candidates to the WHEP player after the SDP answer has been sent. The WHEP 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>As the WHEP player needs to know the WHEP 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 lower the HTTP traffic and processing time required the WHEP player <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 WHEP session, the WHEP player needs to know the entity-tag associated with the ICE session in order to send a PATCH request containing new ICE candidates, so 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>WHEP players generating the HTTP PATCH body with the SDP fragment and its subsequent processing by WHEP sessions <bcp14>MUST</bcp14> follow to the guidelines defined in <xref section="4.4" sectionFormat="of" target="RFC8840"/> with the following considerations:</t>
          <ul spacing="normal">
            <li>
              <t>As per <xref target="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>
              <t>The WHEP player <bcp14>MAY</bcp14> exclude ICE candidates from the HTTP PATCH body if they have already been confirmed by the WHEP session with a successful HTTP response to a previous HTTP PATCH request.</t>
            </li>
          </ul>
          <t>WHEP sessions and players that support Trickle ICE <bcp14>MUST</bcp14> make use of entity-tags and conditional requests as explained in <xref target="http-patch-usage"/>.</t>
          <t>When a WHEP 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 WHEP 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>
          <figure anchor="trickle-ice-example">
            <name>Example of a Trickle ICE request and response</name>
            <artwork><![CDATA[
PATCH /session/id HTTP/1.1
Host: whep.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
]]></artwork>
          </figure>
          <t><xref target="trickle-ice-example"/> shows an example of the Trickle ICE procedure where the WHEP player sends a PATCH request with updated ICE candidate information and receives a successful response from the WHEP session.</t>
        </section>
        <section anchor="ice-restarts">
          <name>ICE Restarts</name>
          <t>As defined in <xref target="RFC8839"/>, when an ICE restart occurs, a new SDP offer/answer exchange is triggered. However, as WHEP does not support renegotiation of non-ICE related SDP information, a WHEP player will not send a new offer when an ICE restart occurs. Instead, the WHEP player and WHEP session will only exchange the relevant ICE information via an HTTP PATCH request as defined in <xref target="http-patch-usage"/> and <bcp14>MUST</bcp14> assume that the previously negotiated non-ICE related SDP information still apply after the ICE restart.</t>
          <t>When performing an ICE restart, the WHEP player <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"/>.
Similar what is defined in <xref target="trickle-ice"/>, as per <xref target="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 WHEP player sending a PATCH request for performing ICE restart <bcp14>MUST</bcp14> contain an "If-Match" header field with a field-value "*" as per <xref section="13.1.1" sectionFormat="of" target="RFC9110"/>.</t>
          <t><xref target="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 WHEP session receiving an 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 WHEP 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>As defined in <xref section="4.4.1.1.1" sectionFormat="of" target="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. So after performing a successful ICE restart, both the WHEP player and the WHEP 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 WHEP player and the WHEP session <bcp14>MUST</bcp14> ensure that the HTTP PATCH requests 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>If the ICE restart request cannot be satisfied by the WHEP 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 WHEP player <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"/>.</t>
          <t>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 and passwords fragments and ignore any further HTTP PATCH response received from a pending HTTP PATCH request. WHEP players <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 WHEP player and at the WHEP session (because of an out-of-order request), the STUN requests will contain invalid ICE information and will be dropped by the receiving side. If this situation is detected by the WHEP player, it <bcp14>MUST</bcp14> send a new ICE restart request to the WHEP session.</t>
          <figure anchor="trickle-restart-example">
            <name>Example of an ICE restart request and response</name>
            <artwork><![CDATA[
PATCH /session/id HTTP/1.1
Host: whep.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
]]></artwork>
          </figure>
          <t><xref target="trickle-restart-example"/> demonstrates a Trickle ICE restart procedure example. The WHEP player sends a PATCH request containing updated ICE information, including a new ufrag and password, along with newly gathered ICE candidates. In response, the WHEP session provides ICE information for the session after the ICE restart, including the updated ufrag and password, as well as the previous ICE candidate.</t>
        </section>
      </section>
      <section anchor="webrtc-constraints">
        <name>WebRTC constraints</name>
        <t>To simplify the implementation of WHEP in both players and media servers, WHEP introduces specific restrictions on WebRTC usage. The following subsections will explain these restrictions in detail:</t>
        <section anchor="sdp-bundle">
          <name>SDP Bundle</name>
          <t>Both the WHEP player and the WHEP endpoint <bcp14>SHALL</bcp14> support <xref target="RFC9143"/> and use "max-bundle" policy as defined in <xref target="RFC9429"/>. The WHEP player and the media server <bcp14>MUST</bcp14> support multiplexed media associated with the BUNDLE group as per <xref section="9" sectionFormat="of" target="RFC9143"/>. In addition, per <xref target="RFC9143"/> the WHEP player and media server <bcp14>SHALL</bcp14> use RTP/RTCP multiplexing <xref target="RFC8858"/> for all bundled media. In order to reduce the network resources required at the media server, both the WHEP player and WHEP endpoints <bcp14>MUST</bcp14> include the "rtcp-mux-only" attribute in each bundled "m=" sections as per <xref section="3" sectionFormat="of" target="RFC8858"/>.</t>
        </section>
        <section anchor="single-mediastream">
          <name>Single MediaStream</name>
          <t>WHEP only supports a single MediaStream as defined in <xref target="RFC8830"/> and therefore all "m=" sections <bcp14>MUST</bcp14> contain an "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 than MediaStreamTracks for the same media (audio or video).</t>
        </section>
        <section anchor="trickle-ice-and-ice-restarts">
          <name>Trickle ICE and ICE restarts</name>
          <t>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 WHEP player that is authorized to use it, in which case it <bcp14>MAY</bcp14> support only ICE lite. The WHEP player <bcp14>MUST</bcp14> implement and use full ICE.</t>
          <t>Trickle ICE and ICE restarts support is <bcp14>OPTIONAL</bcp14> for both the WHEP players and media servers as explained in <xref target="ice-support"/>.</t>
        </section>
      </section>
      <section anchor="load-balancing-and-redirections">
        <name>Load balancing and redirections</name>
        <t>WHEP 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>WHEP players <bcp14>SHALL</bcp14> support HTTP redirections as per <xref section="15.4" sectionFormat="of" target="RFC9110"/>. In order to avoid POST requests to be redirected as GET requests, status codes 301 and 302 <bcp14>MUST NOT</bcp14> be used and 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"/>. Redirections are not required to be supported for the PATCH and DELETE requests.</t>
        <t>In case of high load, the WHEP 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"/>, which will likely be alleviated after some delay. The WHEP 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"/>.</t>
      </section>
      <section anchor="stunturn-server-configuration">
        <name>STUN/TURN server configuration</name>
        <t>The WHEP 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 WHEP Endpoint URL.</t>
        <t>Each STUN/TURN server will be returned using the "Link" header field <xref target="RFC8288"/> with a "rel" attribute value of "ice-server" as specified in <xref target="I-D.draft-ietf-wish-whip"/></t>
        <t>It might be also possible to configure the STUN/TURN server URLs with long-term credentials provided by either the broadcasting service or an external TURN provider on the WHEP player, overriding the values provided by the WHEP Endpoint.</t>
      </section>
      <section anchor="authentication-and-authorization">
        <name>Authentication and authorization</name>
        <t>All WHEP endpoints, sessions and clients <bcp14>MUST</bcp14> support HTTP Authentication as per <xref section="11" sectionFormat="of" target="RFC9110"/> and in order to ensure interoperability, bearer token authentication as defined in the next section <bcp14>MUST</bcp14> be supported by all WHEP entities. However this does not preclude the support of additional HTTP authentication schemes as defined in <xref section="11.6" sectionFormat="of" target="RFC9110"/>.</t>
        <section anchor="bearer-token-authentication">
          <name>Bearer token authentication</name>
          <t>WHEP 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"/>. WHEP players <bcp14>MUST</bcp14> implement this authentication and authorization mechanism and send the HTTP Authorization header field in all HTTP requests sent to either the WHEP endpoint or session except the preflight OPTIONS requests for CORS.</t>
          <t>The nature, syntax, and semantics of the bearer token, as well as how to distribute it to the client, is outside the scope of this document. Some examples of the kind of tokens that could be used are, but are not limited to, JWT tokens as per <xref target="RFC6750"/> and <xref target="RFC8725"/> or a shared secret stored on a database. The tokens are typically made available to the end user alongside the WHEP endpoint URL and configured on the WHEP players.</t>
          <t>WHEP endpoints and sessions could perform the authentication and authorization by encoding an authentication token within the URLs for the WHEP endpoints or sessions instead. In case the WHEP player 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="protocol-extensions">
        <name>Protocol extensions</name>
        <t>In order to support future extensions to be defined for the WHEP protocol, a common procedure for registering and announcing the new extensions is defined.</t>
        <t>Protocol extensions supported by the WHEP server <bcp14>MUST</bcp14> be advertised to the WHEP player in the "201 Created" response to the initial HTTP POST request sent to the WHEP Endpoint.
The WHEP 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>Protocol extensions are optional for both WHEP players and WHEP Endpoints and sessions. WHEP players <bcp14>MUST</bcp14> ignore any Link attribute with an unknown "rel" attribute value and WHEP Endpoints and sessions <bcp14>MUST NOT</bcp14> require the usage of any of the extensions.</t>
        <t>Each protocol extension <bcp14>MUST</bcp14> register a unique "rel" attribute value at IANA starting with the prefix: "urn:ietf:params:whep:ext" as specified in <xref target="urn-whep-subspace"/>.</t>
        <t>For example, considering a potential extension of server-to-client communication using server-sent events as specified in https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events, 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:whep:ext:example:server-sent-events" (this document does not specify such an extension, and uses it only as an example).</t>
        <t>In this theoretical case, the "201 Created" response to the HTTP POST request would look like:</t>
        <figure anchor="protocol-extension-example">
          <name>Example of a WHEP protocol extension</name>
          <artwork><![CDATA[
HTTP/1.1 201 Created
Content-Type: application/sdp
Location: https://whep.example.com/session/id
Link: <https://whep.example.com/session/id/sse>;
      rel="urn:ietf:params:whep:ext:example:server-sent-events"
]]></artwork>
        </figure>
        <t><xref target="protocol-extension-example"/> shows an example of a WHEP protocol extension supported by the WHEP session, as indicated in the Link header of the 201 Created response.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document specifies a new protocol on top of HTTP and WebRTC, thus, security protocols and considerations from related specifications apply to the WHEP specification. These include:</t>
      <ul spacing="normal">
        <li>
          <t>WebRTC security considerations: <xref target="RFC8826"/>. HTTPS <bcp14>SHALL</bcp14> be used in order to preserve the WebRTC security model.</t>
        </li>
        <li>
          <t>Transport Layer Security (TLS): <xref target="RFC8446"/> and <xref target="RFC9147"/>.</t>
        </li>
        <li>
          <t>HTTP security: <xref section="11" sectionFormat="of" target="RFC9112"/> and <xref section="17" sectionFormat="of" target="RFC9110"/>.</t>
        </li>
        <li>
          <t>URI security: <xref section="7" sectionFormat="of" target="RFC3986"/>.</t>
        </li>
      </ul>
      <t>On top of that, the WHEP protocol exposes a thin new attack surface specific of the REST API methods used within it:</t>
      <ul spacing="normal">
        <li>
          <t>HTTP POST flooding and resource exhaustion:
It would be possible for an attacker in possession of authentication credentials valid for watching a WHEP stream to make multiple HTTP POST to the WHEP endpoint.
This will force the WHEP endpoint to process the incoming SDP and allocate resources for being able to setup the DTLS/ICE connection.
While the malicious client does not need to initiate the DTLS/ICE connection at all, the WHEP 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 it will not be able to process legitimate incoming ingests.
In order to prevent this scenario, WHEP endpoints <bcp14>SHOULD</bcp14> implement a rate limit and avalanche control mechanism for incoming initial HTTP POST requests.</t>
        </li>
        <li>
          <t>Insecure direct object references (IDOR) on the WHEP session locations:
If the URLs returned by the WHEP endpoint for the WHEP sessions location are easy to guess, it would be possible for an attacker to send multiple HTTP DELETE requests and terminate all the WHEP sessions currently running.
In order to prevent this scenario, WHEP 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"/>, and implement a rate limit and avalanche control mechanism for HTTP DELETE requests.
The security considerations for Universally Unique IDentifier (UUID) <xref section="6" sectionFormat="comma" target="RFC9562"/> are applicable for generating the WHEP sessions location URL.</t>
        </li>
        <li>
          <t>HTTP PATCH flooding: 
Similar to the HTTP POST flooding, a malicious client could also create a resource exhaustion by sending multiple HTTP PATCH request to the WHEP session, although the WHEP 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, WHEP endpoints <bcp14>SHOULD</bcp14> implement a rate limit and avalanche control mechanism for incoming HTTP PATCH requests.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This specification adds a registry for URN sub-namespaces for WHEP protocol extensions.</t>
      <section anchor="registration-of-whep-urn-sub-namespace-and-whep-registries">
        <name>Registration of WHEP URN Sub-namespace and WHEP registries</name>
        <t>IANA is asked to add an entry to the "IETF URN Sub-namespace for Registered Protocol Parameter Identifiers" registry and create a sub-namespace for the Registered Parameter Identifier as per <xref target="RFC3553"/>: "urn:ietf:params:whep".</t>
        <t>To manage this sub-namespace, IANA is asked to create the "WebRTC-HTTP egress protocol (WHEP) URNs" and "WebRTC-HTTP egress protocol (WHEP) extension URNs".</t>
        <section anchor="urn-whep-registry">
          <name>WebRTC-HTTP egress protocol (WHEP) URNs registry</name>
          <t>The "WebRTC-HTTP egress protocol (WHEP) URNs" registry is used to manage entries within the "urn:ietf:params:whep" namespace. The registry descriptions is as follows:</t>
          <ul spacing="normal">
            <li>
              <t>Registry group: WebRTC-HTTP egress protocol (WHEP)</t>
            </li>
            <li>
              <t>Registry name: WebRTC-HTTP egress protocol (WHEP) URNs</t>
            </li>
            <li>
              <t>Specification: this document (RFC TBD)</t>
            </li>
            <li>
              <t>Registration procedure: Specification Required</t>
            </li>
            <li>
              <t>Field names: URI, description, change controller, reference and IANA registry reference</t>
            </li>
          </ul>
          <t>The registry contains a single initial value:</t>
          <ul spacing="normal">
            <li>
              <t>URI: urn:ietf:params:whep:ext</t>
            </li>
            <li>
              <t>Description: WebRTC-HTTP egress protocol (WHEP) extension URNs</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Reference: this document (RFC TBD) Section <xref target="urn-whep-ext-registry"/></t>
            </li>
            <li>
              <t>IANA registry reference: WebRTC-HTTP egress protocol (WHEP) extension URNs registry.</t>
            </li>
          </ul>
        </section>
        <section anchor="urn-whep-ext-registry">
          <name>WebRTC-HTTP egress protocol (WHEP) extension URNs registry</name>
          <t>The "WebRTC-HTTP egress protocol (WHEP) Extension URNs" is used to manage entries within the "urn:ietf:params:whep:ext" namespace. The registry descriptions is as follows:</t>
          <ul spacing="normal">
            <li>
              <t>Registry group: WebRTC-HTTP egress protocol (WHEP)</t>
            </li>
            <li>
              <t>Registry name: WebRTC-HTTP egress protocol (WHEP) Extension URNs</t>
            </li>
            <li>
              <t>Specification: this document (RFC TBD)</t>
            </li>
            <li>
              <t>Registration procedure: Specification Required</t>
            </li>
            <li>
              <t>Field names: URI, description, change controller, reference and IANA registry reference</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="urn-whep-subspace">
        <name>URN Sub-namespace for WHEP</name>
        <t>WHEP endpoint utilizes URNs to identify the supported WHEP protocol extensions on the "rel" attribute of the Link header as defined in <xref target="protocol-extensions"/>.</t>
        <t>This section creates and registers an IETF URN Sub-namespace for use in the WHEP specifications and future extensions.</t>
        <section anchor="specification-template">
          <name>Specification Template</name>
          <t>Namespace ID:</t>
          <ul spacing="normal">
            <li>
              <t>The Namespace ID "whep" has been assigned.</t>
            </li>
          </ul>
          <t>Registration Information:</t>
          <ul spacing="normal">
            <li>
              <t>Version: 1</t>
            </li>
            <li>
              <t>Date: TBD</t>
            </li>
          </ul>
          <t>Declared registrant of the namespace:</t>
          <ul spacing="normal">
            <li>
              <t>Registering organization: The Internet Engineering Task Force.</t>
            </li>
            <li>
              <t>Designated contact: A designated expert will monitor the WHEP public mailing list, "wish@ietf.org".</t>
            </li>
          </ul>
          <t>Declaration of Syntactic Structure:</t>
          <ul spacing="normal">
            <li>
              <t>The Namespace Specific String (NSS) of all URNs that use the "whep" Namespace ID shall have the following structure: urn:ietf:params:whep:{type}:{name}:{other}.</t>
            </li>
            <li>
              <t>The keywords have the following meaning:  </t>
              <ul spacing="normal">
                <li>
                  <t>type: The entity type. This specification only defines the "ext" type.</t>
                </li>
                <li>
                  <t>name: A required ASCII string that conforms to the URN syntax requirements (see <xref target="RFC8141"/>) and defines a major namespace of a WHEP protocol extension. The value <bcp14>MAY</bcp14> also be an industry name or organization name.</t>
                </li>
                <li>
                  <t>other: Any ASCII string that conforms to the URN syntax requirements (see <xref target="RFC8141"/>) and defines the sub-namespace (which <bcp14>MAY</bcp14> be further broken down in namespaces delimited by colons) as needed to uniquely identify an WHEP protocol extension.</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>Relevant Ancillary Documentation:</t>
          <ul spacing="normal">
            <li>
              <t>None</t>
            </li>
          </ul>
          <t>Identifier Uniqueness Considerations:</t>
          <ul spacing="normal">
            <li>
              <t>The designated contact shall be responsible for reviewing and enforcing uniqueness.</t>
            </li>
          </ul>
          <t>Identifier Persistence Considerations:</t>
          <ul spacing="normal">
            <li>
              <t>Once a name has been allocated, it <bcp14>MUST NOT</bcp14> be reallocated for a different purpose.</t>
            </li>
            <li>
              <t>The rules provided for assignments of values within a sub-namespace <bcp14>MUST</bcp14> be constructed so that the meanings of values cannot change.</t>
            </li>
            <li>
              <t>This registration mechanism is not appropriate for naming values whose meanings may change over time.</t>
            </li>
          </ul>
          <t>Process of Identifier Assignment:</t>
          <ul spacing="normal">
            <li>
              <t>Namespace with type "ext" (e.g., "urn:ietf:params:whep:ext") is reserved for IETF-approved WHEP specifications.</t>
            </li>
          </ul>
          <t>Process of Identifier Resolution:</t>
          <ul spacing="normal">
            <li>
              <t>None specified.</t>
            </li>
          </ul>
          <t>Rules for Lexical Equivalence:</t>
          <ul spacing="normal">
            <li>
              <t>No special considerations; the rules for lexical equivalence specified in <xref target="RFC8141"/> apply.</t>
            </li>
          </ul>
          <t>Conformance with URN Syntax:</t>
          <ul spacing="normal">
            <li>
              <t>No special considerations.</t>
            </li>
          </ul>
          <t>Validation Mechanism:</t>
          <ul spacing="normal">
            <li>
              <t>None specified.</t>
            </li>
          </ul>
          <t>Scope:</t>
          <ul spacing="normal">
            <li>
              <t>Global.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="registering-whep-protocol-extensions-urns">
        <name>Registering WHEP Protocol Extensions URNs</name>
        <t>This section defines the process for registering new WHEP protocol extensions URNs with IANA in the "WebRTC-HTTP egress protocol (WHEP) extension URNs" registry (see <xref target="urn-whep-subspace"/>).</t>
        <t>A WHEP Protocol Extension URNs is used as a value in the "rel" attribute of the Link header as defined in <xref target="protocol-extensions"/> for the purpose of signaling the WHEP protocol extensions supported by the WHEP endpoints.</t>
        <t>WHEP Protocol Extensions URNs have an "ext" type as defined in <xref target="urn-whep-subspace"/>.</t>
        <section anchor="registration-procedure">
          <name>Registration Procedure</name>
          <t>The IETF has created a mailing list, "wish@ietf.org", which can be used
   for public discussion of WHEP protocol extensions proposals prior to registration.
   Use of the mailing list is strongly encouraged. The IESG has
   appointed a designated expert as per <xref target="RFC8126"/> who will monitor the
   wish@ietf.org mailing list and review registrations.</t>
          <t>Registration of new "ext" type URNs (in the namespace "urn:ietf:params:whep:ext") belonging to a WHEP Protocol Extension <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 designated expert as per Section 4.6 of <xref target="RFC8126"/>.
   An Standards Track RFC is <bcp14>REQUIRED</bcp14> for the registration of new value data types that modify existing properties.
   An Standards Track RFC is also <bcp14>REQUIRED</bcp14> for registration of WHEP Protocol Extensions URNs that modify WHEP Protocol Extensions previously documented in an existing RFC.</t>
          <t>The registration procedure begins when a completed registration template, defined in the sections below, is sent to iana@iana.org.
   Decisions made by the designated expert can be appealed to an Applications and Real Time (ART) Area Director, then to the IESG.
   The normal appeals procedure described in <xref target="BCP9"/> is to be followed.</t>
          <t>Once the registration procedure concludes successfully, IANA creates
   or modifies the corresponding record in the WHEP Protocol Extension registry.</t>
          <t>An RFC specifying one or more new WHEP Protocol Extension URNs <bcp14>MUST</bcp14> include the
   completed registration templates, which <bcp14>MAY</bcp14> be expanded with
   additional information. These completed templates 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">
          <name>Guidance for Designated Experts</name>
          <t>The Designated Expert (DE) is expected to ascertain the existence of suitable documentation (a specification) as described in <xref target="RFC8126"/> and to verify that the document is permanently and publicly available.</t>
          <t>The DE is also expected to check the clarity of purpose and use of the requested registration.</t>
          <t>Additionally, the DE must verify that any request for one of these registrations has been made available for review and comment by posting the request to the WebRTC Ingest Signaling over HTTPS (wish) Working Group mailing list.</t>
          <t>Specifications should be documented in an Internet-Draft. Lastly, the DE must ensure that any other request for a code point does not conflict with work that is active in or already published by the IETF.</t>
        </section>
        <section anchor="whep-protocol-extension-registration-template">
          <name>WHEP Protocol Extension Registration Template</name>
          <t>A WHEP Protocol Extension URNs is defined by completing the following template:</t>
          <ul spacing="normal">
            <li>
              <t>URN: A unique URN for the WHEP Protocol Extension.</t>
            </li>
            <li>
              <t>Reference: A formal reference to the publicly available specification</t>
            </li>
            <li>
              <t>Description: A brief description of the function of the extension, in a short paragraph or two</t>
            </li>
            <li>
              <t>Contact information: Contact information for the organization or person making the registration</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors wish to thank Lorenzo Miniero, Juliusz Chroboczek, Adam Roach, Nils Ohlmeier, Christer Holmberg, Cameron Elliott, Gustavo Garcia, Jonas Birme, Sandro Gauci, 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>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="FETCH" target="https://fetch.spec.whatwg.org">
          <front>
            <title>Fetch - Living Standard</title>
            <author>
              <organization>WHATWG</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="SCTE35" target="https://account.scte.org/standards/library/catalog/scte-35-digital-program-insertion-cueing-message">
          <front>
            <title>Digital Program Insertion Cueing Message</title>
            <author>
              <organization>ANSI</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="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>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>This specification obsoletes RFC 8829.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9429"/>
          <seriesInfo name="DOI" value="10.17487/RFC9429"/>
        </reference>
        <reference anchor="RFC3264">
          <front>
            <title>An Offer/Answer Model with Session Description Protocol (SDP)</title>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"/>
            <date month="June" year="2002"/>
            <abstract>
              <t>This document defines a mechanism by which two entities can make use of the Session Description Protocol (SDP) to arrive at a common view of a multimedia session between them. In the model, one participant offers the other a description of the desired session from their perspective, and the other participant answers with the desired session from their perspective. This offer/answer model is most useful in unicast sessions where information from both participants is needed for the complete view of the session. The offer/answer model is used by protocols like the Session Initiation Protocol (SIP). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3264"/>
          <seriesInfo name="DOI" value="10.17487/RFC3264"/>
        </reference>
        <reference anchor="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>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="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>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="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>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>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="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>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="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>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>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="W3C.REC-ldp-20150226" target="https://www.w3.org/TR/2015/REC-ldp-20150226/">
          <front>
            <title>Linked Data Platform 1.0</title>
            <author fullname="Ashok Malhotra" role="editor"/>
            <author fullname="John Arwe" role="editor"/>
            <author fullname="Steve Speicher" role="editor"/>
            <date day="26" month="February" year="2015"/>
          </front>
          <seriesInfo name="W3C REC" value="REC-ldp-20150226"/>
          <seriesInfo name="W3C" value="REC-ldp-20150226"/>
        </reference>
        <reference anchor="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>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>This document obsoletes RFC 5245.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8445"/>
          <seriesInfo name="DOI" value="10.17487/RFC8445"/>
        </reference>
        <reference anchor="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>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="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>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>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="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>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="RFC8863">
          <front>
            <title>Interactive Connectivity Establishment Patiently Awaiting Connectivity (ICE PAC)</title>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="J. Uberti" initials="J." surname="Uberti"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>During the process of establishing peer-to-peer connectivity, Interactive Connectivity Establishment (ICE) agents can encounter situations where they have no candidate pairs to check, and, as a result, conclude that ICE processing has failed. However, because additional candidate pairs can be discovered during ICE processing, declaring failure at this point may be premature. This document discusses when these situations can occur.</t>
              <t>This document updates RFCs 8445 and 8838 by requiring that an ICE agent wait a minimum amount of time before declaring ICE failure, even if there are no candidate pairs left to check.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8863"/>
          <seriesInfo name="DOI" value="10.17487/RFC8863"/>
        </reference>
        <reference anchor="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>This document describes Session Description Protocol (SDP) Offer/Answer procedures for carrying out Interactive Connectivity Establishment (ICE) between the agents.</t>
              <t>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="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>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>This specification defines a new RTP Control Protocol (RTCP) Source Description (SDES) item and a new RTP header extension.</t>
              <t>This specification updates RFCs 3264, 5888, and 7941.</t>
              <t>This specification obsoletes RFC 8843.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9143"/>
          <seriesInfo name="DOI" value="10.17487/RFC9143"/>
        </reference>
        <reference anchor="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>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="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>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>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="RFC8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>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>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="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>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="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>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">
          <front>
            <title>Security Considerations for WebRTC</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>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="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>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>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="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>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>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>This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="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>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>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="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>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">
          <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>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>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="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>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>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="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>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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="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>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">
          <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>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">
          <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>This memorandum defines the Real-Time Streaming Protocol (RTSP) version 2.0, which obsoletes RTSP version 1.0 defined in RFC 2326.</t>
              <t>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="I-D.draft-ietf-wish-whip">
          <front>
            <title>WebRTC-HTTP ingestion protocol (WHIP)</title>
            <author fullname="Sergio Garcia Murillo" initials="S. G." surname="Murillo">
              <organization>Millicast</organization>
            </author>
            <author fullname="Dr. Alex Gouaillard" initials="A." surname="Gouaillard">
              <organization>CoSMo Software</organization>
            </author>
            <date day="21" month="August" year="2024"/>
            <abstract>
              <t>   This document describes a simple HTTP-based protocol that will allow
   WebRTC-based ingestion of content into streaming services and/or
   CDNs.

   This document updates RFC 8842 and RFC 8840.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wish-whip-16"/>
        </reference>
        <referencegroup anchor="BCP56" target="https://www.rfc-editor.org/info/bcp56">
          <reference anchor="RFC9205" target="https://www.rfc-editor.org/info/rfc9205">
            <front>
              <title>Building Protocols with HTTP</title>
              <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
              <date month="June" year="2022"/>
              <abstract>
                <t>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>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>
        <reference anchor="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>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>This document obsoletes RFC 7807.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9457"/>
          <seriesInfo name="DOI" value="10.17487/RFC9457"/>
        </reference>
        <reference anchor="RFC8141">
          <front>
            <title>Uniform Resource Names (URNs)</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <date month="April" year="2017"/>
            <abstract>
              <t>A Uniform Resource Name (URN) is a Uniform Resource Identifier (URI) that is assigned under the "urn" URI scheme and a particular URN namespace, with the intent that the URN will be a persistent, location-independent resource identifier. With regard to URN syntax, this document defines the canonical syntax for URNs (in a way that is consistent with URI syntax), specifies methods for determining URN-equivalence, and discusses URI conformance. With regard to URN namespaces, this document specifies a method for defining a URN namespace and associating it with a namespace identifier, and it describes procedures for registering namespace identifiers with the Internet Assigned Numbers Authority (IANA). This document obsoletes both RFCs 2141 and 3406.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8141"/>
          <seriesInfo name="DOI" value="10.17487/RFC8141"/>
        </reference>
        <reference anchor="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>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>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>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>
        <referencegroup anchor="BCP9" target="https://www.rfc-editor.org/info/bcp9">
          <reference anchor="RFC2026" target="https://www.rfc-editor.org/info/rfc2026">
            <front>
              <title>The Internet Standards Process -- Revision 3</title>
              <author fullname="S. Bradner" initials="S." surname="Bradner"/>
              <date month="October" year="1996"/>
              <abstract>
                <t>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">
            <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>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">
            <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>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">
            <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>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">
            <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>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">
            <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>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">
            <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>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">
            <front>
              <title>Responsibility Change for the RFC Series</title>
              <author fullname="B. Rosen" initials="B." surname="Rosen"/>
              <date month="June" year="2022"/>
              <abstract>
                <t>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>
      </references>
    </references>
    <?line 973?>



  </back>
  <!-- ##markdown-source:
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
bVfeTxVfF254rP3wP+e4e/90bPBrjbDHMVIzz8issXpSvJiDslZI9oFwsR38
VdWrXD7zWl+eUVcAeUR59Zz8i8nZ1BN/vdEtp7mb+QLbjlPlVGSUrfNtJVb9
AGXVZ7mf5rrpqkr4bmHJu+wQn4m66hluMm6Wp04QfnMQTEaRmu6DYpbVUCq0
3b9Cpt+rZhwXIk+37hQbL++p4k1ZualS8+PNaiZkdTZXU87EHPvP6oY7WDNc
tF6x21lMf8Yc9CjBITGFHaaTnT9iKgeqKYTijjsfYFuc+E7dLOAM5UA661/V
DHBtpixyrd0RvyErLXYAsNVovI05E1+ug0oU6KYVbNbPl8uIbBFjorhVvzga
jgafP8uDUk3+84QK8QJshB27qkeHE0aZ3LtshoGNO6gJDV0gsFKNHbKiKY2+
14W7K1XapFARH5fcZ5wJXtd7wfygpgGD8TN2tUvwAABAQJZbo92Lb53UIys/
Zd+Yh2rfdLsVeU71ZdHymNXZ61Ky3b0L7OmbdfjG5dPY7+5WFhnKEmHZgwPO
nUsbyh12mlZLZfy1tp0QHMm01JnH6sSsVkLg46aARYewcAMLqdSwq9pciXvc
7XlFc+S49FsFPXhPom99QxQuVZTNtPkygcuimwkOe5QmWea+5T4pF6ry/HLB
Pcr2j95eXB5UqqDpJi0qGkaSUz1/TG6FlUql+SoFTbGzx2Fl9xzsJ03PknsV
FwIVPKCmLliT6vveUevi5MhdgsxA31a7i/fZML3guSkofPrGbPXeaOBv8iKK
fn8gs4iMK4K4m5ruwUXVmh+oxgVXZLWRalLzKCpI1CUrDDK6wgCsxVJ3Kfw8
c0Do4L65OLHc+kyV58g7VRKzUgdb+C2VEZphNRGtE+TlcinwMhM64VT3ozKg
l7W4b5y++8GokwnMOxaQ/cCWE+ppAxxvEUd4msQBkdvdyiLa4pIpMZ8Da+Hi
GHMraz9fwLSApzL9yID8uDfGC5JQKY0+6h5wxjJUOz1YDuBPyqwURU4mMVVX
UtXNih3Hwk1AF+DAEuNAtmfQ28dfQB0IbrB5glV76zCGXAiS8NxVKEhhLFnm
g30JVHM0a8Vw6qqQrloz5VCBUJZu1rKEytdN4dXlOdhPw9VrqduVrmPSJcR2
GZO8byPOiMdgGTjW60gAyMrnZUSlUgWOlNqfWYeFn/C1C6zuKJJCmBg3mhBc
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
fYglBVwiAhUzAI9wXZdueG80Gv8fZU/GUOLnAAA=

-->

</rfc>
