HLS or DASH? In 2026 most OTT publishers can serve HLS everywhere and add DASH where it earns its keep, but the choice still shapes DRM, ad insertion, latency and engineering effort. Here is a clear comparison, a device-by-device support table built from each platform's own documentation, and a recommendation for each target.
The 30-second summary
- HLS (HTTP Live Streaming) - Apple's protocol, with an .m3u8 playlist and MPEG-TS or fragmented MP4 segments. It plays on every major TV platform, is AVPlayer's native adaptive streaming protocol, and is required for FairPlay DRM.
- MPEG-DASH (Dynamic Adaptive Streaming over HTTP) - an open ISO standard with an .mpd manifest and fMP4 segments. It plays on Android, Fire TV, Roku and Samsung, and in browsers through JavaScript players, but not in Apple's player.
- CMAF (Common Media Application Format) - not a protocol but a segment format. One set of fMP4 segments can be referenced by both HLS and DASH manifests, which is why it is the sensible default in 2026.
HLS vs DASH vs CMAF at a glance
The table below compares the two protocols - and the CMAF format that increasingly underpins both - across the dimensions that matter when you choose a packaging strategy.
| Dimension | HLS | MPEG-DASH | CMAF |
|---|---|---|---|
| What it is | Streaming protocol | Streaming protocol | Segment and packaging format |
| Created by | Apple (RFC 8216) | MPEG / ISO (23009-1) | MPEG / ISO (23000-19) |
| Manifest | .m3u8 playlist | .mpd XML | None - reused by both manifests |
| Segment container | MPEG-TS or fMP4 | fMP4 | fMP4 (.m4s / CMAF chunks) |
| Device reach | Every major TV platform; AVPlayer's native adaptive streaming protocol | Android, Fire TV, Roku and Samsung; browsers through JavaScript players; not Apple's player | Both, via either manifest |
| DRM | FairPlay; Widevine and PlayReady with fMP4 segments on supporting devices | Widevine, PlayReady | One cbcs package serves compatible FairPlay, Widevine and PlayReady clients |
| Segment length guidance | 6 s (Apple) | 1-10 s (DASH-IF) | Follows the manifest |
| Low-latency mode | LL-HLS | LL-DASH | CMAF chunks enable both |
| SSAI support | AWS MediaTailor, Google DAI | AWS MediaTailor, Google DAI | Depends on the manifest used |
| Best for | One format for every platform, and Apple devices | Android-family devices and PlayReady-based DRM stacks | Package once, serve both |
A closer look at each format
HLS - HTTP Live Streaming
HLS uses a two-tier playlist. A multivariant (master) playlist lists the available renditions; the player picks one and loads its media playlist, which lists the actual segments. Segments are MPEG-TS (.ts) on legacy streams or fragmented MP4 (.m4s) on modern CMAF-based HLS.
A master playlist (master.m3u8) advertising two renditions:
#EXTM3U
#EXT-X-VERSION:7
#EXT-X-STREAM-INF:BANDWIDTH=2000000,RESOLUTION=1280x720,CODECS="avc1.64001f,mp4a.40.2"
720p/playlist.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.640028,mp4a.40.2"
1080p/playlist.m3u8
The media playlist it points to (1080p/playlist.m3u8) lists the segments. #EXT-X-MAP names the shared init segment; each #EXTINF line is one media segment:
#EXTM3U
#EXT-X-VERSION:7
#EXT-X-TARGETDURATION:6
#EXT-X-MAP:URI="init.mp4"
#EXTINF:6.000,
segment-00001.m4s
#EXTINF:6.000,
segment-00002.m4s
# ...segments 00003 to 00099...
#EXTINF:6.000,
segment-00100.m4s
#EXT-X-ENDLIST
MPEG-DASH - Dynamic Adaptive Streaming over HTTP
DASH describes the whole stream in a single XML manifest, the .mpd. Its hierarchy is MPD → Period → AdaptationSet → Representation → SegmentTemplate: a period is a time span, an adaptation set groups one media type (video, audio, captions), each representation is one bitrate, and the segment template is the URL pattern for the init and media segments.
A trimmed, video-only .mpd with two representations:
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" type="static"
minBufferTime="PT2S" mediaPresentationDuration="PT10M0S"
profiles="urn:mpeg:dash:profile:isoff-live:2011">
<Period>
<AdaptationSet mimeType="video/mp4" segmentAlignment="true">
<Representation id="720p" bandwidth="2000000" width="1280" height="720" codecs="avc1.64001f">
<SegmentTemplate timescale="1000" duration="6000" startNumber="1"
initialization="720p/init.mp4" media="720p/segment-$Number%05d$.m4s" />
</Representation>
<Representation id="1080p" bandwidth="5000000" width="1920" height="1080" codecs="avc1.640028">
<SegmentTemplate timescale="1000" duration="6000" startNumber="1"
initialization="1080p/init.mp4" media="1080p/segment-$Number%05d$.m4s" />
</Representation>
</AdaptationSet>
</Period>
</MPD>
CMAF - Common Media Application Format
CMAF is not a manifest or a protocol - it standardizes the media itself: one fragmented-MP4 structure (an init.mp4 plus a run of .m4s segments, optionally split into smaller CMAF chunks for low latency). Because the structure is identical, the HLS media playlist and the DASH MPD above can point at the same physical files:
/video/1080p/
init.mp4 ← #EXT-X-MAP (HLS) + initialization= (DASH)
segment-00001.m4s ← #EXTINF (HLS) + media=…$Number%05d$ (DASH)
segment-00002.m4s
…
Encrypt those segments once with the cbcs scheme and one package can serve compatible FairPlay, Widevine, and PlayReady clients. PlayReady is the catch: clients before version 4.0 only decrypt cenc, and Microsoft makes cbcs support optional even in clients built on 4.0 or later. Fire TV sticks (PlayReady 3.3 or earlier) and older Samsung sets are in that group, so keep cenc delivery for any target device that lacks cbcs support (Microsoft).
Want to see this on a real stream? Paste an .m3u8 or .mpd into our free Manifest Inspector to break down its renditions, codecs, and segments.
Device support in 2026, platform by platform
This table comes from each platform's developer documentation, checked in September 2026. It is the part of this decision that changes most often, so check the linked docs before you commit.
| Platform | Player | HLS | DASH | DRM | Watch out for |
|---|---|---|---|---|---|
| Roku | SceneGraph Video node | Yes (MPEG-TS or CMAF) | Yes | Widevine over HLS or DASH; PlayReady over DASH or Smooth Streaming | PlayReady was retired for apps in the US, Canada and Latin America on 30 June 2025. Widevine with cbcs needs Roku OS 9.0 or later. |
| Amazon Fire TV | Amazon's port of ExoPlayer | Yes | Yes | Widevine (L1 or L3 by device); PlayReady 2.5 to 3.3 | Those PlayReady versions cannot decrypt cbcs. Fire TV devices on Vega OS use web players such as Shaka instead. |
| Android TV and Google TV | Media3 ExoPlayer | Yes | Yes | Widevine; PlayReady SL2000 on Android TV | Widevine over HLS needs fMP4 segments, not MPEG-TS. |
| Apple TV | AVPlayer | Yes | No | FairPlay only | AVPlayer does not stream DASH, so tvOS apps need HLS. |
| iPhone and iPad | AVPlayer | Yes | In Safari only, through JavaScript players | FairPlay only | Managed MediaSource (iPhone, Safari 17.1 and later) and Media Source Extensions (iPad) run DASH players in Safari, not in AVPlayer. |
| Samsung Tizen | AVPlay API | Yes | Yes | PlayReady and Widevine with DASH or fMP4 HLS; AES-128, SAMPLE-AES or ClearKey with MPEG-TS HLS | Samsung says adaptive streaming needs AVPlay rather than the HTML5 video element, marks PlayReady as deprecated on Tizen, and limits Widevine L1 to VOD. |
| LG webOS | HTML5 video element | Yes, natively | Not natively | PlayReady 4.6 and Widevine 17 through an MSE/EME player (webOS 26); AES-128 with HLS | For DRM or DASH, bring a JavaScript MSE player. |
| Android phones | Media3 ExoPlayer | Yes | Yes | Widevine (cbcs from Android 7.1) | ClearKey works with DASH only. |
Two things stand out. HLS is the one format every platform plays, which makes it the safe baseline, and OTTEngine's own players are built around it. And DRM, not the protocol, is where platforms really differ: FairPlay only on Apple, cbcs support varying from one PlayReady client to the next, and Roku no longer accepting PlayReady in the Americas.
Testing a stream? Paste an .m3u8 or .mpd URL into our free stream tester to play it and check its variants, codecs and errors, and compare DRM coverage with the multi-DRM checker.
Latency: neither format wins by default
Standard latency depends far more on segment length and player buffering than on the protocol. Apple's HLS authoring specification recommends 6-second segments, and RFC 8216 recommends that a player joining a live HLS stream not start closer than three target durations to the end of the playlist, about 18 seconds behind the live edge with 6-second segments (RFC 8216). DASH-IF's guidelines allow segments of 1 to 10 seconds. Older advice put HLS at 30 seconds or more because Apple once recommended 10-second segments, which it no longer does.
Both formats have low-latency modes. Apple says Low-Latency HLS can reach 2 seconds or less using 1-second parts, and DASH-IF's low-latency DASH guidelines set a 3.5-second default target. For live news, sports, or interactive content, pick based on device support and your CDN, not the protocol name.
DRM compatibility
- HLS + FairPlay - Apple devices, where FairPlay is the only DRM Apple's players support.
- HLS + Widevine - Android and Google TV through Media3 with fMP4 segments, and Roku.
- HLS + PlayReady or Widevine - Samsung Tizen, with fMP4 segments; MPEG-TS HLS there supports only AES-128, SAMPLE-AES or ClearKey.
- DASH + Widevine - Android, Fire TV, Roku, and Samsung.
- DASH + PlayReady - Samsung, Android TV, Fire TV (PlayReady 2.5 to 3.3), and LG through an MSE/EME player. Roku retired PlayReady for apps in the US, Canada and Latin America on 30 June 2025 (Roku).
A shared cbcs package can serve compatible FairPlay, Widevine, and PlayReady clients. Keep cenc delivery for target devices that lack cbcs support, which includes every PlayReady client before version 4.0 and some after it.
Ad insertion compatibility
Server-side ad insertion no longer forces the choice. AWS Elemental MediaTailor supports HLS and DASH, including multi-period DASH, for VOD and live (AWS), and Google Ad Manager's Dynamic Ad Insertion accepts either format in its stream requests (Google). The differences are at the edges: MediaTailor's newest feature, HLS Interstitials, live since November 2025, is HLS-only. Check your SSAI vendor's feature list against the format you plan to serve.
Our default recommendation
- Package once as CMAF (fMP4) segments. They back both manifest types, and fMP4 is what Widevine over HLS on Android and DRM over HLS on Samsung require.
- Serve HLS to Apple TV, iPhone and iPad, Roku, Samsung, and LG. It is AVPlayer's native adaptive streaming protocol and the only one LG plays natively.
- On Android TV, Google TV, Fire TV, and Android phones, both work. Use the format your DRM and ad stack already support.
- For DRM, encrypt with cbcs to serve compatible FairPlay, Widevine, and PlayReady clients from one package, and keep cenc delivery for any target device that lacks cbcs support.
The bottom line
Stop treating HLS and DASH as either/or. HLS is the one format every major platform plays, CMAF packaging keeps DASH a manifest away, and DRM support by device is where the real planning goes. OTTEngine transcodes and packages your library for HLS delivery automatically, the one format every platform above can play. Start a free trial to try it with your own library.
Frequently Asked Questions
Which is better, HLS or DASH?
Neither is better in general. HLS is the native adaptive streaming protocol of Apple's AVPlayer and it plays on every major TV platform, while DASH is common on Android-family devices and in DRM stacks built around PlayReady. Most services package once in CMAF and serve the manifest each device needs.
Do Apple devices support DASH?
Not in Apple's own player. AVPlayer on Apple TV, iPhone and iPad streams HLS, and FairPlay is the only DRM it supports. In Safari on iPhone and iPad, JavaScript players can play DASH through Managed MediaSource or Media Source Extensions, but that does not help a tvOS app.
Can I use one set of files for both HLS and DASH?
Yes. With CMAF, one set of fragmented MP4 segments can be listed by both an HLS playlist and a DASH manifest. If the content is encrypted, a shared cbcs package can serve compatible FairPlay, Widevine and PlayReady clients, but keep cenc delivery for devices that lack cbcs support.
How low can streaming latency get in 2026?
Apple says Low-Latency HLS can reach 2 seconds or less, and the DASH-IF low-latency guidelines use a 3.5-second default target. Real deployments usually land at a few seconds, depending on segment and part durations, the player and the CDN.
Do I need DASH for Roku?
No. Roku plays Widevine-protected content over HLS as well as DASH. PlayReady works on Roku only over DASH or Smooth Streaming, and Roku retired it for apps in the US, Canada and Latin America on 30 June 2025.
What is an .m3u8 file?
It is an HLS playlist. A multivariant (master) .m3u8 lists the available bitrate renditions; each rendition points to a media .m3u8 that lists the individual segments to download in order.
What is an .mpd manifest?
The .mpd (Media Presentation Description) is DASH's single XML manifest. It describes the stream as Periods → AdaptationSets → Representations, with a SegmentTemplate giving the URL pattern for each rendition's init and media segments.
What is CMAF, and is it the same as fMP4?
CMAF is a standardized profile of fragmented MP4. All CMAF segments are fMP4, but CMAF pins down a common structure (and chunking) so the exact same segment files can be listed by both an HLS playlist and a DASH manifest - letting you package once instead of twice.
Does HLS still use MPEG-TS segments?
It can, and legacy streams still do, but modern HLS uses CMAF fMP4 (.m4s) segments. Some DRM paths need fMP4, because Widevine over HLS on Android and PlayReady or Widevine over HLS on Samsung do not work with MPEG-TS.
Which DRM works with HLS and which with DASH?
FairPlay works only with HLS, on Apple devices. Widevine works with DASH on Android, Fire TV, Roku and Samsung, and with HLS on Roku, on Android through Media3 with fMP4 segments, and on Samsung with fMP4 segments. PlayReady is mostly used with DASH, and Samsung also supports it over fMP4 HLS.
Should I use HLS or DASH for Samsung and LG TVs?
HLS is the simpler choice for both. LG webOS plays HLS natively but lists no native DASH support, so DASH or DRM on LG needs a JavaScript MSE player. Samsung plays both formats through its AVPlay API, and its DRM over HLS needs fMP4 segments.
What is the difference between cenc and cbcs?
They are the two main encryption schemes of the MPEG Common Encryption standard. cenc encrypts with AES in counter mode, and cbcs uses AES-CBC with pattern encryption. FairPlay requires cbcs and many PlayReady clients support only cenc, so one encrypted package rarely covers every device.