Glossary entry · Manifest format

DASH MPD (MPEG-DASH Manifest)

The XML manifest behind MPEG-DASH adaptive streaming. An MPD file describes everything a player needs to know about a presentation: timeline, qualities, audio tracks, subtitles, and DRM.

Definition

An MPD file is an XML document defined by the ISO/IEC 23009-1 standard, also known as MPEG-DASH (Dynamic Adaptive Streaming over HTTP). The file is typically served with the .mpd extension and the application/dash+xml MIME type. The MPD does not contain media bytes. It describes how a player should request media segments from a regular HTTP server.

MPEG-DASH was developed as an open standard alternative to HLS. The protocol was published in 2012 and has since become the dominant streaming protocol on non-Apple platforms. YouTube, Netflix, Amazon Prime Video, and most premium streaming services serve DASH content to web and Android clients while serving HLS to iOS clients.

Structure: Period, AdaptationSet, Representation, Segment

An MPD uses a strict four-level hierarchy. Each level expresses a specific concern.

A skeletal MPD looks like this:

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" type="static"
     mediaPresentationDuration="PT10M">
  <Period>
    <AdaptationSet mimeType="video/mp4" codecs="avc1.640028">
      <Representation id="1080p" bandwidth="4500000"
                      width="1920" height="1080">
        <SegmentTemplate media="1080p/seg-$Number$.m4s"
                         initialization="1080p/init.mp4"
                         startNumber="1" duration="6" timescale="1"/>
      </Representation>
    </AdaptationSet>
    <AdaptationSet mimeType="audio/mp4" codecs="mp4a.40.2" lang="en">
      <Representation id="audio-en" bandwidth="128000">
        <SegmentTemplate media="audio-en/seg-$Number$.m4s"
                         initialization="audio-en/init.mp4"
                         startNumber="1" duration="6" timescale="1"/>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

The video and audio AdaptationSets are independent. The player picks one Representation in each and downloads them in parallel, which is why DASH content has separate video and audio segment files. HLS historically muxed audio into the same TS segment but moves toward separate streams in modern fMP4 deployments.

DASH vs HLS

The two protocols solve the same problem. The differences are mostly historical and tactical.

If you maintain a streaming service today, the realistic answer is to publish both formats from a shared set of fMP4 segments using CMAF. Apple platforms get HLS playlists; everyone else gets a DASH MPD. The same encoded segments are reused.

DRM and DASH (Widevine, PlayReady)

DASH is the de facto streaming format for DRM-protected content on the open web because the major web browsers ship Widevine. The MPD references DRM through one or more ContentProtection elements inside each AdaptationSet:

<ContentProtection
  schemeIdUri="urn:mpeg:dash:mp4protection:2011"
  value="cenc"
  cenc:default_KID="abcdef01-2345-6789-abcd-ef0123456789"/>
<ContentProtection
  schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
  <cenc:pssh>...base64 PSSH box...</cenc:pssh>
</ContentProtection>

The schemeIdUri identifies the DRM system. Widevine, PlayReady, and FairPlay each have their own UUID. The actual encryption is Common Encryption (CENC), which means the segments themselves are encrypted bytes regardless of which DRM ecosystem will deliver the key. Consumer tools cannot bypass Widevine or PlayReady. The key exchange happens in a hardware-backed secure environment on the device.

If a DASH stream is not protected by a recognized DRM, the segments are usually plain fMP4 and a tool that can speak DASH (like yt-dlp, N_m3u8DL-RE, or Vidora) can download and remux them into a single MP4. Our deep-dive DASH MPD downloader guide covers the exact workflows for both video and audio.

Common manifest patterns

You will run into three families of DASH manifests in the wild.

Knowing which pattern you face matters when scripting a downloader: a static MPD can be fully resolved in one pass, while a dynamic MPD needs a polling loop until the live event ends. Our DASH MPD analyzer shows you which pattern a given manifest uses without leaving the browser.

Related reading