I am trying to find the differences between HLS and DASH
, the two widely used streaming format.
Through my research, I took a look at the image that demonstrates adaptive streaming feature comparison.
I am uncertain about the HTML5 support.
Is MPEG-DASH
the only streaming format that supports HTML5
or the below image is kind of old feature comparison?
The most important difference is probably that MPEG-DASH is a vendor independent, international standard ratified by ISO/IEC MPEG. Previous adaptive streaming technologies - such as Apple HLS – have been released by vendors with limited support of company-independent streaming servers as well as playback clients.
MPEG-DASH allows native playback with HTML5 as mainly the fMP4 container is used but recently also Apple added support for fMP4 at WWDC16. Nevertheless HLS is mainly used and supported with MPEG2-TS which cannot be natively played back with HTML5. There are solutions which transmux the MPEG2-TS segments in JavaScript into fMP4 and therefore allow native playback. These players include hls.js, which is open source.
DASH has some more advantages if you want to use DRM as MPEG-CENC is nicely integrated with this standard. Other things include more compact manifests through SegmentTemplate (in HLS each and every segment needs to be described an URL) which allows to specify a segment URL generation mechanism. The smaller size of the DASH manifest influences the startup delay. Other things that DASH specifies are how you could do failovers with BaseURLs that allow you host your content on several different locations and much more.
However, HLS is also widely used and it is not so complex and easier to implement. So if you do not need DRM, very high resolutions and bitrates (could have performance impacts when transmuxing in JavaScript) or some other specific DASH features its probably better to use HLS.
For DASH as well as HLS there are several services (e.g., zencoder) which could generate content and also open source solutions such as ffmpeg.