<?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-murillo-whip-01" category="info">

  <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="2021" month="May" day="19"/>

    
    
    <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 in a streaming service, and content providers still rely heavily on protocols like RTMP for it.</t>

<t>These protocols are much older than webrtc and lack by default some important security and resilience features provided by webrtc with minimal delay.</t>

<t>The media codecs used in older protocols do not always match those being used in WebRTC, mandating transcoding on the ingest node, introducing delay and degrading media quality. This transcoding step is always present in traditional streaming to support e.g. ABR, and comes at no cost. However webrtc implements 
client-side ABR, also called Network-Aware Encoding by e.g. Huavision, by means of simulcast and SVC codecs, which otherwise alleviate the need for server-side transcoding. Content protection and Privacy Enhancement can be achieved with End-to-End Encryption, which preclude any server-side media processing.</t>

<t>This document proposes a simple HTTP based protocol that will allow WebRTC endpoints to ingest content into streaming services and/or CDNs to fill this gap and facilitate deployment.</t>



    </abstract>


  </front>

  <middle>


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

<t>WebRTC intentionally does not specify a signaling transport protocol at application level, while RTCWEB standardized the signalling protocol itself (JSEP, SDP O/A) and everything that was going over the wire (media, codec, encryption, …). This flexibility has allowed for implementing 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 would make it very simple to plug in (SDI) cables carrying raw media, encoding it in place, and pushing it to any streaming service or CDN ingest is ubiquitous. Having to implement a custom signalling transport protocol for each different webrtc services has hindered adoption.</t>

<t>While some standard signalling 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 maybe the closest in terms of features to webrtc, is not compatible with WebRTC SDP offer/answer model.</t>

<t>In the specific case of ingest into a platform, some assumption 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 ingest method which is:
- Easy to implement,
- As easy to use as current RTMP URIs.
- Fully compliant with Webrtc and RTCWEB specs.
- Allow for both ingest in traditional media platforms for extension and ingest in webrtc end-to-end platform for lowest possible latency.
- Lowers the requirements on both hardware encoders and broadcasting services to support webrtc.
- Usable both in web browsers and in native encoders.</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 client on the WHIP protocol and encodes and delivers the media to a remote media server.</t>
  <t>WHIP endpoint: Ingest server receiving the initial WHIP request.</t>
  <t>Media Server: WebRTC media server 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 request for altering the session (ICE operations or termination, for example).</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 and the broadcasting ingestion endpoint.</t>

<t>Once the ICE/DTLS session is set up, the media will flow unidirectionally from the encoder/media producer to the broadcasting ingestion endpoint. In order to reduce complexity, no SDP renegotiation is supported, so no tracks or streams can be added or removed once the initial SDP O/A 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 body. The WHIP endpoint will generate an SDP answer and return it on a 201 Accepted response with content type of application/sdp and the SDP answer as body and a Location header pointing to the newly created resource.</t>

<t>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 on 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>The media server may terminate the session by using the Immediate Revocation of Consent as defined in <xref target="RFC7675"/> section 5.2.</t>

<section anchor="ice-and-nat-support" title="ICE and NAT support">

<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.  So in order to support the WHIP client behind NAT, the WHIP media server SHOULD be publicly accessible.</t>

<t>The initial offer by the WHIP client MAY be sent after the full ICE gathering is complete containing the full list of ICE candidates, or only contain local candidates or even an empty list of candidates.</t>

<t>The WHIP endpoint SDP answer SHALL contain the full list of ICE candidates publicly accessible 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 either trickle ICE (i.e. ICE lite media servers) or ICE restart, and it MUST return a 405 Method Not Allowed for any HTTP PATCH request.</t>

<t>A WHIP client receiving a 405 response for an HTTP PATCH request SHALL not send further request for ICE trickle or restart. If the WHIP client gathers additional candidates (via STUN/TURN) after the SDP offer is sent, it MUST send STUN request to the ICE candidates received from the media server as per <xref target="RFC8838"/> regardless if the HTTP PATCH is supported by either the WHIP client or the WHIP resource.</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 307 Temporary Redirect response code.</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="authentication-and-authorization" title="Authentication and authorization">

<t>Authentication and authorization is supported by the Authorization HTTP header with a bearer token as per <xref target="RFC6750"/>.</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 media servers and WHIP clients.</t>

</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">

</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="RFC8838" target='https://www.rfc-editor.org/info/rfc8838'>
<front>
<title>Trickle ICE: Incremental Provisioning of Candidates for the Interactive Connectivity Establishment (ICE) Protocol</title>
<author initials='E.' surname='Ivov' fullname='E. Ivov'><organization /></author>
<author initials='J.' surname='Uberti' fullname='J. Uberti'><organization /></author>
<author initials='P.' surname='Saint-Andre' fullname='P. Saint-Andre'><organization /></author>
<date year='2021' month='January' />
<abstract><t>This document describes &quot;Trickle ICE&quot;, an extension to the Interactive Connectivity Establishment (ICE) protocol that enables ICE agents to begin connectivity checks while they are still gathering candidates, by incrementally exchanging candidates over time instead of all at once. This method can considerably accelerate the process of establishing a communication session.</t></abstract>
</front>
<seriesInfo name='RFC' value='8838'/>
<seriesInfo name='DOI' value='10.17487/RFC8838'/>
</reference>



<reference  anchor="RFC8840" 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="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="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="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="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>




    </references>





  </back>

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

-->

</rfc>

