The experimental HTTP version 2 protocol promises to improve the web browsing experience but what does it mean for HTTP-based media streaming technologies such as MPEG-DASH?

We are pleased to announce the launch of our Adaptive Media Streaming over HTTP/2 trial. We are inviting you to participate in order to help us gather important data.

Background

As part of the the Adaptive Bitrate Technologies project, BBC R&D is already looking at media delivery over HTTP-based formats such as Apple HLS, Adobe HDS and MPEG-DASH.

HTTP/2, meanwhile, is intended to address some of the performance issues seen in HTTP/1.1 by introducing features such as content multiplexing, header compression, efficient binary representation and server push.

The HTTP/2 specification is nearing the final stages of standardisation and at this important point in the process we are really interested in finding out whether the changes are beneficial to media streaming over HTTP.





HTTP/2 public trial

As part of our work looking at HTTP/2 we have designed a trial that presents a public-facing HTTP/2 server providing access to a number of test MPEG-DASH streams.

An overview of the HTTP/2 trial technical architecture is provided in the graphic at the top of this article. The point of most interest is the server acting as a Reverse Proxy deployed in front of the media origin server, which translates between HTTP/2 and HTTP/1.1. This allows us to harness our existing HTTP/1.1-based infrastructure without need for modification.

In our trial, the Reverse Proxy is an application called nghttpx, provided as part of the nghttp2 software suite, an open source project hosted on GitHub. We chose this for a number of reasons including feature completeness, stability and speed of updates in response to changes to the HTTP/2 specification. During the development of the trial we identified a few issues with nghttpx, and some additional features that would help improve our trial effectiveness. We used GitHub's issue tracking and pull request features to communicate with the nghttp2 developer.





Trial participation

Following internal testing the HTTP/2 server is now publicly available at the address http2.bidi.int.bbc.co.uk. At the time of writing the trial server supports the HTTP/2 draft 14 (the latest implementation/interop draft), providing access for both cleartext (h2c) and encrypted (h2) connections.

Cleartext access (h2c) is available on port 80 via http://. We support HTTP/2 connections via upgrade and prior knowledge. Note that HTTP intermediaries may interfere with cleartext connections.

Encrypted access (h2) is available on port 443 via https://. We support TLS 1.2+ connections and HTTP version negotiation via NPN and ALPN. The server provides a security certificate signed by the BBC Certificate Authority (CA). Unfortunately the BBC CA is not typically trusted by default in HTTP clients such as browsers, command line tools or libraries. This issue will normally be presented as a warning, requiring you to accept and continue.

Here are the links to the MPEG-DASH test streams:

* The DASH-IF media player running in Chrome is not able to cope with the highest bit rate Representation of this test stream and playback ceases after a period of time. This is a known bug in Chrome.

Further information about the test streams is available on the blog post and also the dedicated page.





Web Browser support for HTTP/2 and MPEG-DASH

Support for HTTP/2 and MPEG-DASH is currently quite variable across client software and operating systems. This makes media stream testing quite difficult. However, support continues to mature and hopefully the situation should improve over time.

We have had the most success with the Javascript reference DASH player provided by the DASH Industry Forum (DASH-IF). Using this Javascript client within an HTTP/2 capable browser allows for playback of DASH streams over HTTP/2. At the time of writing, the browser that offering the best is Google Chrome 39.0.2171.95 (tested on Windows 7). There are, however, three caveats:

HTTP/2 may not be enabled by default. In order to enable it you can access "chrome://flags" and ensure the "Enable SPDY/4" option is enabled. Chrome supports HTTP/2 encrypted connections (i.e. h2) only. The Certificate Authority trust issue described above may prevent playback without an obvious error message. This can be resolved by first accessing the test URL directly in a conventional browser tab, accepting the security warning (permanently or temporarily) when prompted, and finally playing the stream in the Javascript player.

We have also successfully tested other web browsers with HTTP/2 including Firefox Nightly 36.0a1 on Windows 7, Chrome 39.0.2171.95 on Mac OS X, Chrome 39.0.2171.92 on Android 4.4.2 and Internet Explorer 11 on Windows 10 Technical Preview. However, the DASH-IF reference DASH player support varies across these browsers.

It is also important to highlight that none of the tested web browsers support HTTP/2 cleartext connections which has prevented us from being able to test that aspect of the HTTP/2 specification. You can therefore only use the encrypted URLs (https://) when attempting to test HTTP/2 in a web browser; using the cleartext URLs (http://) will connect using HTTP/1.1.





Alternative client support for HTTP/2 and MPEG-DASH

We have also been working with the GStreamer multimedia framework as an embedded media player. GStreamer supports HTTP via the souphttpsrc plugin but this does not yet support HTTP/2.

As part of the work for the HTTP/2 trial, we have therefore developed a new GStreamer plugin called curlhttpsrc based on libcurl, a software library capable of supporting HTTP/2 cleartext and encrypted connections. We have now released curlhttpsrc under an open source licence available at GitHub. During the development and testing of curlhttpsrc some issues with the HTTP/2 functionality in libcurl were encountered. These issues were reported back, resolved and incorporated by the libcurl project.





Your feedback

HTTP/2 and DASH are still relatively cutting edge and we are hoping our trial will shake out teething issues such as performance or compatibility from a protocol and implementation perspective. We have made the trial public in order to increase our user base and improve our sample population to better reflect the real world. We are interested in receiving your feedback on this trial, both general queries or specific technical issues.



Feedback can be provided to us at the address http2@rd.bbc.co.uk

Acknowledgements

We would like to thank Tatsuhiro Tsujikawa and Daniel Stenberg for their assistance with nghttp2 and libcurl.