Why DASH Is Poised to Become the Next Standard for Video Streaming
This article explains the fundamentals of MPEG‑DASH, covering its standard definition, MPD structure, segment formats, example XML, playback capabilities, live streaming support, and the advantages and drawbacks that make DASH a leading candidate for future video streaming solutions.
Background
Recently Douyu's VOD platform is being renovated, planning to switch the video format entirely to DASH (previously HLS). Bilibili VOD in China already uses DASH and provides an introduction: "Why we use DASH". Major overseas platforms like YouTube, Netflix, and Hulu also use DASH, and DASH is expected to become a mainstream format.
What is DASH
DASH, also called MPEG‑DASH (Dynamic Adaptive Streaming over HTTP), is an ISO/IEC 23009-1 international standard independent of vendors. It delivers video at dynamic bitrates by segmenting content into short fragments described by a Media Presentation Description (MPD). Each fragment has multiple bitrate options, and the client selects the appropriate bitrate based on network conditions, allowing seamless switching.
Detailed DASH Format
DASH stream URLs usually end with .mpd, which is an XML file describing the stream, similar to HLS's .m3u8. The basic structure is shown below:
An example MPD file is shown below (compare with the diagram):
<?xml version="1.0" encoding="UTF-8"?>
<!--Generated with https://github.com/google/shaka-packager version v2.5.1-9f11077-release-->
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" profiles="urn:mpeg:dash:profile:isoff-live:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT114.5999984741211S">
<Period id="0">
<AdaptationSet id="0" contentType="audio" segmentAlignment="true">
<Representation id="0" bandwidth="52672" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="48000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
<SegmentTemplate timescale="48000" initialization="audio/init.mp4" media="audio/$Number$.m4s" startNumber="1">
<SegmentTimeline>
<S t="48" d="307298"/>
<S t="307346" d="307200" r="15"/>
<S t="5222546" d="275505"/>
</SegmentTimeline>
</SegmentTemplate>
</Representation>
</AdaptationSet>
<AdaptationSet id="1" contentType="video" maxWidth="2560" maxHeight="1440" frameRate="25000/1000" segmentAlignment="true" par="16:9">
<Representation id="1" bandwidth="3689452" codecs="avc1.640028" mimeType="video/mp4" sar="1:1" width="1920" height="1080">
<SegmentTemplate timescale="25000" initialization="video4/init.mp4" media="video4/$Number$.m4s" startNumber="1" duration="160000"/>
</Representation>
<Representation id="2" bandwidth="1562835" codecs="avc1.64001f" mimeType="video/mp4" sar="1:1" width="1280" height="720">
<SegmentTemplate timescale="25000" initialization="video3/init.mp4" media="video3/$Number$.m4s" startNumber="1" duration="160000"/>
</Representation>
<Representation id="3" bandwidth="367288" codecs="avc1.640015" mimeType="video/mp4" sar="1:1" width="426" height="240">
<SegmentTemplate timescale="25000" initialization="video1/init.mp4" media="video1/$Number$.m4s" startNumber="1" duration="160000"/>
</Representation>
<Representation id="4" bandwidth="770115" codecs="avc1.64001e" mimeType="video/mp4" sar="1:1" width="852" height="480">
<SegmentTemplate timescale="25000" initialization="video2/init.mp4" media="video2/$Number$.m4s" startNumber="1" duration="160000"/>
</Representation>
<Representation id="5" bandwidth="4579255" codecs="avc1.640032" mimeType="video/mp4" sar="1:1" width="2560" height="1440">
<SegmentTemplate timescale="25000" initialization="video5/init.mp4" media="video5/$Number$.m4s" startNumber="1" duration="160000"/>
</Representation>
</AdaptationSet>
</Period>
</MPD>The MPD standard is flexible; this example illustrates one possible configuration:
Only one video period.
Two AdaptationSet elements: one for audio, one for video.
Audio is AAC encoded, single bitrate, split into 18 fragments of about 6.4 s each.
Video is H.264 encoded, five bitrate variants, also 18 fragments of about 6.4 s each.
In the SegmentTimeline tag, three S sub‑tags appear; t is start time, d is duration, r is repeat count. The total fragment count is 1 + 1 + 15 + 1 = 18, each lasting 6.4 s.
From the MPD, a player can implement various playback scenarios such as audio‑only, multiple resolutions, adaptive bitrate switching, and seamless audio track switching.
DASH Segment Format
DASH supports several segment formats, including the HLS‑common .ts, but the most common is .m4s (essentially MP4). Segments can be delivered as multiple files or as a single file using byte‑range requests. Single‑file segments are more efficient for transmission and caching.
A typical single‑file m4s structure consists of boxes:
aligned(8) class Box (unsigned int(32) boxtype, optional unsigned int(8)[16] extended_type) { unsigned int(32) size; unsigned int(32) type = boxtype; if (size==1) { unsigned int(64) largesize; } else if (size==0) { // box extends to end of file } if (boxtype=='uuid') { unsigned int(8)[16] usertype = extended_type; } }Key boxes include:
ftyp – file header.
moov – contains codec, resolution, sample rate, SPS, PPS, etc.
sidx – Segment Index Box, provides index information for each fragment.
ssix – Subsegment Index Box (usually not needed).
moof – media fragment header, paired with mdat.
mdat – actual media data (e.g., H.264 NAL units).
A pair of moof and mdat constitutes a DASH segment. By parsing the MP4 header, a player can determine each fragment’s duration and byte range for efficient random access.
Typical player processing flow for DASH is illustrated below:
DASH Live Streaming
DASH also supports live streams; the MPD contains type="dynamic" indicating a live presentation. Live MPDs include additional attributes that guide the player’s handling of live content.
Details of each field can be found in the referenced documentation.
Advantages and Disadvantages of DASH
Advantages
Supports adaptive bitrate.
Audio‑video separation, multiple audio tracks, multiple bitrates.
Broad codec and container support.
Flexible, extensible MPD with small file size.
International standard, open source.
Disadvantages
The standard is relatively new and not yet universally supported.
References
[1]Why we use DASH: https://www.bilibili.com/read/cv855111/ [2] Understanding and configuring a Dynamic MPD (MPEG‑DASH): https://docs.unified-streaming.com/documentation/live/configure-dynamic-mpd.html
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Douyu Streaming
Official account of Douyu Streaming Development Department, sharing audio and video technology best practices.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
