<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.3.24 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-wish-whip-02" category="std">

  <front>
    <title abbrev="whip">WebRTC-HTTP ingestion protocol (WHIP)</title>

    <author initials="S." surname="Murillo" fullname="Sergio Garcia Murillo">
      <organization>CoSMo Software</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="March" day="07"/>

    <area>ART</area>
    <workgroup>wish</workgroup>
    <keyword>WebRTC</keyword>

    <abstract>


<t>While WebRTC has been very successful in a wide range of scenarios, its adoption in the broadcasting/streaming industry is lagging behind.
Currently there is no standard protocol (like SIP or RTSP) designed for ingesting media into a streaming service using WebRTC and so content providers still rely heavily on protocols like RTMP for it.</t>

<t>These protocols are much older than WebRTC and by default lack some important security and resilience features provided by WebRTC with minimal overhead and additional latency.</t>

<t>The media codecs used for ingestion in older protocols tend to be limited and not negotiated. WebRTC includes support for negotiation of codecs, potentially alleviating transcoding on the ingest node (which can introduce delay and degrade media quality). Server side transcoding that has traditionally been done to present multiple renditions in Adaptive Bit Rate Streaming (ABR) implementations can be replaced with simulcasting 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>Encryption is mandatory in WebRTC, therefore secure transport of media is implicit.</t>

<t>This document proposes a simple HTTP based protocol that will allow WebRTC based ingest of content into streaming services and/or CDNs.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>RTCWEB standardized JSEP (<xref target="RFC8829"/>), a mechanism used to control the setup, management, and teardown of a multimedia session, how to apply it using the SDP Offer/Answer model and all the formats for the data sent over the wire (media, codec, encryption, …). Also, 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 usage of hardware encoders that make it very simple to plug in (SDI) cables carrying raw media, encode it in place, and push it to any streaming service or CDN ingest is already ubiquitous. It is 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 or XMPP, they are not designed to be used in broadcasting/streaming services, and there also is no sign of adoption in that industry. RTSP, which is based on RTP and may be the closest in terms of features to WebRTC, is not compatible with the WebRTC SDP offer/answer model.</t>

<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-alvestrand-rtcweb-gateways"/>.</t>

<t>This document proposes a simple protocol for supporting WebRTC as media ingestion method which is:</t>

<t><list style="symbols">
  <t>Easy to implement,</t>
  <t>As easy to use as current RTMP URIs.</t>
  <t>Fully compliant with WebRTC and RTCWEB specs.</t>
  <t>Allows for both ingest in traditional media platforms and ingest in WebRTC end-to-end platforms with the lowest possible latency.</t>
  <t>Lowers the requirements on both hardware encoders and broadcasting services to support WebRTC.</t>
  <t>Usable both in web browsers and in native encoders.</t>
</list></t>

</section>
<section anchor="terminology" title="Terminology">

<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in <xref target="RFC2119"/>.</t>

<t><list style="symbols">
  <t>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.</t>
  <t>WHIP endpoint: Ingest server receiving the initial WHIP request.</t>
  <t>WHIP endpoint URL: URL of the WHIP endpoint that will create the WHIP resource.</t>
  <t>Media Server: WebRTC media server or consumer that establishes the media session with the WHIP client and receives the media produced by it.</t>
  <t>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).</t>
  <t>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.</t>
</list></t>

</section>
<section anchor="overview" title="Overview">

<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 title="WHIP session setup and teardown"><artwork><![CDATA[
                                                                                 
 +-----------------+         +---------------+ +--------------+ +----------------+
 | WebRTC Producer |         | 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" title="Protocol Operation">

<t>In order to setup an ingestion session, the WHIP client will generate an SDP offer according to the JSEP rules and do an HTTP POST request to the WHIP endpoint configured 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 and the SDP answer as the body and a Location header pointing to the newly created resource.</t>

<t>The SDP offer SHOULD use the sendonly attribute and the SDP answer MUST use the recvonly attribute.</t>

<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 the session, the WHIP client MUST perform an HTTP DELETE request to the resource URL returned in the Location header 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 MUST follow the procedures in <xref target="RFC7675"/> section 5.2 for immediate revocation of consent.</t>

<t>The WHIP endpoints MUST 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 MUST 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" title="ICE and NAT support">

<t>The initial offer by the WHIP client MAY be sent after the full ICE gathering is complete with the full list of ICE candidates, or 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 SHALL gather all the ICE candidates for the media server before responding to the client request and the SDP answer SHALL contain the full list of ICE candidates of the media server. The media server MAY use ICE lite, while the WHIP client MUST implement full ICE.</t>

<t>The WHIP client MAY perform trickle ICE or an ICE restarts <xref target="RFC8863"/> by sending a 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"/> with the new ICE candidate or ICE ufrag/pwd for ICE restarts. A WHIP resource MAY not support trickle ICE (i.e. ICE lite media servers) or ICE restart, in that case, it MUST return a 405 Method Not Allowed response for any HTTP PATCH request.</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 MUST generate a
unique strong entity-tag identifying the ICE session as per <xref target="RFC7232"/> section 2.3. The initial value of the entity-tag identifying  the initial ICE session MUST be returned in an ETag header in the 201 response to the initial POST request to the WHIP endpoint and in the 200 OK of a PATCH request that triggers an ICE restart.</t>

<figure><artwork><![CDATA[
POST /whip/endpoint HTTP/1.1
Host: whip.example.com
Content-Type: application/sdp

<SDP Offer>

HTTP/1.1 201 Created
ETag: "38sdf4fdsf54:EsAw"
Content-Type: application/sdp
Location: https://whip.example.org/resource/id

<SDP answer>
]]></artwork></figure>

<t>A WHIP client sending a PATCH request for performing trickle ICE MUST contain an If-Match header with the latest known entity-tag as per <xref target="RFC7232"/> section 3.1. When the PATCH request is received by the WHIP resource, it MUST compare the entity-tag value requested with the current entinty-tag of the resource as per <xref target="RFC7232"/> section 3.1 and return a 412 Precondition Failed response if they do not match. Entity-tag validation MUST only be used for HTTP requests requiring to match a known ICE session  and SHOULD NOT be used otherwise, for example in the HTTP DELETE request to terminate the session.</t>

<t>A WHIP resource receiving a PATCH request with new ICE candidates, but which does not perform an ICE restart, MUST 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 MUST accept the HTTP request with the 204 response and silently discard the candidate.</t>

<figure title="Trickle ICE request"><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 MUST contain an If-Match header with a field-value “*” as per <xref target="RFC7232"/> section 3.1.</t>

<t>If the HTTP PATCH request results in an ICE restart, the WHIP resource SHALL return a 200 OK with an “application/trickle-ice-sdpfrag” body containing the new ICE username fragment and password and, optionally, 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.</t>

<t>If the ICE request can not be performed by the WHIP resource it MUST return an appropriate  HTTP error code but MUST NOT terminate the session immediately. The WHIP client COULD try again to perform a new ICE restart or terminate the session issuing a HTTP DELETE request instead. In any case the session MUST be terminated if the ICE consent expires as a consequence of the failed ICE restart.</t>

<figure title="ICE restart request"><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>Given that in order to send new ICE candidates to the WHIP resource, the WHIP client needs to know the entity-tag associated to the ICE session, it MUST buffer any gathered candidates before the HTTP response to the initial PUT request or the PATCH request with the new entity-tag value is received. Once the entity-tag value is known the WHIP client SHOULD send a single aggregated HTTP PATCH request with all the ICE candidates it has buffered so far.</t>

</section>
<section anchor="webrtc-constraints" title="WebRTC constraints">

<t>In order to reduce the complexity of implementing WHIP in both clients and media servers, some restrictions regarding WebRTC usage are made.</t>

<t>SDP bundle SHALL be used by both the WHIP client and the media server. The SDP offer created by the WHIP client MUST include the bundle-only attribute in all m-lines as per <xref target="RFC8843"/>. Also, RTCP muxing SHALL be supported by both the WHIP client and the media server.</t>

<t>Unlike <xref target="RFC5763"/> a WHIP client MAY use a setup attribute value of setup:active in the SDP offer, in which case the WHIP endpoint MUST use a setup attribute value of setup:passive in the SDP answer.</t>

</section>
<section anchor="load-balancing-and-redirections" title="Load balancing and redirections">

<t>WHIP endpoints and media servers MAY not be colocated on the same server so it is possible to load balance incoming requests to different media servers. WHIP clients SHALL support HTTP redirection via the 307 Temporary Redirect response code in the initial HTTP response to the WHIP endpoint URL. The WHIP resource URL MUST be a final one, and redirections are not required to be supported for the PATCH and DELETE request sent to it.</t>

<t>In case of high load, the WHIP endpoints MAY 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.</t>

<t>The WHIP endpoint MAY send a Retry-After header field indicating the minimum time that the user agent is asked to wait before issuing the redirected request.</t>

</section>
<section anchor="stunturn-server-configuration" title="STUN/TURN server configuration">

<t>The WHIP endpoint MAY return ICE 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 ICE server will be returned on a Link header with a “rel” attribute value of “ice-server” where the Link target URI is the ICE server URL and the credentials are encoded in the Link target attributes as follows:</t>

<t><list style="symbols">
  <t>username: If the Link header represents a TURN server, and credential-type is “password”, then this attribute specifies the username to use with that TURN server.</t>
  <t>credential: If 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.</t>
  <t>credential-type:  If the Link header 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”.</t>
</list></t>

<figure title="Example ICE server configuration"><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>There are some webrtc implementations that do not support updating the ICE server configuration after the local offer has been created. In order to support these clients, the WHIP endpoint MAY also include the ICE server configuration on the responses to an authenticated OPTIONS request sent to the WHIP endpoint URL sent before the POST requests.</t>

<t>It COULD 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" title="Authentication and authorization">

<t>WHIP endpoints and resources MAY require the HTTP request to be authenticated using an HTTP Authorization header with a Bearer token as specified in <xref target="RFC6750"/> section 2.1. WHIP clients MUST implement this authentication and authorization mechanism and send the HTTP Authorization header 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.</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 must not be sent in any request.</t>

</section>
<section anchor="simulcast-and-scalable-video-coding" title="Simulcast and scalable video coding">

<t>Both simulcast and scalable video coding (including K-SVC modes) MAY 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 MUST negotiate the support in the SDP offer according to the procedures in <xref target="RFC8853"/> section 5.3. A server accepting a simulcast offer MUST create an answer according to the procedures <xref target="RFC8853"/> section 5.3.2.</t>

</section>
<section anchor="protocol-extensions" title="Protocol extensions">

<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 MUST be advertised to the WHIP client on the 201 Created response to the initial HTTP POST request sent to the WHIP endpoint. The WHIP endpoint MUST return one Link header 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 MUST ignore any Link attribute with an unknown “rel” attribute value and WHIP servers MUST NOT require the usage of any of the extensions.</t>

<t>Each protocol extension MUST register a unique “rel” attribute values at IANA starting with the prefix: “urn:ietf:params:whip:”.</t>

<t>For example, taking 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 will be returned in the initial HTTP “201 Created” response with a “Link” header and a “rel” attribute of “urn:ietf:params:whip:server-sent-events”.</t>

<t>The HTTP 201 response to the HTTP POST request would look like:</t>

<figure><artwork><![CDATA[
HTTP/1.1 201 Created
Content-Type: application/sdp
Location: https://whip.example.org/resource/id
Link: <https://whip.ietf.org/publications/213786HF/sse>;rel="urn:ietf:params:whip:server-side-events"
]]></artwork></figure>

</section>
</section>
<section anchor="security-considerations" title="Security Considerations">

<t>HTTPS SHALL be used in order to preserve the WebRTC security model.</t>

</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>The link relation types below have been registered by IANA per Section 4.2 of <xref target="RFC8288"/>.</t>

<section anchor="link-relation-type-ice-server" title="Link Relation Type: ice-server">

<t>Relation Name:  ice-server</t>

<t>Description:  Describe the STUN and TURN servers that can be used by the ICE Agent to establish a connection with a peer.</t>

<t>Reference:  TBD</t>

</section>
</section>
<section anchor="acknowledgements" title="Acknowledgements">

</section>


  </middle>

  <back>

    <references title='Normative References'>





<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 initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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="RFC7675" target='https://www.rfc-editor.org/info/rfc7675'>
<front>
<title>Session Traversal Utilities for NAT (STUN) Usage for Consent Freshness</title>
<author initials='M.' surname='Perumal' fullname='M. Perumal'><organization /></author>
<author initials='D.' surname='Wing' fullname='D. Wing'><organization /></author>
<author initials='R.' surname='Ravindranath' fullname='R. Ravindranath'><organization /></author>
<author initials='T.' surname='Reddy' fullname='T. Reddy'><organization /></author>
<author initials='M.' surname='Thomson' fullname='M. Thomson'><organization /></author>
<date year='2015' month='October' />
<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="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 initials='E.' surname='Ivov' fullname='E. Ivov'><organization /></author>
<author initials='T.' surname='Stach' fullname='T. Stach'><organization /></author>
<author initials='E.' surname='Marocco' fullname='E. Marocco'><organization /></author>
<author initials='C.' surname='Holmberg' fullname='C. Holmberg'><organization /></author>
<date year='2021' month='January' />
<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) &quot;end-of-candidates&quot; attribute and a new SIP option tag &quot;trickle-ice&quot; are defined.</t></abstract>
</front>
<seriesInfo name='RFC' value='8840'/>
<seriesInfo name='DOI' value='10.17487/RFC8840'/>
</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 initials='B.' surname='Burman' fullname='B. Burman'><organization /></author>
<author initials='M.' surname='Westerlund' fullname='M. Westerlund'><organization /></author>
<author initials='S.' surname='Nandakumar' fullname='S. Nandakumar'><organization /></author>
<author initials='M.' surname='Zanaty' fullname='M. Zanaty'><organization /></author>
<date year='2021' month='January' />
<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="RFC8863" target='https://www.rfc-editor.org/info/rfc8863'>
<front>
<title>Interactive Connectivity Establishment Patiently Awaiting Connectivity (ICE PAC)</title>
<author initials='C.' surname='Holmberg' fullname='C. Holmberg'><organization /></author>
<author initials='J.' surname='Uberti' fullname='J. Uberti'><organization /></author>
<date year='2021' month='January' />
<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="RFC8829" target='https://www.rfc-editor.org/info/rfc8829'>
<front>
<title>JavaScript Session Establishment Protocol (JSEP)</title>
<author initials='J.' surname='Uberti' fullname='J. Uberti'><organization /></author>
<author initials='C.' surname='Jennings' fullname='C. Jennings'><organization /></author>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla' role='editor'><organization /></author>
<date year='2021' month='January' />
<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="I-D.draft-alvestrand-rtcweb-gateways">
   <front>
      <title>WebRTC Gateways</title>
      <author fullname="Harald Alvestrand">
	 </author>
      <author fullname="Uwe Rauschenbach">
	 </author>
      <date month="March" day="9" year="2015" />
      <abstract>
	 <t>   This document specifies conformance requirements for a class of
   WebRTC-compatible endpoints called &quot;WebRTC gateways&quot;, which
   interconnect between WebRTC endpoints and devices that are not WebRTC
   endpoints.


	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-alvestrand-rtcweb-gateways-02" />
   <format type="TXT" target="https://www.ietf.org/archive/id/draft-alvestrand-rtcweb-gateways-02.txt" />
</reference>



<reference  anchor="RFC7232" target='https://www.rfc-editor.org/info/rfc7232'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</title>
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless application- level protocol for distributed, collaborative, hypertext information systems.  This document defines HTTP/1.1 conditional requests, including metadata header fields for indicating state changes, request header fields for making preconditions on such state, and rules for constructing the responses to a conditional request when one or more preconditions evaluate to false.</t></abstract>
</front>
<seriesInfo name='RFC' value='7232'/>
<seriesInfo name='DOI' value='10.17487/RFC7232'/>
</reference>



<reference  anchor="RFC8843" target='https://www.rfc-editor.org/info/rfc8843'>
<front>
<title>Negotiating Media Multiplexing Using the Session Description Protocol (SDP)</title>
<author initials='C.' surname='Holmberg' fullname='C. Holmberg'><organization /></author>
<author initials='H.' surname='Alvestrand' fullname='H. Alvestrand'><organization /></author>
<author initials='C.' surname='Jennings' fullname='C. Jennings'><organization /></author>
<date year='2021' month='January' />
<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 (&quot;m=&quot; sections). Such transport is referred to as a BUNDLE transport, and the media is referred to as bundled media. The &quot;m=&quot; 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></abstract>
</front>
<seriesInfo name='RFC' value='8843'/>
<seriesInfo name='DOI' value='10.17487/RFC8843'/>
</reference>



<reference  anchor="RFC5763" target='https://www.rfc-editor.org/info/rfc5763'>
<front>
<title>Framework for Establishing a Secure Real-time Transport Protocol (SRTP) Security Context Using Datagram Transport Layer Security (DTLS)</title>
<author initials='J.' surname='Fischl' fullname='J. Fischl'><organization /></author>
<author initials='H.' surname='Tschofenig' fullname='H. Tschofenig'><organization /></author>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2010' month='May' />
<abstract><t>This document specifies how to use the Session Initiation Protocol (SIP) to establish a Secure Real-time Transport Protocol (SRTP) security context using the Datagram Transport Layer Security (DTLS) protocol.  It describes a mechanism of transporting a fingerprint attribute in the Session Description Protocol (SDP) that identifies the key that will be presented during the DTLS handshake.  The key exchange travels along the media path as opposed to the signaling path.  The SIP Identity mechanism can be used to protect the integrity of the fingerprint attribute from modification by intermediate proxies.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5763'/>
<seriesInfo name='DOI' value='10.17487/RFC5763'/>
</reference>



<reference  anchor="RFC8489" target='https://www.rfc-editor.org/info/rfc8489'>
<front>
<title>Session Traversal Utilities for NAT (STUN)</title>
<author initials='M.' surname='Petit-Huguenin' fullname='M. Petit-Huguenin'><organization /></author>
<author initials='G.' surname='Salgueiro' fullname='G. Salgueiro'><organization /></author>
<author initials='J.' surname='Rosenberg' fullname='J. Rosenberg'><organization /></author>
<author initials='D.' surname='Wing' fullname='D. Wing'><organization /></author>
<author initials='R.' surname='Mahy' fullname='R. Mahy'><organization /></author>
<author initials='P.' surname='Matthews' fullname='P. Matthews'><organization /></author>
<date year='2020' month='February' />
<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 initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<author initials='D.' surname='Hardt' fullname='D. Hardt'><organization /></author>
<date year='2012' month='October' />
<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 &quot;bearer&quot;) 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 initials='Y.' surname='Sheffer' fullname='Y. Sheffer'><organization /></author>
<author initials='D.' surname='Hardt' fullname='D. Hardt'><organization /></author>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<date year='2020' month='February' />
<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="RFC8288" target='https://www.rfc-editor.org/info/rfc8288'>
<front>
<title>Web Linking</title>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organization /></author>
<date year='2017' month='October' />
<abstract><t>This specification defines a model for the relationships between resources on the Web (&quot;links&quot;) and the type of those relationships (&quot;link relation types&quot;).</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>




    </references>





  </back>

<!-- ##markdown-source:
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

-->

</rfc>

