<?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.6.14 (Ruby 2.7.0) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-wish-whip-04" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.13.1 -->
  <front>
    <title abbrev="whip">WebRTC-HTTP ingestion protocol (WHIP)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-wish-whip-04"/>
    <author initials="S." surname="Murillo" fullname="Sergio Garcia Murillo">
      <organization>Millicast</organization>
      <address>
        <email>sergio.garcia.murillo@cosmosoftware.io</email>
      </address>
    </author>
    <author initials="A." surname="Gouaillard" fullname="Alexandre Gouaillard">
      <organization>CoSMo Software</organization>
      <address>
        <email>alex.gouaillard@cosmosoftware.io</email>
      </address>
    </author>
    <date year="2022" month="July" day="25"/>
    <area>ART</area>
    <workgroup>wish</workgroup>
    <keyword>WebRTC</keyword>
    <abstract>
      <t>This document describes a simple HTTP-based protocol that will allow WebRTC-based ingestion of content into streaming services and/or CDNs.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>While WebRTC has been very successful in a wide range of scenarios, its adoption in the broadcasting/streaming industry is lagging behind.</t>
      <t>The IETF RTCWEB working group standardized JSEP (<xref target="RFC8829"/>), 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"/> as well as 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. This flexibility has allowed the implementation of a wide range of services. However, those services are typically standalone silos which don't require interoperability with other services or leverage the existence of tools that can communicate with them.</t>
      <t>In the broadcasting/streaming world, the use of hardware encoders that make it very simple to plug in cables carrying raw media, encode it in-place, and push it to any streaming service or CDN ingest is already ubiquitous. The adoption of a custom signaling transport protocol for each WebRTC service has hindered broader adoption as an ingestion protocol.</t>
      <t>While some standard signaling protocols are available that can be integrated with WebRTC, 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 and may be the closest in terms of features to WebRTC, is not compatible with the SDP offer/answer model <xref target="RFC3264"/>.</t>
      <t>So, currently, there is no standard protocol designed for ingesting media into a streaming service using WebRTC and so content providers still rely heavily on protocols like RTMP for doing so. Most of those protocols are not RTP based, requiring media protocol translation when doing egress via WebRTC. Avoiding this media protocol translation is desirable as there is no functional parity between those protocols and WebRTC and it increases the implementation complexity at the media server side.</t>
      <t>Also, the media codecs used in those protocols tend to be limited and not negotiated, not always matching the mediac codes supported in WebRTC. This requires transcoding on the ingest node, which introduces delay, degrades media quality and increases the processing workload required on the server side.  Server side transcoding that has traditionally been done to present multiple renditions in Adaptive Bit Rate Streaming (ABR) implementations can be replaced with Simulcast <xref target="RFC8853"/> and SVC codecs that are well supported by WebRTC clients. In addition, WebRTC clients can adjust client-side encoding parameters based on RTCP feedback to maximize encoding quality.</t>
      <t>This document proposes a simple protocol for supporting WebRTC as media ingestion method which:</t>
      <ul spacing="normal">
        <li>Is easy to implement,</li>
        <li>Is as easy to use as popular IP-based broadcast protocols</li>
        <li>Is fully compliant with WebRTC and RTCWEB specs</li>
        <li>Allows for ingest both in traditional media platforms and in WebRTC end-to-end platforms with the lowest possible latency.</li>
        <li>Lowers the requirements on both hardware encoders and broadcasting services to support WebRTC.</li>
        <li>Is usable both in web browsers and in native encoders.</li>
      </ul>
    </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>
      <ul spacing="normal">
        <li>WHIP client: WebRTC media encoder or producer that acts as a client of the WHIP protocol by encoding and delivering the media to a remote Media Server.</li>
        <li>WHIP endpoint: Ingest server receiving the initial WHIP request.</li>
        <li>WHIP endpoint URL: URL of the WHIP endpoint that will create the WHIP resource.</li>
        <li>Media Server: WebRTC Media Server or consumer that establishes the media session with the WHIP client and receives the media produced by it.</li>
        <li>WHIP resource: Allocated resource by the WHIP endpoint for an ongoing ingest session that the WHIP client can send requests for altering the session (ICE operations or termination, for example).</li>
        <li>WHIP resource URL: URL allocated to a specific media session by the WHIP endpoint which can be used to perform operations such as terminating the session or ICE restarts.</li>
      </ul>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>The WebRTC-HTTP Ingest Protocol (WHIP) uses an HTTP POST request to perform a single-shot SDP offer/answer so an ICE/DTLS session can be established between the encoder/media producer (WHIP client) and the broadcasting ingestion endpoint (Media Server).</t>
      <t>Once the ICE/DTLS session is set up, the media will flow unidirectionally from the encoder/media producer (WHIP client) to the broadcasting ingestion endpoint (Media Server). In order to reduce complexity, no SDP renegotiation is supported, so no tracks or streams can be added or removed once the initial SDP offer/answer over HTTP is completed.</t>
      <figure>
        <name>WHIP session setup and teardown</name>
        <artwork><![CDATA[
                                                                               
 +-------------+    +---------------+ +--------------+ +---------------+
 | WHIP client |    | WHIP endpoint | | Media Server | | WHIP Resource |
 +--+----------+    +---------+-----+ +------+-------+ +--------|------+
    |                         |              |                  |       
    |                         |              |                  |       
    |HTTP POST (SDP Offer)    |              |                  |       
    +------------------------>+              |                  |       
    |201 Created (SDP answer) |              |                  |       
    +<------------------------+              |                  |       
    |          ICE REQUEST                   |                  |       
    +--------------------------------------->+                  |       
    |          ICE RESPONSE                  |                  |       
    |<---------------------------------------+                  |       
    |          DTLS SETUP                    |                  |       
    |<======================================>|                  |       
    |          RTP/RTCP FLOW                 |                  |       
    +<-------------------------------------->+                  |       
    | HTTP DELETE                                               |       
    +---------------------------------------------------------->+       
    | 200 OK                                                    |       
    <-----------------------------------------------------------x       
                                                                               
]]></artwork>
      </figure>
    </section>
    <section anchor="protocol-operation">
      <name>Protocol Operation</name>
      <t>In order to set up an ingestion session, the WHIP client will generate an SDP offer according to the JSEP rules and perform an HTTP POST request to the configured WHIP endpoint URL.</t>
      <t>The HTTP POST request will have a content type of "application/sdp" and contain the SDP offer as the body. The WHIP endpoint will generate an SDP answer 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 resource.</t>
      <t>The SDP offer <bcp14>SHOULD</bcp14> use the "sendonly" attribute and the SDP answer <bcp14>MUST</bcp14> use the "recvonly" attribute.</t>
      <figure>
        <name>HTTP POST doing SDP O/A example</name>
        <artwork><![CDATA[
POST /whip/endpoint HTTP/1.1
Host: whip.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=msid-semantic: WMS
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=ice-options:trickle
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=bundle-only
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=sendonly
a=msid:- d46fb922-d52a-4e9c-aa87-444eadc1521b
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
m=video 9 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=ice-options:trickle
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=sendonly
a=msid:- d46fb922-d52a-4e9c-aa87-444eadc1521b
a=rtcp-mux
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: "38sdf4fdsf54:EsAw"
Content-Type: application/sdp
Content-Length: 1400
Location: https://whip.example.com/resource/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=msid-semantic: WMS *
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=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
m=video 9 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=recvonly
a=rtcp-mux
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
]]></artwork>
      </figure>
      <t>Once a session is setup, ICE consent freshness <xref target="RFC7675"/> will be used to detect abrupt disconnection and DTLS teardown for session termination by either side.</t>
      <t>To explicitly terminate a session, the WHIP client <bcp14>MUST</bcp14> perform an HTTP DELETE request to the resource URL returned in the Location header field of the initial HTTP POST. Upon receiving the HTTP DELETE request, the WHIP resource 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 target="RFC7675"/> section 5.2 for immediate revocation of consent.</t>
      <t>The WHIP endpoints <bcp14>MUST</bcp14> return an HTTP 405 response for any HTTP GET, HEAD or PUT requests on the resource URL in order to reserve its usage for future versions of this protocol specification.</t>
      <t>The WHIP resources <bcp14>MUST</bcp14> return an HTTP 405 response for any HTTP GET, HEAD, POST or PUT requests on the resource URL in order to reserve its usage for future versions of this protocol specification.</t>
      <section anchor="ice-and-nat-support">
        <name>ICE and NAT support</name>
        <t>The initial offer by the WHIP client <bcp14>MAY</bcp14> be sent after the full ICE gathering is complete with the full list of ICE candidates, or it <bcp14>MAY</bcp14> only contain local candidates (or even an empty list of candidates).</t>
        <t>In order to simplify the protocol, there is no support for exchanging gathered trickle candidates from Media Server ICE candidates once the SDP answer is sent. The  WHIP Endpoint <bcp14>SHALL</bcp14> gather all the ICE candidates for the Media Server before responding to the client request and the SDP answer <bcp14>SHALL</bcp14> contain the full list of ICE candidates of the Media Server. The Media Server <bcp14>MAY</bcp14> use ICE lite, while the WHIP client <bcp14>MUST</bcp14> implement full ICE.</t>
        <t>The WHIP client <bcp14>MAY</bcp14> perform trickle ICE or ICE restarts <xref target="RFC8863"/> by sending an HTTP PATCH request to the WHIP resource URL with a body containing a SDP fragment with MIME type "application/trickle-ice-sdpfrag" as specified in <xref target="RFC8840"/>. When used for trickle ICE, the body of this PATCH message will contain the new ICE candidate; when used for ICE restarts, it will contain a new ICE ufrag/pwd pair.</t>
        <t>Trickle ICE and ICE restart support is <bcp14>OPTIONAL</bcp14> for a WHIP resource. If both Trickle ICE or ICE restarts are not supported by the WHIP resource, it <bcp14>MUST</bcp14> return a 405 Method Not Allowed response for any HTTP PATCH request. If the WHIP resource supports either Trickle ICE or ICE restarts, but not both, it <bcp14>MUST</bcp14> return a 501 Not Implemented for the HTTP PATCH requests that are not supported.</t>
        <t>As the HTTP PATCH request sent by a WHIP client may be received out-of-order by the WHIP resource, the WHIP resource <bcp14>MUST</bcp14> generate a
unique strong entity-tag identifying the ICE session as per <xref target="RFC9110"/> section 2.3. 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 response to the initial POST request to the WHIP endpoint. It <bcp14>MUST</bcp14> also be returned in the 200 OK of any PATCH request that triggers an ICE restart.</t>
        <t>A WHIP client sending a PATCH request for performing trickle ICE <bcp14>MUST</bcp14> include an "If-Match" header field with the latest known entity-tag as per <xref target="RFC9110"/> section 3.1. When the PATCH request is received by the WHIP resource, it <bcp14>MUST</bcp14> compare the indicated entity-tag value with the current entity-tag of the resource as per <xref target="RFC9110"/> section 3.1 and return a "412 Precondition Failed" response if they do not match.</t>
        <t>WHIP clients <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.</t>
        <t>A WHIP resource receiving a PATCH request with new ICE candidates, but which does not perform an ICE restart, <bcp14>MUST</bcp14> return a "204 No Content" response without body. If the Media Server does not support a candidate transport or is not able to resolve the connection address, it <bcp14>MUST</bcp14> accept the HTTP request with the 204 response and silently discard the candidate.</t>
        <figure>
          <name>Trickle ICE request</name>
          <artwork><![CDATA[
PATCH /resource/id HTTP/1.1
Host: whip.example.com
If-Match: "38sdf4fdsf54:EsAw"
Content-Type: application/trickle-ice-sdpfrag
Content-Length: 548

a=ice-ufrag:EsAw
a=ice-pwd:P2uYro0UCOQ4zxjKXaWCBui1
m=audio RTP/AVP 0
a=mid:0
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.1 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>A WHIP client sending a PATCH request for performing ICE restart <bcp14>MUST</bcp14> contain an "If-Match" header field with a field-value "*" as per <xref target="RFC9110"/> section 3.1.</t>
        <t>If the HTTP PATCH request results in an ICE restart, the WHIP resource <bcp14>SHALL</bcp14> return a "200 OK" with an "application/trickle-ice-sdpfrag" body containing the new ICE username fragment and password. The response may optionally contain the new set of ICE candidates for the Media Server and the new entity-tag correspond to the new ICE session in an ETag response header field.</t>
        <t>If the ICE request cannot be satisfied by the WHIP resource, the resource <bcp14>MUST</bcp14> return an appropriate HTTP error code and <bcp14>MUST NOT</bcp14> terminate the session immediately. The WHIP client <bcp14>MAY</bcp14> retry performing a new ICE restart or terminate the session by issuing an HTTP DELETE request instead. In either case, the session <bcp14>MUST</bcp14> be terminated if the ICE consent expires as a consequence of the failed ICE restart as per <xref target="RFC7675"/> section 5.1.</t>
        <figure>
          <name>ICE restart request</name>
          <artwork><![CDATA[
PATCH /resource/id HTTP/1.1
Host: whip.example.com
If-Match: "*"
Content-Type: application/trickle-ice-sdpfrag
Content-Length: 54

a=ice-ufrag:ysXw
a=ice-pwd:vw5LmwG4y/e6dPP/zAP9Gp5k

HTTP/1.1 200 OK
ETag: "289b31b754eaa438:ysXw"
Content-Type: application/trickle-ice-sdpfrag
Content-Length: 102

a=ice-lite
a=ice-ufrag:289b31b754eaa438
a=ice-pwd:0b66f472495ef0ccac7bda653ab6be49ea13114472a5d10a
]]></artwork>
        </figure>
        <t>Because the WHIP client needs to know the entity-tag associated with the ICE session in order to send new ICE candidates, it <bcp14>MUST</bcp14> buffer any gathered candidates before it receives the HTTP response to the initial POST request or the PATCH request with the new entity-tag value. Once it knows the entity-tag value, the WHIP client <bcp14>SHOULD</bcp14> send a single aggregated HTTP PATCH request with all the ICE candidates it has buffered so far.</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/pwd frags and ignore any further HTTP PATCH response received from a pending HTTP PATCH request. Clients <bcp14>MUST</bcp14> apply only the ICE information received in the response to the last sent request. If there is a mismatch between the ICE information at the client and at the server (because of an out-of-order request), the STUN requests will contain invalid ICE information and will be rejected by the server. When this situation is detected by the WHIP Client, it <bcp14>SHOULD</bcp14> send a new ICE restart request to the server.</t>
      </section>
      <section anchor="webrtc-constraints">
        <name>WebRTC constraints</name>
        <t>In the specific case of media ingestion into a streaming service, some assumptions can be made about the server-side which simplifies the WebRTC compliance burden, as detailed in WebRTC-gateway document <xref target="I-D.draft-ietf-rtcweb-gateways"/>.</t>
        <t>In order to reduce the complexity of implementing WHIP in both clients and Media Servers, WHIP imposes the following restrictions regarding WebRTC usage:</t>
        <t>Both the WHIP client and the WHIP endpoint <bcp14>SHALL</bcp14> use SDP bundle <xref target="RFC9143"/>. Each "m=" section <bcp14>MUST</bcp14> be part of a single BUNDLE group. Hence, when a WHIP client sends an SDP offer, it <bcp14>MUST</bcp14> include a "bundle-only" attribute in each bundled "m=" section. The WHIP client and the Media Server <bcp14>MUST</bcp14> support multiplexed media associated with the BUNDLE group as per <xref target="RFC9143"/> section 9. In addition, per <xref target="RFC9143"/> the WHIP client and Media Server will use RTP/RTCP multiplexing for all bundled media.  The WHIP client and Media Server <bcp14>SHOULD</bcp14> include the "rtcp-mux-only" attribute in each bundled "m=" sections.</t>
        <t>While this version of the specification only supports a single audio and video track, in order to ensure forward compatibility, if the number of audio and or video tracks or number streams is not supported by the WHIP Endpoint, it <bcp14>MUST</bcp14> reject the HTTP POST request with a 406 Not Acceptable error code.</t>
        <t>Furthermore, the WHIP Endpoint <bcp14>SHOULD NOT</bcp14> reject individual "m=" sections as per <xref target="RFC8829"/> section 5.3.1 in case there is any error processing the "m=" section, but reject the HTTP POST request with a 406 Not Acceptable error code to prevent having partially successful WHIP sessions.</t>
        <t>When a WHIP client sends an SDP offer, it <bcp14>SHOULD</bcp14> insert an SDP "setup" attribute with an "actpass" attribute value, as defined in <xref target="RFC8842"/>. However, if the WHIP client only implements the DTLS client role, it <bcp14>MAY</bcp14> use an SDP "setup" attribute with an "active" attribute value. If the WHIP endpoint does not support an SDP offer with an SDP "setup" attribute with an "active" attribute value, it <bcp14>SHOULD</bcp14> reject the request with a 422 Unprocessable Entity response.</t>
        <t>NOTE: <xref target="RFC8842"/> defines that the offerer must insert an SDP "setup" attribute with an "actpass" attribute value. However, the WHIP client will always communicate with a Media Server that is expected to support the DTLS server role, in which case the client might choose to only implement support for the DTLS client role.</t>
        <t>Tricke ICE and ICE restarts support is <bcp14>OPTIONAL</bcp14> for both the WHIP clients and Media Servers as explained in section 4.1.</t>
      </section>
      <section anchor="load-balancing-and-redirections">
        <name>Load balancing and redirections</name>
        <t>WHIP endpoints and Media Servers might not be colocated on the same server, so it is possible to load balance incoming requests to different Media Servers. WHIP clients <bcp14>SHALL</bcp14> support HTTP redirection via the "307 Temporary Redirect response code" as described in <xref target="RFC9110"/> section 6.4.7. The WHIP resource URL <bcp14>MUST</bcp14> be a final one, and redirections are not required to be supported for the PATCH and DELETE requests sent to it.</t>
        <t>In case of high load, the WHIP endpoints <bcp14>MAY</bcp14> return a 503 (Service Unavailable) status code indicating that the server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. The WHIP endpoint might send a Retry-After header field indicating the minimum time that the user agent ought to wait before making a follow-up request.</t>
      </section>
      <section anchor="stunturn-server-configuration">
        <name>STUN/TURN server configuration</name>
        <t>The WHIP endpoint <bcp14>MAY</bcp14> return STUN/TURN server configuration URLs and credentials usable by the client in the "201 Created" response to the HTTP POST request to the WHIP endpoint URL.</t>
        <t>Each STUN/TURN server will be returned using the "Link" header field <xref target="RFC8288"/> with a "rel"" attribute value of "ice-server". The Link target URI is the server URL as defined in <xref target="RFC7064"/> and <xref target="RFC7065"/>. The credentials are encoded in the Link target attributes as follows:</t>
        <ul spacing="normal">
          <li>username: If the Link header field represents a TURN server, and credential-type is "password", then this attribute specifies the username to use with that TURN server.</li>
          <li>credential: If the "credential-type" attribute is missing or has a "password" value, the credential attribute represents a long-term authentication password, as described in <xref target="RFC8489"/>, Section 10.2.</li>
          <li>credential-type:  If the Link header field represents a TURN server, then this attribute specifies how the credential attribute value should be used when that TURN server requests authorization. The default value if the attribute is not present is "password".</li>
        </ul>
        <figure>
          <name>Example ICE server configuration</name>
          <artwork><![CDATA[
     Link: <stun:stun.example.net>; rel="ice-server"
     Link: <turn:turn.example.net?transport=udp>; rel="ice-server";
           username="user"; credential="myPassword"; credential-type="password"
     Link: <turn:turn.example.net?transport=tcp>; rel="ice-server";
           username="user"; credential="myPassword"; credential-type="password"
     Link: <turns:turn.example.net?transport=tcp>; rel="ice-server";
           username="user"; credential="myPassword"; credential-type="password"
]]></artwork>
        </figure>
        <t>NOTE: The naming of both the "rel" attribute value of "ice-server" and the target attributes follows the one used on the W3C WebRTC recommendation <xref target="W3C.REC-webrtc-20210126"/> RTCConfiguration dictionary in section 4.2.1. "rel" attribute value of "ice-server" is not prepended with the "urn:ietf:params:whip:" so it can be reused by other specifications which may use this mechanism to configure the usage of STUN/TURN servers.</t>
        <t>There are some WebRTC implementations that do not support updating the STUN/TURN server configuration after the local offer has been created as specified in <xref target="RFC8829"/> section 4.1.18. In order to support these clients, the WHIP endpoint <bcp14>MAY</bcp14> also include the STUN/TURN server configuration on the responses to OPTIONS request sent to the WHIP endpoint URL before the POST request is sent.</t>
        <t>The generation of the TURN server credentials may require performing a request to an external provider, which can both add latency to the OPTION request processing and increase the processing required to handle that request. In order to prevent this, the WHIP Endpoint <bcp14>SHOULD NOT</bcp14> return the STUN/TURN server configuration if the OPTION request is a preflight request for CORS, that is, if The OPTION request does not contain an Access-Control-Request-Method with "POST" value and the the Access-Control-Request-Headers HTTP header does not contain the "Link" value.</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 WHIP client, overriding the values provided by the WHIP endpoint.</t>
      </section>
      <section anchor="authentication-and-authorization">
        <name>Authentication and authorization</name>
        <t>WHIP endpoints and resources <bcp14>MAY</bcp14> require the HTTP request to be authenticated using an HTTP Authorization header field with a Bearer token as specified in <xref target="RFC6750"/> section 2.1. WHIP clients <bcp14>MUST</bcp14> implement this authentication and authorization mechanism and send the HTTP Authorization header field in all HTTP requests sent to either the WHIP endpoint or resource except the preflight OPTIONS requests for CORS.</t>
        <t>WHIP endpoints and resources <bcp14>MAY</bcp14> require the HTTP request to be authenticated using an HTTP Authorization header field with a Bearer token as specified in <xref target="RFC6750"/> section 2.1. WHIP clients <bcp14>MUST</bcp14> implement this authentication and authorization mechanism and send the HTTP Authorization header field in all HTTP requests sent to either the WHIP endpoint or resource.</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 WHIP endpoint URL and configured on the WHIP clients (similar to the way RTMP URLs and Stream Keys are distributed).</t>
        <t>WHIP endpoints and resources could perform the authentication and authorization by encoding an authentication token within the URLs for the WHIP endpoints or resources instead. In case the WHIP client is not configured to use a bearer token, the HTTP Authorization header field must not be sent in any request.</t>
      </section>
      <section anchor="simulcast-and-scalable-video-coding">
        <name>Simulcast and scalable video coding</name>
        <t>Both Simulcast <xref target="RFC8853"/> and Scalable Video Coding (SVC), including K-SVC (also known as "S modes", in which multiple encodings are sent on the same SSRC), <bcp14>MAY</bcp14> be supported by both the Media Servers and WHIP clients through negotiation in the SDP offer/answer.</t>
        <t>If the client supports simulcast and wants to enable it for publishing, it <bcp14>MUST</bcp14> negotiate the support in the SDP offer according to the procedures in <xref target="RFC8853"/> section 5.3. A server accepting a simulcast offer <bcp14>MUST</bcp14> create an answer according to the procedures <xref target="RFC8853"/> section 5.3.2.</t>
      </section>
      <section anchor="protocol-extensions">
        <name>Protocol extensions</name>
        <t>In order to support future extensions to be defined for the WHIP protocol, a common procedure for registering and announcing the new extensions is defined.</t>
        <t>Protocol extensions supported by the WHIP server <bcp14>MUST</bcp14> be advertised to the WHIP client in the "201 Created" response to the initial HTTP POST request sent to the WHIP endpoint. The WHIP endpoint <bcp14>MUST</bcp14> return one "Link" header field for each extension, with the extension "rel" type attribute and the URI for the HTTP resource that will be available for receiving requests related to that extension.</t>
        <t>Protocol extensions are optional for both WHIP clients and servers. WHIP clients <bcp14>MUST</bcp14> ignore any Link attribute with an unknown "rel" attribute value and WHIP servers <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:whip:ext" as defined in {urn-whip-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 side event resource for the published stream could be returned in the initial HTTP "201 Created" response with a "Link" header field and a "rel" attribute of "urn:ietf:params:whip:ext:example:server-sent-events". (This document does not specify such an extension, and uses it only as an example.)</t>
        <t>In this theoretical case, the HTTP 201 response to the HTTP POST request would look like:</t>
        <artwork><![CDATA[
HTTP/1.1 201 Created
Content-Type: application/sdp
Location: https://whip.example.com/resource/id
Link: <https://whip.ietf.org/publications/213786HF/sse>;
      rel="urn:ietf:params:whip:ext:example:server-side-events"
]]></artwork>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>HTTPS <bcp14>SHALL</bcp14> be used in order to preserve the WebRTC security model.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This specification adds a new link relation type and a registry for URN sub-namespaces for WHIP protocol extensions.</t>
      <section anchor="link-relation-type-ice-server">
        <name>Link Relation Type: ice-server</name>
        <t>The link relation type below has been registered by IANA per Section 4.2 of <xref target="RFC8288"/>.</t>
        <t>Relation Name:  ice-server</t>
        <t>Description:  For the WHIP protocol, conveys the STUN and TURN servers that can be used by an ICE Agent to establish a connection with a peer.</t>
        <t>Reference:  TBD</t>
      </section>
      <section anchor="registration-of-whip-urn-sub-namespace-and-whip-registry">
        <name>Registration of WHIP URN Sub-namespace and WHIP Registry</name>
        <t>IANA has added an entry to the "IETF URN Sub-namespace for Registered Protocol Parameter Identifiers" registry and created a sub-namespace for the Registered Parameter Identifier as per <xref target="RFC3553"/>: "urn:ietf:params:whip".</t>
        <t>To manage this sub-namespace, IANA has created the "System for Cross-domain Identity Management (WHIP) Schema URIs" registry, which is used to manage entries within the "urn:ietf:params:whip" namespace.  The registry description is as follows:</t>
        <ul spacing="normal">
          <li>Registry name: WHIP</li>
          <li>Specification: this document (RFC TBD)</li>
          <li>Repository: See Section <xref target="urn-whip-subspace"/></li>
          <li>Index value: See Section <xref target="urn-whip-subspace"/></li>
        </ul>
      </section>
      <section anchor="urn-whip-subspace">
        <name>URN Sub-namespace for WHIP</name>
        <t>WHIP Endpoint utilize URIs to identify the supported WHIP protocol extensions on the "rel" attribute of the Link header as defined in <xref target="protocol-extensions"/>.
This section creates and registers an IETF URN Sub-namespace for use in the WHIP specifications and future extensions.</t>
        <section anchor="specification-template">
          <name>Specification Template</name>
          <t>Namespace ID:</t>
          <artwork><![CDATA[
  The Namespace ID "whip" has been assigned.
]]></artwork>
          <t>Registration Information:</t>
          <artwork><![CDATA[
  Version: 1

  Date: TBD
]]></artwork>
          <t>Declared registrant of the namespace:</t>
          <artwork><![CDATA[
  The Internet Engineering Task Force.
]]></artwork>
          <t>Designated contact:</t>
          <artwork><![CDATA[
   A designated expert will monitor the WHIP public mailing list, "wish@ietf.org".
]]></artwork>
          <t>Declaration of Syntactic Structure:</t>
          <artwork><![CDATA[
  The Namespace Specific String (NSS) of all URNs that use the "whip" Namespace ID shall have the following structure: urn:ietf:params:whip:{type}:{name}:{other}

  The keywords have the following meaning:

  - type: The entity type. This specification only defines the "ext" type.

  - name: A required US-ASCII string that conforms to the URN syntax requirements (see {{RFC8141}}) and defines a major namespace of a WHIP protocol extension. The value MAY also be an industry name or organization name.

  - other: Any US-ASCII string that conforms to the URN syntax requirements (see {{RFC8141}}) and defines the sub-namespace (which MAY be further broken down in namespaces delimited by colons) as needed to uniquely identify an WHIP protocol extension.
]]></artwork>
          <t>Relevant Ancillary Documentation:</t>
          <artwork><![CDATA[
  None
]]></artwork>
          <t>Identifier Uniqueness Considerations:</t>
          <artwork><![CDATA[
  The designated contact shall be responsible for reviewing and enforcing uniqueness.
]]></artwork>
          <t>Identifier Persistence Considerations:</t>
          <artwork><![CDATA[
  Once a name has been allocated, it MUST NOT be reallocated for a different purpose.
  The rules provided for assignments of values within a sub-namespace MUST be constructed so that the meanings of values cannot change.
  This registration mechanism is not appropriate for naming values whose meanings may change over time.
]]></artwork>
          <t>Process of Identifier Assignment:</t>
          <artwork><![CDATA[
  Namespace with type "ext" (e.g., "urn:ietf:params:whip:ext") is reserved for IETF-approved WHIP specifications.
]]></artwork>
          <t>Process of Identifier Resolution:</t>
          <artwork><![CDATA[
  None specified.
]]></artwork>
          <t>Rules for Lexical Equivalence:</t>
          <artwork><![CDATA[
  No special considerations; the rules for lexical equivalence specified in {{RFC8141}} apply.
]]></artwork>
          <t>Conformance with URN Syntax:</t>
          <artwork><![CDATA[
  No special considerations.
]]></artwork>
          <t>Validation Mechanism:</t>
          <artwork><![CDATA[
  None specified.
]]></artwork>
          <t>Scope:</t>
          <artwork><![CDATA[
  Global.
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC8829" target="https://www.rfc-editor.org/info/rfc8829">
          <front>
            <title>JavaScript Session Establishment Protocol (JSEP)</title>
            <author fullname="J. Uberti" initials="J." surname="Uberti">
              <organization/>
            </author>
            <author fullname="C. Jennings" initials="C." surname="Jennings">
              <organization/>
            </author>
            <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla">
              <organization/>
            </author>
            <date month="January" year="2021"/>
            <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>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8829"/>
          <seriesInfo name="DOI" value="10.17487/RFC8829"/>
        </reference>
        <reference anchor="RFC3264" target="https://www.rfc-editor.org/info/rfc3264">
          <front>
            <title>An Offer/Answer Model with Session Description Protocol (SDP)</title>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg">
              <organization/>
            </author>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne">
              <organization/>
            </author>
            <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="RFC8853" target="https://www.rfc-editor.org/info/rfc8853">
          <front>
            <title>Using Simulcast in Session Description Protocol (SDP) and RTP Sessions</title>
            <author fullname="B. Burman" initials="B." surname="Burman">
              <organization/>
            </author>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund">
              <organization/>
            </author>
            <author fullname="S. Nandakumar" initials="S." surname="Nandakumar">
              <organization/>
            </author>
            <author fullname="M. Zanaty" initials="M." surname="Zanaty">
              <organization/>
            </author>
            <date month="January" year="2021"/>
            <abstract>
              <t>In some application scenarios, it may be desirable to send multiple differently encoded versions of the same media source in different RTP streams. This is called simulcast. This document describes how to accomplish simulcast in RTP and how to signal it in the Session Description Protocol (SDP).  The described solution uses an RTP/RTCP identification method to identify RTP streams belonging to the same media source and makes an extension to SDP to indicate that those RTP streams are different simulcast formats of that media source. The SDP extension consists of a new media-level SDP attribute that expresses capability to send and/or receive simulcast RTP streams.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8853"/>
          <seriesInfo name="DOI" value="10.17487/RFC8853"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <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="RFC7675" target="https://www.rfc-editor.org/info/rfc7675">
          <front>
            <title>Session Traversal Utilities for NAT (STUN) Usage for Consent Freshness</title>
            <author fullname="M. Perumal" initials="M." surname="Perumal">
              <organization/>
            </author>
            <author fullname="D. Wing" initials="D." surname="Wing">
              <organization/>
            </author>
            <author fullname="R. Ravindranath" initials="R." surname="Ravindranath">
              <organization/>
            </author>
            <author fullname="T. Reddy" initials="T." surname="Reddy">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." surname="Thomson">
              <organization/>
            </author>
            <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="RFC8863" target="https://www.rfc-editor.org/info/rfc8863">
          <front>
            <title>Interactive Connectivity Establishment Patiently Awaiting Connectivity (ICE PAC)</title>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg">
              <organization/>
            </author>
            <author fullname="J. Uberti" initials="J." surname="Uberti">
              <organization/>
            </author>
            <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="RFC8840" target="https://www.rfc-editor.org/info/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">
              <organization/>
            </author>
            <author fullname="T. Stach" initials="T." surname="Stach">
              <organization/>
            </author>
            <author fullname="E. Marocco" initials="E." surname="Marocco">
              <organization/>
            </author>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg">
              <organization/>
            </author>
            <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="RFC9110" target="https://www.rfc-editor.org/info/rfc9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <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="RFC9143" target="https://www.rfc-editor.org/info/rfc9143">
          <front>
            <title>Negotiating Media Multiplexing Using the Session Description Protocol (SDP)</title>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg">
              <organization/>
            </author>
            <author fullname="H. Alvestrand" initials="H." surname="Alvestrand">
              <organization/>
            </author>
            <author fullname="C. Jennings" initials="C." surname="Jennings">
              <organization/>
            </author>
            <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="RFC8842" target="https://www.rfc-editor.org/info/rfc8842">
          <front>
            <title>Session Description Protocol (SDP) Offer/Answer Considerations for Datagram Transport Layer Security (DTLS) and Transport Layer Security (TLS)</title>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg">
              <organization/>
            </author>
            <author fullname="R. Shpount" initials="R." surname="Shpount">
              <organization/>
            </author>
            <date month="January" year="2021"/>
            <abstract>
              <t>This document defines the Session Description Protocol (SDP) offer/answer procedures for negotiating and establishing a Datagram Transport Layer Security (DTLS) association.  The document also defines the criteria for when a new DTLS association must be established.  The document updates RFCs 5763 and 7345 by replacing common SDP offer/answer procedures with a reference to this specification. </t>
              <t>This document defines a new SDP media-level attribute, "tls-id". </t>
              <t>This document also defines how the "tls-id" attribute can be used for negotiating and establishing a Transport Layer Security (TLS) connection, in conjunction with the procedures in RFCs 4145 and 8122.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8842"/>
          <seriesInfo name="DOI" value="10.17487/RFC8842"/>
        </reference>
        <reference anchor="RFC8288" target="https://www.rfc-editor.org/info/rfc8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <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="RFC7064" target="https://www.rfc-editor.org/info/rfc7064">
          <front>
            <title>URI Scheme for the Session Traversal Utilities for NAT (STUN) Protocol</title>
            <author fullname="S. Nandakumar" initials="S." surname="Nandakumar">
              <organization/>
            </author>
            <author fullname="G. Salgueiro" initials="G." surname="Salgueiro">
              <organization/>
            </author>
            <author fullname="P. Jones" initials="P." surname="Jones">
              <organization/>
            </author>
            <author fullname="M. Petit-Huguenin" initials="M." surname="Petit-Huguenin">
              <organization/>
            </author>
            <date month="November" year="2013"/>
            <abstract>
              <t>This document specifies the syntax and semantics of the Uniform Resource Identifier (URI) scheme for the Session Traversal Utilities for NAT (STUN) protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7064"/>
          <seriesInfo name="DOI" value="10.17487/RFC7064"/>
        </reference>
        <reference anchor="RFC7065" target="https://www.rfc-editor.org/info/rfc7065">
          <front>
            <title>Traversal Using Relays around NAT (TURN) Uniform Resource Identifiers</title>
            <author fullname="M. Petit-Huguenin" initials="M." surname="Petit-Huguenin">
              <organization/>
            </author>
            <author fullname="S. Nandakumar" initials="S." surname="Nandakumar">
              <organization/>
            </author>
            <author fullname="G. Salgueiro" initials="G." surname="Salgueiro">
              <organization/>
            </author>
            <author fullname="P. Jones" initials="P." surname="Jones">
              <organization/>
            </author>
            <date month="November" year="2013"/>
            <abstract>
              <t>This document specifies the syntax of Uniform Resource Identifier (URI) schemes for the Traversal Using Relays around NAT (TURN) protocol.  It defines two URI schemes to provision the TURN Resolution Mechanism (RFC 5928).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7065"/>
          <seriesInfo name="DOI" value="10.17487/RFC7065"/>
        </reference>
        <reference anchor="RFC8489" target="https://www.rfc-editor.org/info/rfc8489">
          <front>
            <title>Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="M. Petit-Huguenin" initials="M." surname="Petit-Huguenin">
              <organization/>
            </author>
            <author fullname="G. Salgueiro" initials="G." surname="Salgueiro">
              <organization/>
            </author>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg">
              <organization/>
            </author>
            <author fullname="D. Wing" initials="D." surname="Wing">
              <organization/>
            </author>
            <author fullname="R. Mahy" initials="R." surname="Mahy">
              <organization/>
            </author>
            <author fullname="P. Matthews" initials="P." surname="Matthews">
              <organization/>
            </author>
            <date month="February" year="2020"/>
            <abstract>
              <t>Session Traversal Utilities for NAT (STUN) is a protocol that serves as a tool for other protocols in dealing with NAT traversal.  It can be used by an endpoint to determine the IP address and port allocated to it by a NAT.  It can also be used to check connectivity between two endpoints and as a keep-alive protocol to maintain NAT bindings. STUN works with many existing NATs and does not require any special behavior from them.</t>
              <t>STUN is not a NAT traversal solution by itself.  Rather, it is a tool to be used in the context of a NAT traversal solution.</t>
              <t>This document obsoletes RFC 5389.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8489"/>
          <seriesInfo name="DOI" value="10.17487/RFC8489"/>
        </reference>
        <reference anchor="RFC6750" target="https://www.rfc-editor.org/info/rfc6750">
          <front>
            <title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
            <author fullname="M. Jones" initials="M." surname="Jones">
              <organization/>
            </author>
            <author fullname="D. Hardt" initials="D." surname="Hardt">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc8725">
          <front>
            <title>JSON Web Token Best Current Practices</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer">
              <organization/>
            </author>
            <author fullname="D. Hardt" initials="D." surname="Hardt">
              <organization/>
            </author>
            <author fullname="M. Jones" initials="M." surname="Jones">
              <organization/>
            </author>
            <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="RFC3553" target="https://www.rfc-editor.org/info/rfc3553">
          <front>
            <title>An IETF URN Sub-namespace for Registered Protocol Parameters</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling">
              <organization/>
            </author>
            <author fullname="L. Masinter" initials="L." surname="Masinter">
              <organization/>
            </author>
            <author fullname="T. Hardie" initials="T." surname="Hardie">
              <organization/>
            </author>
            <author fullname="G. Klyne" initials="G." surname="Klyne">
              <organization/>
            </author>
            <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>
        <name>Informative References</name>
        <reference anchor="RFC3261" target="https://www.rfc-editor.org/info/rfc3261">
          <front>
            <title>SIP: Session Initiation Protocol</title>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg">
              <organization/>
            </author>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne">
              <organization/>
            </author>
            <author fullname="G. Camarillo" initials="G." surname="Camarillo">
              <organization/>
            </author>
            <author fullname="A. Johnston" initials="A." surname="Johnston">
              <organization/>
            </author>
            <author fullname="J. Peterson" initials="J." surname="Peterson">
              <organization/>
            </author>
            <author fullname="R. Sparks" initials="R." surname="Sparks">
              <organization/>
            </author>
            <author fullname="M. Handley" initials="M." surname="Handley">
              <organization/>
            </author>
            <author fullname="E. Schooler" initials="E." surname="Schooler">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc6120">
          <front>
            <title>Extensible Messaging and Presence Protocol (XMPP): Core</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc7826">
          <front>
            <title>Real-Time Streaming Protocol Version 2.0</title>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne">
              <organization/>
            </author>
            <author fullname="A. Rao" initials="A." surname="Rao">
              <organization/>
            </author>
            <author fullname="R. Lanphier" initials="R." surname="Lanphier">
              <organization/>
            </author>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund">
              <organization/>
            </author>
            <author fullname="M. Stiemerling" initials="M." role="editor" surname="Stiemerling">
              <organization/>
            </author>
            <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-rtcweb-gateways" target="https://www.ietf.org/archive/id/draft-ietf-rtcweb-gateways-02.txt">
          <front>
            <title>WebRTC Gateways</title>
            <author fullname="Harald Alvestrand">
	 </author>
            <author fullname="Uwe Rauschenbach">
	 </author>
            <date day="21" month="January" year="2016"/>
            <abstract>
              <t>   This document describes interoperability considerations for a class
   of WebRTC-compatible endpoints called "WebRTC gateways", which
   interconnect between WebRTC endpoints and devices that are not WebRTC
   endpoints.


              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rtcweb-gateways-02"/>
        </reference>
        <reference anchor="W3C.REC-webrtc-20210126" target="https://www.w3.org/TR/2021/REC-webrtc-20210126/">
          <front>
            <title>WebRTC 1.0: Real-Time Communication Between Browsers</title>
            <author fullname="Cullen Jennings" role="editor"/>
            <author fullname="Henrik Boström" role="editor"/>
            <author fullname="Jan-Ivar Bruaroey" role="editor"/>
            <date day="26" month="January" year="2021"/>
          </front>
          <seriesInfo name="W3C" value="REC-webrtc-20210126"/>
          <seriesInfo name="W3C REC" value="REC-webrtc-20210126"/>
        </reference>
        <reference anchor="RFC8141" target="https://www.rfc-editor.org/info/rfc8141">
          <front>
            <title>Uniform Resource Names (URNs)</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre">
              <organization/>
            </author>
            <author fullname="J. Klensin" initials="J." surname="Klensin">
              <organization/>
            </author>
            <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>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
rf8EisihWiCCAAA=

-->

</rfc>
