The MPD (Media Presentation Description) is defined by ISO/IEC 23009-1, which is sold
by ISO. MPEG publishes its XML schema freely, and this reference follows the schema of
the sixth edition, naming every element and attribute it defines. Durations are XML
Schema durations such as PT1H30M or PT2.002S; dates are
xs:dateTime values such as 2026-11-12T19:00:00Z.
The file
| Item | Value |
|---|---|
| Media type | application/dash+xml |
| Extension | .mpd |
| Root element | MPD in the namespace urn:mpeg:dash:schema:mpd:2011, which every edition keeps |
| Other namespaces | xlink: for remote elements; the schema allows elements and attributes from any other namespace, such as cenc: (urn:mpeg:cenc:2013) for protection data |
MPD attributes
| Attribute | Type | Default | Meaning |
|---|---|---|---|
id | string | Identifies the presentation. | |
profiles | comma-separated URIs, required | The profiles the MPD follows (below). | |
type | static, dynamic, list | static | static: on demand, fixed. dynamic: live, the MPD may change and segments become available over time. list (sixth edition): a list of linked MPDs played one after another. |
availabilityStartTime | dateTime | For dynamic: the wall-clock time the presentation timeline starts, from which segment availability is worked out. | |
availabilityEndTime | dateTime | When the segments stop being available. | |
publishTime | dateTime | When this version of the MPD was made; a newer MPD has a later time. | |
mediaPresentationDuration | duration | The length of the whole presentation. | |
minimumUpdatePeriod | duration | For dynamic: how often the MPD should be fetched again. Absent: it will not change. | |
minBufferTime | duration, required | With each representation’s bandwidth: how much must be buffered for smooth playback at that rate. | |
timeShiftBufferDepth | duration | For dynamic: how far back from the live point segments stay available. | |
suggestedPresentationDelay | duration | For dynamic: how far behind the live point players should play, so that they stay in step. | |
maxSegmentDuration | duration | The longest segment in the presentation. | |
maxSubsegmentDuration | duration | The longest subsegment. |
MPD children
In this order; only Period is required.
| Element | Count | Meaning |
|---|---|---|
ProgramInformation | any | Children Title, Source, Copyright (text); attributes lang, moreInformationURL. |
BaseURL | any | A base address for the segments; several give alternative servers. Attributes below. |
Location | any | Where to fetch the next version of the MPD. Attribute serviceLocation. |
PatchLocation | any | Where to fetch a patch that updates the MPD instead of the whole file. Attributes serviceLocation, ttl (seconds). |
RequestParam | any | Query parameters to add to requests, from the URL-parameters schema. |
ServiceDescription | any | Target latency, playback rates and quality; see Events and service description. |
InitializationSet | any | A set of media properties that holds across periods, so a player can set up its decoders once. Attributes id (required), inAllPeriods (default true), contentType, par, maxWidth, maxHeight, maxFrameRate, initialization, the xlink attributes, and the common attributes. |
InitializationGroup, InitializationPresentation | any | Lists of initialisation set IDs, with id (required), profiles, contentType. |
ContentProtection | any | Protection descriptors that apply everywhere; see Descriptors. |
Period | at least one | A span of the presentation; see Periods and representations. |
Metrics | any | Metrics to report: metrics (required, a list), Range children (starttime, duration) and Reporting descriptors (at least one). |
EssentialProperty, SupplementalProperty | any | Descriptors for the whole presentation. |
UTCTiming | any | How a player can get the server’s clock, so that live timing lines up (below). |
LeapSecondInformation | at most one | availabilityStartLeapOffset (required, whole seconds), nextAvailabilityStartLeapOffset, nextLeapChangeTime: the leap-second offset that applies to the availability start time, and the next one and when it takes effect. |
ContentSteering | at most one | The URL of a steering server that picks the CDN; attributes defaultServiceLocation, queryBeforeStart (default false), clientRequirement (default true). |
BaseURL attribute | Meaning |
|---|---|
serviceLocation | Names the server or CDN, so related base URLs at other levels can be matched. |
byteRange | A template that turns segment byte ranges into addresses. |
availabilityTimeOffset | How many seconds earlier than normal segments are available from this server (used for low latency). |
availabilityTimeComplete | false when segments may still be growing when first requested. |
timeShiftBufferDepth | A time-shift depth for this server. |
rangeAccess | Boolean, default false. Its use is defined in the standard, not in the schema, and is not described here. |
Profiles
| Profile URI | For |
|---|---|
urn:mpeg:dash:profile:full:2011 | Everything in the standard |
urn:mpeg:dash:profile:isoff-on-demand:2011 | On-demand ISO base media files: one file per representation, indexed by a sidx box, with SegmentBase |
urn:mpeg:dash:profile:isoff-live:2011 | Live and on-demand ISO media segments addressed with SegmentTemplate |
urn:mpeg:dash:profile:isoff-main:2011 | ISO media with any addressing |
urn:mpeg:dash:profile:mp2t-main:2011 | MPEG-2 transport stream segments |
urn:mpeg:dash:profile:mp2t-simple:2011 | A simpler subset of MPEG-2 TS main |
urn:3GPP:PSS:profile:DASH10 | 3GPP DASH, Release 10 (TS 26.247) |
urn:dvb:dash:profile:dvb-dash:2014 | DVB-DASH (ETSI TS 103 285), also used by HbbTV 2.0 |
urn:hbbtv:dash:profile:isoff-live:2012 | HbbTV 1.5 |
The same profiles attribute may also be written on adaptation sets and
representations, to say which profile each part follows.
UTC timing schemes
A UTCTiming element is a descriptor: its schemeIdUri says how
to get the time and its value where.
schemeIdUri | value |
|---|---|
urn:mpeg:dash:utc:http-xsdate:2014 | A URL that returns the time as an xs:dateTime |
urn:mpeg:dash:utc:http-iso:2014 | A URL that returns the time in ISO 8601 format |
urn:mpeg:dash:utc:http-ntp:2014 | A URL that returns an NTP timestamp |
urn:mpeg:dash:utc:http-head:2014 | A URL whose HTTP Date header gives the time |
urn:mpeg:dash:utc:ntp:2014, urn:mpeg:dash:utc:sntp:2014 | NTP or SNTP servers |
urn:mpeg:dash:utc:direct:2014 | The time itself, written in the MPD |
Worked example
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
type="dynamic"
availabilityStartTime="2026-11-12T18:00:00Z"
publishTime="2026-11-12T19:30:00Z"
minimumUpdatePeriod="PT10S"
minBufferTime="PT2S"
timeShiftBufferDepth="PT5M"
suggestedPresentationDelay="PT6S"
maxSegmentDuration="PT2S">
<ProgramInformation lang="en"><Title>News channel</Title></ProgramInformation>
<BaseURL>https://cdn.example.com/live/</BaseURL>
<Period id="p0" start="PT0S"> … </Period>
<UTCTiming schemeIdUri="urn:mpeg:dash:utc:http-xsdate:2014"
value="https://time.example.com/now"/>
</MPD>