HLS vs MPEG-DASH: Choosing an Adaptive Streaming Format
A practical comparison of HLS and MPEG-DASH — segment formats, DRM, latency, device reach, and how CMAF lets you stop choosing.
If you are shipping video to more than a couple of devices, you will eventually have to answer one question: HLS, MPEG-DASH, or both? They solve the same problem — chopping a stream into segments and describing them in a manifest so a player can adapt to changing network conditions — but they make different bets about packaging, encryption, and ecosystem. This post walks through the trade-offs the way an engineer actually hits them in production.
The two manifests
HLS (HTTP Live Streaming), originally from Apple, describes content with .m3u8
playlists. A master playlist lists the available renditions; each media
playlist lists the segments for one rendition.
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=2400000,RESOLUTION=1280x720,CODECS="avc1.4d401f,mp4a.40.2"
720p/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360,CODECS="avc1.4d401e,mp4a.40.2"
360p/index.m3u8
MPEG-DASH (Dynamic Adaptive Streaming over HTTP) uses an XML Media
Presentation Description (.mpd). It is more verbose but also more
expressive: AdaptationSets group renditions, Representations describe each
one, and SegmentTemplate declares how to build segment URLs from a pattern
rather than enumerating every file.
You can inspect either format end to end with the HLS/DASH parser.
Segment formats: TS vs fMP4/CMAF
Historically HLS shipped MPEG-2 Transport Stream (.ts) segments, while DASH
used fragmented MP4 (.m4s). Maintaining two encodes of the same content is
wasteful, which is why CMAF (Common Media Application Format) matters: it is
fragmented MP4 that both HLS and DASH can reference.
- One set of media files. Encode and package once as CMAF, then emit both an
.m3u8and an.mpdthat point at the same.m4ssegments. - Shared init segments and
cbcsencryption. With CMAF you can use a single encryption scheme across players.
TS is still common for legacy and some live workflows, but for greenfield projects fMP4/CMAF is the default.
DRM: the real differentiator
This is where the two formats stop being interchangeable, because DRM is tied to the platform, not just the manifest.
- FairPlay — native on Safari, iOS, tvOS, and macOS; typically paired with HLS.
- Widevine — native on Chrome, Android, and most smart TVs; pairs with DASH (and HLS).
- PlayReady — native on Edge, Xbox, Windows, and many TVs; pairs with DASH.
The practical consequence: to cover the full device matrix you generally serve
HLS + FairPlay to the Apple world and DASH + Widevine/PlayReady everywhere
else. CMAF with cbcs encryption narrows the gap because all three DRMs can
decrypt the same cbcs-encrypted CMAF segments — you still serve two manifests,
but only one set of encrypted media.
Latency
Standard HLS with 6-second segments and a 3-segment buffer gives you ~18–30s of glass-to-glass latency. Both formats now have low-latency modes:
- LL-HLS adds partial segments (parts) and blocking playlist reloads,
plus
EXT-X-PRELOAD-HINT, to push latency under ~3s. - LL-DASH uses chunked-transfer
CMAFand aavailabilityTimeOffset/ServiceDescriptionlatency target to do the same.
Both rely on CMAF chunks (a fragment split into smaller moof/mdat chunks)
delivered via HTTP/1.1 chunked transfer or HTTP/2.
Ecosystem and tooling
- HLS is the only format that plays natively in Safari and on iOS without
Media Source Extensions, which still matters for ad-supported and
battery-sensitive contexts.
hls.jscovers everything else. - DASH has no native browser support but is well served by
dash.jsandShaka Player, and it is the backbone of many OTT and broadcast workflows.
A pragmatic recommendation
- Encode once to CMAF. Avoid duplicate media at all costs.
- Serve both manifests from the same segments: HLS for Apple, DASH for the
rest, with
cbcsso a single encryption pass covers FairPlay, Widevine, and PlayReady. - Add LL-HLS / LL-DASH only when latency is a product requirement — it adds real operational complexity (origin and CDN must support chunked delivery).
Choosing a format is less "pick a winner" and more "package once, project twice." CMAF is what makes that affordable.
Try it yourself
Reading about streaming is one thing — pull apart a real manifest, play a stream, and measure its QoE with the toolkit.
Browse all tools