
HLS and MPEG-DASH both stream adaptive video over plain HTTP, and they differ mainly in manifest format, Apple device support and DRM. HLS comes from Apple, uses .m3u8 playlists and plays natively on iPhone. MPEG-DASH is an ISO standard with an XML .mpd manifest, played through a JavaScript player.
TL;DR:
hls or dash per rendition, the finished video returns both an hlsUrl and a dashUrl, and the documented embed plays HLS.Updated Oct 19, 2026: rewritten as a general comparison with a table, a manifest diagram and a CMAF section. The AIOZ player is now one section, and a per-session bitrate claim the Analytics API doesn't support was removed.
Both protocols do the same job, which Cloudflare's explainer sums up well: they run over HTTP, "break video into segments with an accompanying index file, and offer adaptive bitrate streaming." Because both use ordinary web servers and ports, they pass through firewalls and CDNs, and on AIOZ Stream through peer delivery nodes, so the differences sit in the details below.
| HLS | MPEG-DASH | |
|---|---|---|
| Created by | Apple; published as IETF RFC 8216 | MPEG; international standard ISO/IEC 23009-1 |
| Manifest | .m3u8 text playlists (a master playlist plus one media playlist per rendition) | .mpd XML file (Periods, Adaptation Sets, Representations) |
| Segment containers | MPEG-TS or fragmented MP4 | Usually fragmented MP4 |
| Codecs | Tied to what Apple devices decode, most often H.264 and HEVC | Codec-agnostic, so VP9 and AV1 ladders are straightforward |
| Apple devices | Native playback in Safari and iOS | No native playback on iPhone |
| Chrome, Firefox, Edge | Usually through a JavaScript player such as hls.js | Through a JavaScript player such as dash.js or Shaka Player |
| Typical segment length | 6 seconds by default | 2 to 10 seconds, ideally 2 to 4 |
| DRM | FairPlay on Apple devices | Widevine and PlayReady, via Common Encryption |
| Low-latency mode | LL-HLS | Low-latency DASH with chunked CMAF |
| On AIOZ Stream | type: 'hls', container mpegts or mp4 | type: 'dash', container fmp4 |
The manifest is the difference you'll touch most as a developer, because it's the file your player reads first. An HLS master playlist lists each rendition with its bandwidth and points to a media playlist of segment URLs. A DASH MPD puts everything in one XML file, grouping renditions as Representations inside Adaptation Sets. If you haven't read one before, our M3U8 guide walks through a real HLS playlist line by line.

Neither format gives a better picture, since the same encode looks the same in both, so the choice comes down to your audience and your DRM needs.
Latency is no longer a reason to pick one over the other, although the defaults differ. Standard HLS with 6-second segments runs well behind real time, but LL-HLS and low-latency DASH both cut that by sending partial segments. Our LL-HLS guide covers when the extra complexity pays off, and HLS vs WebRTC covers the sub-second cases neither format handles.
Yes, and the usual way is CMAF (the Common Media Application Format). RFC 8216 allows HLS segments in fragmented MP4 as well as MPEG-TS, and fragmented MP4 is DASH's usual container too. Package your renditions once as CMAF segments and write two small manifests, an .m3u8 and an .mpd, that point at the same files. You then store and cache one copy of the video instead of two, which halves the storage for a dual-format library.
DRM can follow the same path. Fora Soft's guide to Common Encryption (ISO/IEC 23001-7) says the current default is CMAF "packaged once, encrypted with cbcs, and signalled in both HLS and DASH" so one set of files serves every device. FairPlay accepts only the cbcs scheme, and Widevine and PlayReady now support it as well, as our Widevine vs FairPlay vs PlayReady guide explains.
Once the player has a manifest, HLS and DASH behave the same way. The player reads the list of renditions, measures recent download speed and how full its buffer is, and requests the next segment at the highest rendition it can sustain. Then it measures again and repeats the loop every few seconds for the whole session.

Weighing both signals keeps one slow segment from triggering a downshift, and frequent switches hurt viewers even when nothing stalls. Our adaptive bitrate guide covers the throughput, buffer and hybrid algorithms players use to decide.
The AIOZ Stream player docs say the player supports "HLS (HTTP Live Streaming) and MPEG-DASH, providing adaptive bitrate streaming." It also "automatically adjusts the video quality based on the viewer's internet connection." On the encoding side, you choose the format per rendition in the Video API's qualities array: type: 'hls' with an mpegts or mp4 container, or type: 'dash' with fmp4. When encoding finishes, the video detail returns both URLs, as these lines from the Video API docs show.
const detail = await client.media.getDetail(videoId)
console.log(detail.data.assets.hlsUrl) // HLS playback
console.log(detail.data.assets.dashUrl) // DASH playback
console.log(detail.data.assets.mp4Url) // MP4 downloadFor a web page, the documented embed is one iframe, and its path plays HLS:
<iframe
src="https://embed.aiozstream.network/vod/hls/video_id"
width="100%"
frameborder="0"
scrolling="no"
allowfullscreen="true"
></iframe>Both snippets are quoted from the docs and weren't run for this article, and the docs don't describe a DASH embed path or say which format the player prefers when a video has both. If you need DASH on a page, play the dashUrl in your own DASH player, such as dash.js or Shaka Player.
To decide how much each format matters for you, check where your viewers watch. The Analytics API can break views down by operating-system or browser, which tells you how much of your audience is on iOS and Safari. You can match the player's colors to your brand through the dashboard or the Players API, as our player customization guide shows. To embed your first video, follow Player: getting started in the AIOZ Stream docs, which includes a live example.
Does Safari support MPEG-DASH?
Not natively on iPhone, which is why HLS is the format to use when Apple devices are a large part of your audience.
Does MPEG-DASH give better video quality than HLS?
No. Picture quality comes from the encode, so the same renditions look the same whichever manifest points to them and whichever player reads it.
Which has lower latency, HLS or DASH?
In their low-latency modes they are close: LL-HLS and low-latency DASH both send partial segments to cut delay.
Can AIOZ Stream output both HLS and DASH?
Yes, because you set type per rendition when you create the video, and the finished video returns an hlsUrl and a dashUrl.
Do I need DASH to use Widevine?
Not anymore in most setups, because CMAF segments encrypted with cbcs can carry Widevine, PlayReady and FairPlay through either manifest.
Is HLS an open standard?
HLS is published as an informational IETF RFC (8216) and is widely supported, while MPEG-DASH is a formal ISO/IEC standard.
type and container options and the playback URLs
Stream from your phone to AIOZ Stream with PRISM Live Studio: Custom RTMP setup, documented 1080p and 720p bitrates, Adaptive quality and mobile stability tips.

Choose OBS encoder settings for AIOZ Stream: the documented 1080p30 values, the missing 720p figure, NVENC vs x264, keyframes, 60 fps and a test procedure.

Set up OBS Studio for AIOZ Stream: choose a Custom service, paste the RTMP server URL and stream key, then stream CBR at 4500 to 6000 Kbps with 1 s keyframes.

Seven steps to go live on AIOZ Stream with OBS or PRISM: stream key, session form, RTMP credentials, bandwidth math, and the first two minutes after you start.

Live streaming on AIOZ Stream: a stream key, one session per broadcast, RTMP from OBS or PRISM, HLS playback, plus restreaming, stats and an opt-in archive.

A web3 streaming platform delivers video through independent nodes and settles payments on a blockchain. How it differs from a CDN, and how AIOZ Stream does it.