Adaptive Streaming

To access these features, Upgrade Now


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 two formats of adaptive streaming over HTTP in HTML5 - Apple HLS and MPEG-DASH. Both streaming protocols are supported in the Free edition of JW Player.

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 DASH HLS
Chrome 35+ x x
Firefox 42+ x x
Safari + - x
Microsoft Edge x x
IE 11 Win 8.1+ x x**
Chrome for Android 35+ x x
Mobile Safari iOS 8+ - x

** 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 on Windows 7 only.
  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
  • 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");
    playlist: [{
        image: "/assets/myPoster.jpg",
        sources: [{ 
            file: "/assets/myStream.mpd"
            file: "/assets/myStream.m3u8"
            file: "/assets/myStream.mp4"


Adaptive Bitrate Algorithm

Both HLS and Shaka have similar ABR algorithms that prioritize starting video as fast as possible. This means that the initial quality of a video can be lower even if there is bandwidth to download a higher quality video file. The player then upswitches to a higher quality as soon as it can fill a buffer without causing a rebuffer event for a viewer. The algorithm will also never request a higher quality that is larger then the width of the video player which helps saves bandwidth and provide the best user experience. When the size of the player changes, this is is taken as an opportunity to scale to a higher or lower quality and adjust accordingly.

It is not possible to adjust the algorithm for ABR in JW Player nor is it possible to force a starting rendition.

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, 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.