<?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.0.25 -->


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

<rfc ipr="trust200902" docName="draft-ruellan-httpbis-dash-http2-00" category="info">

  <front>
    <title>DASH and HTTP2</title>

    <author initials="H." surname="Ruellan" fullname="Herve Ruellan">
      <organization></organization>
      <address>
        <email>herve.ruellan@crf.canon.fr</email>
      </address>
    </author>

    <date year="2015"/>

    <area>General</area>
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document describes possibilities for DASH to take advantage of HTTP/2
features, in particular of server push.</t>



    </abstract>


  </front>

  <middle>


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

<t>MPEG Dynamic Adaptive Streaming over HTTP (DASH <xref target="DASH"/>) is an adaptive
bit-rate HTTP-based streaming solution standardized under MPEG. In DASH, a
media is split into segments. Each segment of the media is encoded with
different bit-rates to provide adaptation possibilities.</t>

<t>The client controls the streaming and the adaptation. To play the
media, the client requests the segments one after the other, when needing them.
For each segment, it can select the most appropriate bit-rate.</t>

<t>DASH defines a format for describing a media, the Media Presentation
Description (MPD). The MPD contains information about the media, in particular
the list of segments making up the media, and the different available
bit-rates. DASH also defines formats for the media segments themselves.</t>

<t>The Full-Duplex HTTP based Protocols (FDH) is a Core Experiment inside MPEG for
studying bi-directional communication protocols, such as HTTP/2
<xref target="I-D.ietf-httpbis-http2"/> and WebSocket <xref target="RFC6455"/>, in the context of DASH.
Inside this Core Experiments, the usage of the new features of HTTP/2 for DASH
is investigated. Among these features, server push is attracting much interest.</t>

</section>
<section anchor="using-push-with-dash" title="Using Push with DASH">

<section anchor="live-video-latency" title="Live Video Latency">

<t>When using DASH for streaming a live video, there are some trade-off to make
for choosing the duration of a segment. Shorter segments enable a lower
latency, which is of importance for live video. However shorter segments also
induce a larger number of requests, which can negatively impact the network
performances.</t>

<t>In <xref target="LowLatencyStreaming"/>, a solution to this problem is proposed: the live
video is split into short segments. However, for each segment requested by the
client, the server not only sends the corresponding segment, but also pushes
some of the following segments. This enables to use a low latency while still
keeping a low number of requests, therefore not incurring any negative impact
on the network.</t>

<t>To let the client keep the control of the streaming, the client selects the
number <spanx style="emph">k</spanx> of segments the server should push and transmit it to the server in
its request. This strategy of segment transmission is therefore called
<spanx style="emph">k-push</spanx>.</t>

</section>
<section anchor="fdh-proposal" title="FDH Proposal">

<t>The FDH Core Experiment has built upon this <spanx style="emph">k-push</spanx> strategy for taking
advantage of the push feature of HTTP/2, while letting the client control the
streaming.</t>

<t>This Core Experiment is defining a new HTTP header field, named
<spanx style="verb">DASH-PUSH</spanx>, that enables the client to indicate what it would like the
server to push.</t>

<t>The <spanx style="verb">DASH-PUSH</spanx> header field contains parameters defining the strategy
proposed by the client for indicating which segments it would like the server
to push. Currently two strategies are defined.</t>

<t><list style="symbols">
  <t>Pushing next <spanx style="emph">K</spanx> segments:  <vspace blankLines='1'/>
The <spanx style="emph">K</spanx> segments following the requested segment are pushed by the server.
For example, for having the server push the next 5 segments, the following
header field is used:  <vspace blankLines='1'/>
<spanx style="verb">DASH-PUSH: type=push-next; K=5</spanx></t>
  <t>Pushing for <spanx style="emph">T</spanx> seconds:  <vspace blankLines='1'/>
The segments corresponding to the given duration following the requested
segment are pushed by the server. For example for having the server push the
segments corresponding to the next 10 seconds of the media, the following
header field is used:  <vspace blankLines='1'/>
<spanx style="verb">DASH-PUSH: type=type=push-time; T=10</spanx></t>
</list></t>

</section>
<section anchor="other-proposals" title="Other Proposals">

<t>The <spanx style="verb">DASH-PUSH</spanx> header field can be extended for increasing its
expressiveness.</t>

<t><list style="symbols">
  <t>Using a list of URIs:  <vspace blankLines='1'/>
All the resources listed are pushed by the server. For example, for having
the server push the media segments <spanx style="verb">seg-1.mp4</spanx>, <spanx style="verb">seg-2.mp4</spanx>, and <spanx style="verb">seg-3.mp4</spanx>,
the following header field is used:  <vspace blankLines='1'/>
<spanx style="verb">DASH-PUSH: type=uri-list; seg-1.mp4; seg-2.mp4; seg-3.mp4</spanx></t>
  <t>Using a URI template:  <vspace blankLines='1'/>
Instead of listing all the URIs of the resources to push, a URI Template
<xref target="RFC6570"/> can be used. The URI Template can use numbered variables whose
values are defined as parameters of the <spanx style="verb">DASH-PUSH</spanx> header. These
variable can have a single value, a list of values, or a range of values. For
a variable with several values, the URI Template is expanded for each value
of the variable.  <vspace blankLines='1'/>
For example, for having the server push the same media segments as in the
previous example, using a URI Template with a variable defined as a list of
values, the following header field is used:  <vspace blankLines='1'/>
<spanx style="verb">DASH-PUSH: type=uri-template; seg-{1}.mp4; 1 : 2 : 3</spanx>  <vspace blankLines='1'/>
Note that the values in the list are separated with colons.  <vspace blankLines='1'/>
The same example can also use a range of values instead of a list, with the
following header field:  <vspace blankLines='1'/>
<spanx style="verb">DASH-PUSH: type=uri-template; seg-{1}.mp4; { 1 - 3 }</spanx>  <vspace blankLines='1'/>
Several variables can also be used inside the URI Template, in this case, the
URI Template is expanded for each combination of values for the defined
variables. For example, to have the server push several media segments,
numbered 1 to 3, each with two different representation levels, R1 and R2,
the following header field is used:  <vspace blankLines='1'/>
<spanx style="verb">DASH-PUSH: type=uri-template; seg-rep-{1}-{2}.mp4; R1 : R2; { 1 - 3 }</spanx></t>
  <t>Using a URI wildcard:  <vspace blankLines='1'/>
Instead of specifying a list of URIs, a wildcard can be used, allowing to
have the server push all the resources corresponding to a given media type.
For example, for having the server push all the <spanx style="verb">text/css</spanx> resources linked
to the requested resource, the following header field is used:  <vspace blankLines='1'/>
<spanx style="verb">DASH-PUSH: type=uri-wildcard; text/css</spanx></t>
  <t>Header field value:  <vspace blankLines='1'/>
The <spanx style="verb">DASH-PUSH</spanx> header field is not restricted to target only URIs, but
can also be used to target other header fields, in defining the resources the
client would like the server to push. For example, for having the server push
different ranges of the requested resource, the following header field is
used:  <vspace blankLines='1'/>
<spanx style="verb">DASH-PUSH: type=header; Range; 501-1000; 1001-1500</spanx>  <vspace blankLines='1'/>
This usage is similar to the list of URIs, but targeting specific header
fields. It could be extended to support templates.</t>
</list></t>

</section>
</section>


  </middle>

  <back>


    <references title='Informative References'>





<reference anchor='RFC6455'>

<front>
<title>The WebSocket Protocol</title>
<author initials='I.' surname='Fette' fullname='I. Fette'>
<organization /></author>
<author initials='A.' surname='Melnikov' fullname='A. Melnikov'>
<organization /></author>
<date year='2011' month='December' />
<abstract>
<t>The WebSocket Protocol enables two-way communication between a client running untrusted code in a controlled environment to a remote host that has opted-in to communications from that code.  The security model used for this is the origin-based security model commonly used by web browsers.  The protocol consists of an opening handshake followed by basic message framing, layered over TCP.  The goal of this technology is to provide a mechanism for browser-based applications that need two-way communication with servers that does not rely on opening multiple HTTP connections (e.g., using XMLHttpRequest or &amp;lt;iframe&amp;gt;s and long polling). [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='6455' />
<format type='TXT' octets='162067' target='http://www.rfc-editor.org/rfc/rfc6455.txt' />
</reference>



<reference anchor='RFC6570'>

<front>
<title>URI Template</title>
<author initials='J.' surname='Gregorio' fullname='J. Gregorio'>
<organization /></author>
<author initials='R.' surname='Fielding' fullname='R. Fielding'>
<organization /></author>
<author initials='M.' surname='Hadley' fullname='M. Hadley'>
<organization /></author>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'>
<organization /></author>
<author initials='D.' surname='Orchard' fullname='D. Orchard'>
<organization /></author>
<date year='2012' month='March' />
<abstract>
<t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion.  This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='6570' />
<format type='TXT' octets='79813' target='http://www.rfc-editor.org/rfc/rfc6570.txt' />
</reference>



<reference anchor='I-D.ietf-httpbis-http2'>
<front>
<title>Hypertext Transfer Protocol version 2</title>

<author initials='M' surname='Belshe' fullname='Mike Belshe'>
    <organization />
</author>

<author initials='R' surname='Peon' fullname='Roberto Peon'>
    <organization />
</author>

<author initials='M' surname='Thomson' fullname='Martin Thomson'>
    <organization />
</author>

<date month='February' day='10' year='2015' />

<abstract><t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP).  HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection.  It also introduces unsolicited push of representations from servers to clients.  This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-httpbis-http2-17' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-httpbis-http2-17.txt' />
</reference>


<reference anchor="DASH" >
  <front>
    <title>Dynamic adaptive streaming over HTTP (DASH)</title>
    <author >
      <organization></organization>
    </author>
    <date year="2014"/>
  </front>
  <seriesInfo name="ISO/IEC" value="23009-1:2014"/>
</reference>
<reference anchor="LowLatencyStreaming" >
  <front>
    <title>Low Latency Live Video Streaming over HTTP 2.0</title>
    <author initials="S." surname="Wei" fullname="Sheng Wei">
      <organization></organization>
    </author>
    <author initials="V." surname="Swaminathan" fullname="Viswanathan Swaminathan">
      <organization></organization>
    </author>
    <date year="2014"/>
  </front>
  <seriesInfo name="NOSSDAV" value="2014"/>
</reference>


    </references>



  </back>
</rfc>

