# HLS vs MPEG-DASH: What's the Difference? M3U8, MPD and CMAF Explained

URL: https://steveshines.com/journal/hls-vs-mpeg-dash/

HLS and MPEG-DASH both adapt video quality over HTTP, but use different manifests and playback ecosystems. Compare M3U8 and MPD, codecs, CMAF, compatibility, latency and saving supported streams on Windows.

**HLS (HTTP Live Streaming) and MPEG-DASH are two ways to deliver video in small pieces over HTTP.** Both let a player adapt video quality to the viewer’s connection and support live broadcasts as well as on-demand video. The clearest difference is the manifest: HLS normally uses a `.m3u8` playlist, while MPEG-DASH uses an XML-based `.mpd` (Media Presentation Description).

Neither format is automatically sharper, faster, or easier to download. The result depends on the encoded video, available bitrates, player, browser, network, and how the streaming service is configured.

## HLS vs MPEG-DASH at a glance

| Feature | HLS | MPEG-DASH |
| --- | --- | --- |
| Full name | HTTP Live Streaming | Dynamic Adaptive Streaming over HTTP |
| Manifest | `.m3u8` text playlists | `.mpd` XML document |
| Quality selection | Variant streams in a multivariant/master playlist | Representations grouped in adaptation sets |
| Common media segments | MPEG-TS (`.ts`) and fragmented MP4/CMAF (`.m4s`) | Commonly fragmented MP4/CMAF; supported formats depend on profile |
| Live and video on demand | Both | Both |
| Adaptive bitrate | Yes | Yes |
| Low-latency option | Low-Latency HLS (LL-HLS) | Low-latency DASH implementations |
| Browser playback | Native HLS on supported Apple platforms; players such as hls.js elsewhere | Commonly a compatible player such as dash.js |
| Protected streams | Encryption and DRM integrations exist | Encryption and DRM integrations exist |

**A manifest is a set of playback instructions, not the complete video.** Saving `master.m3u8` or `manifest.mpd` alone usually does not save the media segments that the player needs.

## How HLS works: M3U8 playlists and segments

HLS, introduced by Apple, typically begins with a **multivariant playlist** (often called a master playlist). It points to alternative audio/video streams at different bitrates or resolutions. Each selected **media playlist** then lists media segments in playback order.

A simplified multivariant playlist might look like this:

```m3u8
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=1200000,RESOLUTION=854x480
480p/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3500000,RESOLUTION=1920x1080
1080p/index.m3u8
```

The player estimates the network throughput and buffer health, selects a variant, fetches its segments, and can switch variants as conditions change. For a live event, the media playlist can update as new segments become available. A stream might use `.ts` files, but **HLS is not limited to `.ts`**; fragmented MP4 is also widely used.

If you have never opened a playlist, start with [What is an M3U8 file?](/journal/what-is-an-m3u8-file/) for a line-by-line explanation.

## How MPEG-DASH works: MPD manifests and representations

MPEG-DASH follows the same broad idea of delivering short media pieces, but describes the presentation in an **MPD XML document**. An MPD organizes playback into *Periods*, *AdaptationSets* (for example, video, audio or subtitles), and *Representations* (such as alternative video bitrates). Segment URLs may be listed or generated from templates.

A schematic MPD fragment looks like this (not a complete playable manifest):

```xml
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" type="static">
  <Period>
    <AdaptationSet mimeType="video/mp4" contentType="video">
      <Representation id="480p" bandwidth="1200000" width="854" height="480" />
      <Representation id="1080p" bandwidth="3500000" width="1920" height="1080" />
    </AdaptationSet>
  </Period>
</MPD>
```

A DASH player reads the MPD, chooses supported tracks and representations, requests the corresponding segments, and adjusts its choice during playback. DASH is standardized by MPEG under ISO/IEC 23009; Part 1 was updated in 2026. If you are working with an actual MPD URL on Windows, see [How to download MPD streams](/journal/how-to-download-mpd-mpeg-dash-windows-11/).

## M3U8 vs MPD: the file extension is not the codec

This is the most common source of confusion. `.m3u8` and `.mpd` identify **manifest formats**. `.ts` and `.m4s` are commonly used **media segment containers or fragment files**. H.264/AVC, HEVC/H.265 and AV1 are **video codecs**. MP4 is a **container format**. These categories answer different questions:

- **Manifest:** Where are the tracks and segments? (`.m3u8` / `.mpd`)
- **Container/segment:** How are encoded samples packaged? (MPEG-TS / fMP4)
- **Codec:** How was video compressed? (H.264 / HEVC / AV1, subject to player support)

The same H.264 video could be packaged and served through either HLS or DASH. The manifest extension alone cannot tell you its actual resolution, codec, bitrate or whether it is protected.

### Where CMAF fits

**CMAF (Common Media Application Format)** defines a shared way to package fragmented media. A service can, when encoding, timing and encryption choices are compatible, serve the **same CMAF media fragments** through separate HLS and DASH manifests. It still needs both a valid `.m3u8` and a valid `.mpd`; renaming one file does not transform one streaming protocol into the other.

This can reduce duplicated packaging and storage, but CMAF does not guarantee that every device supports every codec or DRM scheme.

## Which one works better in a browser or on a device?

HLS has strong native support in Apple's playback ecosystem. On browsers without suitable native HLS playback, sites often use a JavaScript player such as **hls.js**, provided the browser exposes the required media APIs. For DASH in browsers, a common choice is **dash.js** using Media Source Extensions and, for protected playback, the relevant encryption APIs.

This is not a rule that 'Safari only plays HLS' or 'Chrome cannot play HLS.' Actual compatibility depends on browser version, device, media codec, player library and DRM support. Test the target devices rather than relying solely on a format label.

## Is HLS or DASH faster, lower-latency, or better quality?

**Video quality:** Neither protocol inherently produces a better picture. Compare the *same source encode*, bitrate ladder, codec, resolution and playback conditions. A 1080p representation does not become 4K just because a different manifest is used.

**Startup and buffering:** Segment duration, CDN performance, player buffer policy, rendition switching and network stability matter more than the three-letter extension.

**Live latency:** Both have low-latency approaches, including LL-HLS and low-latency DASH. End-to-end delay depends on encoding, packaging, delivery and player configuration. Do not assume that DASH always has lower latency or that HLS always has higher latency.

**DRM:** Either delivery system may carry protected content. A compatible player may obtain a license for authorized playback; an ordinary downloader should not be expected to remove that protection.

## Which should you choose?

If you **publish streaming video**, begin with your audience and playback targets. HLS is a practical baseline for Apple-focused delivery. DASH may be useful across services and applications built around DASH players. Larger deployments often provide both manifests over compatible CMAF media to reach more devices. Run real playback tests before choosing a single format.

If you **watch a stream**, you usually do not need to pick: the website’s player selects what it supports. If a link fails, check whether the player understands its manifest and whether the referenced media URLs are still accessible.

If you **want an offline copy of a permitted video**, you need the *media segments*, not only the playlist or MPD text.

## How to play or save an HLS or DASH stream on Windows

For playback, use a player that explicitly supports the particular stream and codec. A browser cannot be assumed to play a raw `.mpd` or `.m3u8` URL without a suitable playback integration. For authorized, unprotected streams, technically confident users can try FFmpeg:

```bash
ffmpeg -i "https://example.com/path/playlist.m3u8" -c copy output.mp4
ffmpeg -i "https://example.com/path/manifest.mpd" -c copy output.mp4
```

These are examples, not guaranteed commands for every source. FFmpeg must be able to access the segments, and `-c copy` works only when the incoming streams are compatible with the output container. Some streams require a different container or re-encoding; signed URLs, separate tracks and server restrictions can also cause failure.

For a Windows application workflow, **Direct Link Downloader** supports eligible M3U8/HLS and MPD/DASH streams:

1. Copy the authorized M3U8/MPD URL, or a supported source page URL.
2. Open Direct Link Downloader, paste the link and let it analyze the available tracks or qualities.
3. Choose an available quality and output destination, then save the supported stream. Verify the resulting file in your player.

**[Get Direct Link Downloader for Windows on Microsoft Store](https://apps.microsoft.com/detail/9PJPP73G2DDX?cid=hlsdash_banner)**

## Common problems and limits

- **You saved a tiny `.m3u8` or `.mpd` file:** that is the manifest; it is not the assembled video.
- **A link works on the website but fails elsewhere:** cookies, authentication, signed URLs, CORS or required request headers may differ. A URL can also expire.
- **A stream plays but has no sound:** audio may use a separate track or an unsupported codec. Check player and track compatibility.
- **The desired quality is missing:** the manifest may offer only certain representations, and some are inaccessible or unsupported. A downloader cannot create quality beyond the source.
- **The stream is DRM-protected:** encryption and license requirements can prevent ordinary saving. Do not attempt to bypass access controls.

For HLS specifically, the free [M3U8 Inspector](/tools/m3u8-inspector/) can help you inspect a playlist's declared streams. It is not a DRM unlocker and cannot make expired or private links accessible.

## Frequently asked questions

### Is MPEG-DASH the same as HLS?

No. Both are HTTP adaptive streaming technologies, but they use different manifest structures and playback integrations. They may share CMAF media fragments when packaged compatibly.

### Is an MPD file a video?

No. Like an M3U8 playlist, an MPD describes media tracks and segments. Opening the text alone does not provide a finished MP4.

### Can I convert M3U8 to MPD by renaming it?

No. A valid conversion requires producing a DASH manifest with appropriate segment references and ensuring compatible packaging. A filename change does not do that.

### Does DASH always have less delay than HLS?

No. Both have low-latency configurations. You must compare actual glass-to-glass delay under similar conditions.

### Can both formats carry 4K video?

Yes, when the source offers a 4K representation and the player/device supports its codec and delivery profile. Neither protocol upgrades a lower-resolution source.

## The takeaway

**HLS and MPEG-DASH solve the same streaming problem with different manifests and playback ecosystems.** Look for `.m3u8` to recognize HLS and `.mpd` to recognize DASH; then check the actual tracks, segments, codec, authorization and player support. CMAF can allow both systems to share media, but it does not eliminate those compatibility checks.

If you regularly save supported, authorized streams on Windows, [Direct Link Downloader](https://apps.microsoft.com/detail/9PJPP73G2DDX) provides one workflow for eligible HLS and DASH sources.

*Only download content you own or are authorized to save. DRM-protected streams and access-control bypasses are not supported.*
