HLS vs DASH — Which Adaptive Streaming Protocol to Choose

HLS vs DASH

Both are HTTP-based adaptive streaming protocols. They solve the same problem (segment-based delivery with bitrate adaptation) with slightly different designs.

HLS (HTTP Live Streaming)

Developed by Apple in 2009. Standardized as RFC 8216.

  • Manifest: .m3u8 plaintext playlist
  • Segments: historically .ts (MPEG-TS), now .m4s (fragmented MP4)
  • Native browser support: Safari, all iOS, all macOS
  • Library support: HLS.js for Chrome/Firefox/Edge
  • Encryption: AES-128 segment-level (most common), SAMPLE-AES for FairPlay
  • Codec flexibility: H.264 + HEVC + AV1 with fragmented MP4

DASH (Dynamic Adaptive Streaming over HTTP)

Standardized by MPEG in 2012.

  • Manifest: .mpd XML
  • Segments: .m4s (fragmented MP4)
  • Native browser support: None (requires Media Source Extensions + JS library)
  • Library support: Shaka Player, dash.js
  • Encryption: Common Encryption (CENC) supporting Widevine + PlayReady simultaneously
  • Codec flexibility: Any codec MP4 can carry

Why HLS won the market

Native Safari support without a JS library is the practical winner. Most platforms ship HLS first, DASH as a secondary option.

When DASH still matters

  • Studio DRM distributing the same content with Widevine + PlayReady simultaneously — DASH+CENC is the standard pattern.
  • Mature OTT platforms that already shipped DASH years ago and have toolchains around it.

For most modern projects, HLS is the simpler default. AVCaption ships HLS only.

← content.back_to_index