These three are often compared as if they were competing video codecs, but they are really three different delivery strategies. MP4 is a single file you download; HLS (.m3u8) and DASH (.mpd) are adaptive streaming protocols that describe many small segments.
| MP4 (progressive) | HLS (.m3u8) | DASH (.mpd) | |
|---|---|---|---|
| What it is | One complete file | Text playlist + segments | XML manifest + segments |
| Adaptive bitrate | No | Yes | Yes |
| Live streaming | Not practical | Yes | Yes |
| Native browser playback | All browsers | Safari / iOS | None (MSE needed) |
| Typical latency | Lowest | 6–30 s (or 2–5 s with LL-HLS) | Similar to HLS |
| Server complexity | Trivial | Segmenter + playlist generator | Segmenter + MPD generator |
| DRM | Limited | FairPlay / Widevine | Widevine / PlayReady |
A well-formed MP4 with the moov atom at the front can start playing before the download finishes, which is often enough for a product demo or a landing-page video.
The trade-off is complexity: you must segment the source, generate playlists, keep them updated for live, and configure CORS and MIME types correctly. See how the playlist is structured →
DASH is common on large VOD platforms because it is codec-agnostic and pairs naturally with Widevine/PlayReady DRM. It needs a JavaScript player in every browser, including Safari. Many publishers actually generate both HLS and DASH from the same encoded segment set (often CMAF/fMP4) and pick per device.
Yes, but it is a remux, not a format swap: a tool downloads every listed segment and concatenates them into one file. For example, ffmpeg -i input.m3u8 -c copy output.mp4. This only works for streams you are authorised to record, and it loses the adaptive-bitrate benefit. Encrypted streams cannot be remuxed without the keys.