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.
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 linesYou 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
| Property | Details |
|---|---|
| Standard | ISO/IEC 23009-1 (MPEG-DASH) |
| Manifest format | MPD (Media Presentation Description) — XML |
| Segment formats | Fragmented MP4 (fMP4/CMAF), WebM, MPEG-TS (rare) |
| Video codecs | H.264, H.265, AV1, VP9 (codec-agnostic by design) |
| Audio codecs | AAC, AC-3, E-AC-3, Opus, MP3 |
| Subtitle formats | TTML/IMSC1, WebVTT, SMPTE-TT |
| DRM | Widevine (Google), PlayReady (Microsoft), FairPlay (Apple, via CMAF), ClearKey |
| Encryption | Common Encryption (CENC) — ISO/IEC 23001-7 |
| Segment duration | Typically 2–6 seconds |
| Latency | Standard: 10–30 seconds. LL-DASH: 2–5 seconds |
| Max resolution | No protocol limit; 4K and 8K supported |
| HDR | HDR10, HDR10+, Dolby Vision, HLG |
| MIME type | application/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
| Platform | Support |
|---|---|
| Chrome | Via dash.js or Shaka Player (MSE) |
| Firefox | Via dash.js or Shaka Player (MSE) |
| Edge | Via dash.js or Shaka Player (MSE); PlayReady DRM native |
| Safari | Not supported (use HLS) |
| Android | ExoPlayer (native); Chrome via MSE |
| iOS | Not supported natively (use HLS; CMAF enables shared segments) |
| Smart TVs | Most support DASH via built-in apps |
| Game consoles | Via streaming apps (Netflix, YouTube) |
| CDNs | Universal 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
codecsattributes in Representation elements so players can check codec support before downloading segments. - Use
SegmentTemplatewith$Number$or$Time$for live streams; useSegmentBasewithindexRangefor 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
codecsattribute 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
BaseURLand 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
Related Skills
3MF 3D Manufacturing Format
The 3MF file format — the modern replacement for STL in 3D printing, supporting colors, materials, multi-object assemblies, and precise manufacturing data in a single package.
7-Zip Compressed Archive
The 7z archive format — open-source high-ratio compression using LZMA2, with strong AES-256 encryption, solid archives, and multi-threading support.
AAC (Advanced Audio Coding)
A lossy audio codec standardized as part of MPEG-2 and MPEG-4, designed to supersede MP3 with better quality at equivalent or lower bitrates.
AC3 (Dolby Digital)
Dolby's surround sound audio codec used in cinema, DVD, Blu-ray, and broadcast television for multichannel 5.1 audio delivery.
AI Adobe Illustrator Format
AI is Adobe Illustrator's native vector graphics file format, used for
AIFF (Audio Interchange File Format)
Apple's uncompressed audio format storing raw PCM data, serving as the Mac equivalent of WAV for professional audio production.