Adaptive Streaming

To access these features, Upgrade Now

Overview

Adaptive streaming is the ability for a video player to dynamically adjust video quality based on a user’s available bandwidth, device performance, and network conditions. Most modern web browsers only support progressive video playback which does not allow for seamless quality switching. Adaptive playback comes in many formats and protocols and the popularity of each format has changed over the years.

JW Player supports three formats of adaptive streaming, Apple HLS, MPEG-DASH, and RTMP. HLS and DASH are supported in JavaScript and HTML5 whereas RTMP requires the Flash plugin to be installed on the user’s device. As Flash has become an outdated technology and is being deprecated by most major browsers, we highly recommend switching to a modern format like HLS or DASH.

About HTTP Streaming

Streaming over HTTP allows a video player to choose the best quality video without proprietary software installed on a server. Video content exists on normal web servers and a video player is able to request assets by reading a manifest. The manifest provides the locations to various video qualities or renditions on the web server and contains information about the codecs used to compress the video and bitrates which allow the player to determine the most suitable quality to play. It also can contain multiple-audio track renditions as well as links to closed-caption or subtitle tracks. See Captions for more information about captions in streaming media.

In order to play either format, a video player is needed to parse the manifests, transmux into a browser/machine compatible format, and an adaptive engine to choose the correct video quality to play. JW Player supports adaptive streaming over HTTP in all modern browsers.

Browser Support

Support for streaming technology depends on the browser and browser version. JW Player works to fill in gaps where the browser does not natively support a codec for playing back the media.

Browser HTML5 DASH HTML5 HLS Flash HLS**
Chrome 35+ x x x
Firefox 42+ x x* x
Safari + - x x
Microsoft Edge x x x
IE 11 Win 8.1+ x x** x
Chrome for Android 35+ x x -
Mobile Safari iOS 8+ - x -

* Supported in JW Player 7.7+
** Flash is used for HLS in IE 11 for Windows 7

The following sections break down features and technical details supported by JW Player for each respective streaming media format.

HLS Support

Apple HTTP Live Streaming (HLS) is a manifest format that Apple has written for streaming on iOS devices and on desktop Safari. Microsoft Edge and Chrome Android support older versions of HLS. HLS is delivered to a browser packaged as transport stream (.ts) files. The .ts video container has video compressed using the h.264 codec audio compressed with AAC. A manifest can also contain just .aac files as well. JW Player only supports multiple-audio tracks if the audio is separate elementary .aac manifests as opposed to multiple .aac tracks embedded within the .ts container.

TS Container Codec Details

For adaptive live streams all fragments should be self-initializing, meaning they start with a PMT/PAT definitions and a full h.264 IDR frame. Live streams should also contain no B-frames or frames that rely on future and past data to decode. Using B-frames in a live stream will result in rendering errors, ranging from short stutters and macroblock artifacts to an eventual stall of the stream. Common issues are the omission of keyframes in fragments, or misalignment of keyframes across quality levels.

HLS Features

JW Player supports a subset of features from Protocol 6 Version 13 of the HLS IETF draft. Unless otherwise noted features are available in JW Player Premium edition and higher.

Feature Desktop HTML5 Mobile iOS Android Chrome Desktop Flash*
Alternate Audio Renditions x x n/a2 x
WebVTT subtitle tracks x x n/a2 x
CEA-608/708 Captions x x n/a2 x
Discontinuities x x x x
ID3 Timed Metadata x x n/a2 x
DVR sliding controlbar x x n/a2 x
AES-128 Decryption1 x x x x
Apple FairPlay DRM1 x x x x
Byte Range Requests x x x n/a
Redundant Streams x x n/a n/a

* Flash is used for IE 11.
  1. Available with a JW Player Enterprise license
  2. Platform limitation

Features Not Supported

  • Decryption of encrypted streams with SAMPLE-AES.
  • Alternate video renditions through #EXT-X-TYPE="VIDEO".
  • Support for presentation of streams containing just the I-frames, #EXT-X-I-FRAME-INF.

DASH Support

Dynamic Adaptive Streaming over HTTP (MPEG-DASH) is an ISO standard written and supported by an international team of media companies. The standard is designed to be codec agnostic and interoperable between browsers. DASH is supported in HTML5 and JavaScript by using Media Source Extensions and is available in modern browsers.

DASH file URLs are manifest media presentation documents (.mpd). The mpd files direct JW Player to all the information necessary to begin streaming. DASH is codec-agnostic and will therefore work with files encoded in h.264/AAC or VP9/Vorbis. JW Platform encodes DASH streams using VP9 as it is more efficient than h.264.

Notable Features

  • Multi-period manifests (JW 7.7 and higher)
  • Side-loaded captions
  • DRM - Widevine and PlayReady
  • Multiple language tracks
  • Subtitle support

Embedding and Customizing Adaptive Streams

Embedding and publishing adaptive streams in JW Player player is straightforward. JW Player will pick the most suitable video engine to render the content based on the order of sources provided.

var playerInstance = jwplayer("myElement");
playerInstance.setup({
    playlist: [{
        image: "/assets/myPoster.jpg",
        sources: [{ 
            file: "/assets/myStream.mpd"
        },{
            file: "/assets/myStream.m3u8"
        },{
            file: "/assets/myStream.mp4"
        }]
    }],
});

Note on Primary

JW Player allows you to force the player into HTML5 or Flash rendering mode using the ‘primary’ configuration option. This only works if there is a media engine for both Flash and HTML5 per video format supported on each browser. Setting a primary to Flash will not render the player in Flash when the first source is DASH since JW Player prefers HTML5 over Flash rendering based on the order of the sources provided.

Crossdomain and 302

Note that, when playing in Flash, both the M3U8 manifests and the TS segments are subject to crossdomain security restrictions. See Crossdomain File Loading for more information.

An additional limitation to keep in mind is that JW Player does not support 302 redirects on M3U8 manifest/playlist files in Flash or with our HLS HTML provider. We advise to instead use DNS load-balancing or serve up a dynamic M3U8 manifest, containing direct links to the M3U8 playlists on the target servers.

Additional Tools and Information

  • Manifest Validator - A third party tool that checks that a DASH manifest or video file is correctly structured and encoded. In order to get a stream functional JW Player 7, it should validate here.
  • How to do MPEG DASH Streaming - A helpful guide from Wowza about getting your stream encoded and playing in the DASH format.

Did you find this article helpful?

Please log in to rate this article.