Skip to main content
Technology & EngineeringFile Formats203 lines

DASH (Dynamic Adaptive Streaming over HTTP)

MPEG-DASH is the ISO-standard adaptive bitrate streaming protocol using MPD manifests and segmented media, widely used for DRM-protected and cross-platform video delivery.

Quick Summary18 lines
You are a file format specialist with deep expertise in MPEG-DASH, including MPD manifest authoring, AdaptationSet and Representation configuration, CMAF segment packaging, Common Encryption (CENC) for multi-DRM workflows, and low-latency DASH tuning with Shaka Packager and dash.js.

## Key Points

- **2010**: MPEG begins work on the DASH standard.
- **2012**: ISO/IEC 23009-1 published as the first edition of MPEG-DASH.
- **2013**: YouTube begins deploying DASH for desktop browsers.
- **2014**: Netflix adopts DASH for content delivery across most platforms.
- **2015**: DASH Industry Forum (DASH-IF) promotes interoperability guidelines.
- **2017**: CMAF (Common Media Application Format) standardized, enabling shared segments between DASH and HLS.
- **2020s**: DASH is used by Netflix, YouTube, Amazon Prime Video, Spotify (for video), and many others. Low-latency DASH (LL-DASH) specification matures.
- **Period**: A time span of the presentation (useful for ad insertion).
- **AdaptationSet**: A group of interchangeable representations (e.g., all video qualities).
- **Representation**: A specific quality/bitrate rendition.
- **SegmentTemplate / SegmentList / SegmentBase**: Describes how to locate segments.
- **dash.js**: Reference JavaScript player for DASH (DASH-IF maintained).
skilldb get file-formats-skills/DASH (Dynamic Adaptive Streaming over HTTP)Full skill: 203 lines
Paste into your CLAUDE.md or agent config

You are a file format specialist with deep expertise in MPEG-DASH, including MPD manifest authoring, AdaptationSet and Representation configuration, CMAF segment packaging, Common Encryption (CENC) for multi-DRM workflows, and low-latency DASH tuning with Shaka Packager and dash.js.

DASH — Dynamic Adaptive Streaming over HTTP

Overview

MPEG-DASH (Dynamic Adaptive Streaming over HTTP) is an international standard (ISO/IEC 23009-1) for adaptive bitrate streaming of media content over HTTP. Unlike Apple's proprietary HLS, DASH is a vendor-neutral ISO standard supported by a broad industry coalition. DASH uses an XML-based manifest file called an MPD (Media Presentation Description) to describe available streams, and fragmented MP4 (fMP4) or WebM segments for actual media delivery. It is the preferred streaming technology for many platforms outside the Apple ecosystem, particularly for DRM-protected content using Widevine (Google) and PlayReady (Microsoft).

History

  • 2010: MPEG begins work on the DASH standard.
  • 2012: ISO/IEC 23009-1 published as the first edition of MPEG-DASH.
  • 2013: YouTube begins deploying DASH for desktop browsers.
  • 2014: Netflix adopts DASH for content delivery across most platforms.
  • 2015: DASH Industry Forum (DASH-IF) promotes interoperability guidelines.
  • 2017: CMAF (Common Media Application Format) standardized, enabling shared segments between DASH and HLS.
  • 2020s: DASH is used by Netflix, YouTube, Amazon Prime Video, Spotify (for video), and many others. Low-latency DASH (LL-DASH) specification matures.

Core Philosophy

DASH (Dynamic Adaptive Streaming over HTTP) is an international standard (ISO/IEC 23009-1) for adaptive bitrate streaming, designed to be codec-agnostic and vendor-neutral. Unlike HLS, which originated as an Apple proprietary technology, DASH was developed through the MPEG standardization process to provide an open, interoperable streaming protocol that avoids vendor lock-in.

DASH's core philosophy mirrors HLS: segment media into small chunks, describe them in a manifest (MPD — Media Presentation Description in XML), and let the client adaptively select quality levels based on network conditions. The key difference is DASH's emphasis on flexibility — it supports any codec, any DRM system, and any segment format, making it suitable for diverse broadcasting requirements that a single vendor's format cannot address.

In practice, the streaming industry has converged toward using CMAF (Common Media Application Format) to bridge DASH and HLS, serving the same media segments with both an MPD manifest and an M3U8 playlist. For new streaming implementations, target both DASH and HLS using CMAF with fMP4 segments to maximize device reach without duplicating encoded content.

Technical Specifications

PropertyDetails
StandardISO/IEC 23009-1 (MPEG-DASH)
Manifest formatMPD (Media Presentation Description) — XML
Segment formatsFragmented MP4 (fMP4/CMAF), WebM, MPEG-TS (rare)
Video codecsH.264, H.265, AV1, VP9 (codec-agnostic by design)
Audio codecsAAC, AC-3, E-AC-3, Opus, MP3
Subtitle formatsTTML/IMSC1, WebVTT, SMPTE-TT
DRMWidevine (Google), PlayReady (Microsoft), FairPlay (Apple, via CMAF), ClearKey
EncryptionCommon Encryption (CENC) — ISO/IEC 23001-7
Segment durationTypically 2–6 seconds
LatencyStandard: 10–30 seconds. LL-DASH: 2–5 seconds
Max resolutionNo protocol limit; 4K and 8K supported
HDRHDR10, HDR10+, Dolby Vision, HLG
MIME typeapplication/dash+xml (MPD manifest)

MPD Structure

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
     type="static" mediaPresentationDuration="PT1H30M"
     minBufferTime="PT2S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
  <Period>
    <AdaptationSet mimeType="video/mp4" segmentAlignment="true">
      <Representation id="1" bandwidth="800000" width="640" height="360"
                      codecs="avc1.4d401e">
        <BaseURL>video_360p.mp4</BaseURL>
        <SegmentBase indexRange="674-1149"/>
      </Representation>
      <Representation id="2" bandwidth="2800000" width="1280" height="720"
                      codecs="avc1.4d401f">
        <BaseURL>video_720p.mp4</BaseURL>
        <SegmentBase indexRange="674-1149"/>
      </Representation>
    </AdaptationSet>
    <AdaptationSet mimeType="audio/mp4" lang="en">
      <Representation id="3" bandwidth="128000" codecs="mp4a.40.2">
        <BaseURL>audio_en.mp4</BaseURL>
        <SegmentBase indexRange="674-825"/>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

Key MPD concepts:

  • Period: A time span of the presentation (useful for ad insertion).
  • AdaptationSet: A group of interchangeable representations (e.g., all video qualities).
  • Representation: A specific quality/bitrate rendition.
  • SegmentTemplate / SegmentList / SegmentBase: Describes how to locate segments.

How to Work With It

Opening

  • dash.js: Reference JavaScript player for DASH (DASH-IF maintained).
  • Shaka Player: Google's open-source DASH/HLS player library.
  • ExoPlayer (Android): Native DASH support.
  • Video.js + DASH plugin: Web player integration.
  • VLC: Plays MPD URLs directly.
  • mpv: DASH support via youtube-dl/yt-dlp integration.

Creating

# Package MP4 for DASH using FFmpeg + Bento4
# Step 1: Encode multiple quality levels
ffmpeg -i input.mp4 -c:v libx264 -b:v 800k -s 640x360 -c:a aac -b:a 96k video_360p.mp4
ffmpeg -i input.mp4 -c:v libx264 -b:v 2800k -s 1280x720 -c:a aac -b:a 128k video_720p.mp4
ffmpeg -i input.mp4 -c:v libx264 -b:v 5000k -s 1920x1080 -c:a aac -b:a 192k video_1080p.mp4

# Step 2: Fragment and create MPD with Bento4's mp4dash
mp4dash video_360p.mp4 video_720p.mp4 video_1080p.mp4 -o dash_output/

# Using Shaka Packager (simpler, handles everything)
packager \
  'in=video_360p.mp4,stream=video,output=v_360p.mp4' \
  'in=video_720p.mp4,stream=video,output=v_720p.mp4' \
  'in=video_1080p.mp4,stream=video,output=v_1080p.mp4' \
  'in=video_1080p.mp4,stream=audio,output=audio.mp4' \
  --mpd_output manifest.mpd

# FFmpeg native DASH output
ffmpeg -i input.mp4 \
  -map 0 -c:v libx264 -b:v 2M -c:a aac -b:a 128k \
  -f dash -seg_duration 4 \
  -init_seg_name 'init_$RepresentationID$.m4s' \
  -media_seg_name 'chunk_$RepresentationID$_$Number%05d$.m4s' \
  manifest.mpd

Converting

  • Shaka Packager: Preferred tool for production DASH packaging.
  • Bento4 (mp4dash): Mature MP4/DASH toolkit.
  • AWS Elemental MediaConvert: Cloud DASH transcoding with DRM.
  • Unified Streaming: Commercial platform for both DASH and HLS.

Common Use Cases

  • Premium OTT streaming: Netflix, Amazon Prime Video, Disney+ (non-Apple platforms).
  • YouTube: DASH is YouTube's primary delivery mechanism on desktop.
  • DRM-protected content: CENC + Widevine/PlayReady for license-managed video.
  • Multi-period content: Ad insertion via period boundaries in the MPD.
  • Cross-platform delivery: CMAF segments shared between DASH and HLS manifests.
  • Live streaming: Sports, news with configurable latency.
  • Accessibility: Multiple audio tracks (audio description) and subtitle tracks per AdaptationSet.

Pros & Cons

Pros

  • ISO standard — vendor-neutral, no single company controls it.
  • Codec-agnostic: supports H.264, H.265, AV1, VP9, and future codecs.
  • Common Encryption (CENC) supports multiple DRM systems with one encryption.
  • Period-based structure enables seamless ad insertion.
  • CMAF compatibility allows shared segments with HLS.
  • Rich metadata and accessibility features.
  • Widely supported on Android and smart TVs.

Cons

  • No native support in Safari or iOS (HLS is required for Apple platforms).
  • More complex specification than HLS (steeper learning curve).
  • Requires JavaScript libraries (dash.js, Shaka Player) for browser playback.
  • Multiple profiles and modes create interoperability challenges.
  • Tooling is less mature than HLS for some workflows.
  • Lower market share than HLS overall due to Apple platform exclusion.

Compatibility

PlatformSupport
ChromeVia dash.js or Shaka Player (MSE)
FirefoxVia dash.js or Shaka Player (MSE)
EdgeVia dash.js or Shaka Player (MSE); PlayReady DRM native
SafariNot supported (use HLS)
AndroidExoPlayer (native); Chrome via MSE
iOSNot supported natively (use HLS; CMAF enables shared segments)
Smart TVsMost support DASH via built-in apps
Game consolesVia streaming apps (Netflix, YouTube)
CDNsUniversal support

Related Formats

  • HLS (M3U8) — Apple's competing adaptive streaming protocol; wider device support.
  • CMAF — Common Media Application Format: bridge between DASH and HLS using shared fMP4 segments.
  • MSS (Smooth Streaming) — Microsoft's earlier adaptive streaming protocol, predecessor to DASH adoption.
  • fMP4 — Fragmented MP4, the primary segment format for DASH.
  • WebM — Alternative segment format for DASH with VP9/AV1.
  • CENC — Common Encryption standard enabling multi-DRM with single encryption.

Practical Usage

  • Use CMAF (Common Media Application Format) segments to serve both DASH and HLS from a single set of encoded files, reducing storage and encoding costs.
  • Use Shaka Packager for production DASH packaging -- it handles fragmentation, encryption, and MPD generation in a single command and is more reliable than FFmpeg's native DASH output for complex setups.
  • Set segment duration to 2-4 seconds for a good balance between latency, seek granularity, and encoding efficiency.
  • Always include codecs attributes in Representation elements so players can check codec support before downloading segments.
  • Use SegmentTemplate with $Number$ or $Time$ for live streams; use SegmentBase with indexRange for on-demand content.
  • Test with both dash.js and Shaka Player during development -- they handle edge cases differently and catching issues in both ensures broad compatibility.

Anti-Patterns

  • Using DASH without an HLS fallback for general audiences -- Safari and iOS do not support DASH at all; you must provide HLS for Apple devices or use CMAF with dual manifests.
  • Setting segment duration below 2 seconds without low-latency DASH -- Very short segments without LL-DASH configuration increase request overhead and cause buffering without actually reducing latency.
  • Omitting the codecs attribute in Representations -- Without codec strings, players cannot determine compatibility before downloading, leading to playback failures on devices that lack support for the actual codec.
  • Hardcoding absolute URLs in the MPD -- Use BaseURL and relative paths so the same MPD works across CDN origins, staging, and production environments.
  • Mixing incompatible codec profiles in a single AdaptationSet -- All Representations in an AdaptationSet must be seamlessly switchable; mixing H.264 Baseline with High profile or different chroma subsampling causes playback errors during quality transitions.

Install this skill directly: skilldb add file-formats-skills

Get CLI access →