MPEG-DASH is one of the most popular video-streaming protocols and is widely used to deliver media either via Video on Demand (VOD) or Live Streaming and to various end-user devices, including smartphones, tablets, SmartTVs, gaming consoles, and more.
In this article, we take a look at the fundamentals of MPEG-DASH, it’s history, most important features, and more.
Here is how this article is structured –
- A quick introduction to ABR Streaming
- What is MPEG-DASH?
- History of MPEG-DASH.
- Features of MPEG-DASH
- How to Create a DASH stream?
- Example of a DASH MPD
Interested in MPEG-DASH and video streaming? You’ll be interested in these articles for sure!
With that outline, let’s start learning, shall we?
First off, what is ABR Streaming?
Considering that DASH stands for “Dynamic Adaptive Streaming over HTTP”, it’s important that we learn about Adaptive Bitrate Streaming – this will help us get a better understanding of the “why” and “what” of DASH streaming.
If you understand ABR streaming well, then MPEG-DASH simply describes the mechanics of ABR – that’s all. No magic here 🙂
ABR stands for Adaptive Bit-Rate streaming. It is the process by which the quality and bitrate of video delivery are adaptively varied to match the bandwidth conditions and ensure smooth delivery over the internet.
In ABR streaming, a video is transcoded into multiple resolutions and bitrate combinations and each is referred to as a “rendition”. A collection of renditions is a bitrate ladder.
Example of a bitrate ladder –
- 1080p 5.0 mbps
- 720p 4.0 mbps
- 640p 3.2 mbps
- 480p 2.0 mbps
- 270p 1 mbps
Let’s assume that the video has been encoded at the bitrate ladder shown above. When the player starts to playback the video, it senses the available bandwidth and let’s assume its 20 mbps. This is much greater than the highest bitrate viz. 5 mbps. So, the player safely downloads the highest bitrate, 5 mbps for the first segment/chunk (perhaps, 6 seconds long). Then the player senses the bandwidth again and if it is still very high, it asks for the highest bandwidth again.
If the bandwidth suddenly drops to 5 mbps, then the player will probably request for the 4 mbps chunk from the server because it is risky to ask for the 5 mbps chunk. It then receives and plays back the 4 mbps chunk.
This process continues throughout the video. This is how the bitrate and quality are adaptively varied to adapt to the varying bandwidth conditions. With that introduction to ABR, let’s now see how MPEG-DASH facilitates ABR streaming.
Note: Take a look at our deep dive into ABR streaming for more details.
What is MPEG-DASH (Dynamic Adaptive Streaming Over HTTP)?
As we learned in the previous section, ABR or Adaptive Bitrate Streaming is used for dynamically varying the video bitrate and quality during streaming in response to the changes in bandwidth and buffer fullness at the player.
However, it would be very hard to do this if the entire file was being streamed in one go. Imagine downloading a video file from Dropbox, S3, or Google Drive. It is a single file and will be treated as any other file – text, data, etc. In such situations, there is no way for the player or downloading client to pause the download halfway through and switch to a different rendition – right? Single, monolithic files are not set up for such use cases.
For dynamically switching between files at regular intervals, the file needs to be processed and broken up into small pieces. And, each of these small pieces should be capable of being streamed independently. Additionally, there needs to be a mechanism in place to facilitate this adaptive, dynamic downloading.
To address these issues and to put in place an industry-specification for ABR streaming, the MPEG body issued a CFP in 2009 for an HTTP-based Streaming Standard. With the coordination of several companies and industry organizations, the MPEG-DASH standard was created and published in April 2012. Since then, it has been revised in 2019 as MPEG-DASH ISO/IEC 23009-1:2019.
How Does MPEG-DASH Work?
As its name suggests, DASH or Dynamic Adaptive Streaming over HTTP works on the principles of ABR or Adaptive Bitrate Streaming. In a nutshell, this is how MPEG-DASH works –
- A set of encodes (or renditions) of a movie is packaged by a MPEG-DASH packaging service or software. The packager splits each rendition into small pieces or chunks of a specified duration (e.g., 2 seconds or 4 seconds long).
- The packager also records how it split the videos and the order in which they are to be delivered into a text file called an MPD or a manifest.
- The packaged video and the manifest are stored on an origin server waiting to be delivered to a player, usually via a CDN (content delivery network).
- At the other end, there is a MPEG-DASH compliant player with an ABR-streaming engine built into it.
- When the user presses play, the app or video player requests the video’s MPD file. After receiving the MPD, the player parses it to understand how to play the video.
- The player then starts requesting the video’s chunks in the pre-defined order, decodes the chunks, and displays the video to the user.
- The player also continuously monitors the bandwidth conditions. Depending on the available bandwidth, the player chooses one of the bitrates advertised in the MPEG-DASH mpd and requests the CDN to send the next chunk of video from that variant.
This process continues till the end of the video playback session – either the movie comes to an end or the user stops watching it.
To recap how MPEG-DASH works in a nutshell,
- There is an MPD file that describes how the movie is split into pieces, arranged, and will be delivered.
- The packaged videos are stored on a server and generally served via a CDN.
- The video player downloads the MPD first, understands the mechanics of serving the movie, senses the available bandwidth, and then starts the playback session.
- The video player requests chunks from one of the movie’s bitrate variants depending on its buffer size and available bandwidth.
- Thus, by continuously sensing the bandwidth conditions and buffer levels, a player can adaptively stream content and provide a good user experience.
How to create MPEG-DASH streams
If you have a single video or several renditions of the same video, you can create an MPEG-DASH compatible stream. This process is called packaging and is performed by specialized software called packagers.
There are many packagers that can perform this and some of the most popular ones are –
They are all command-line driven and the basic procedure is to point the packager at the video file(s), specify the DASH parameters (live, VOD, segmentlist, segment-timeline, etc.), and the packager will produce DASH-compliant streams along with a DASH MPD file.
Note: In future articles, we will do deep dives into all these packagers and show you exactly how to produce MPEG-DASH streams.
Example of a MPEG-DASH Manifest/mpd
Below is a simple example of an MPEG-DASH manifest/MPD used to delivery a video via the DASH protocol to a DASH-compliant player.
To learn more about MPEG-DASH MPDs, how they are structured and used, please see our guide to the structure of MPEG-DASH MPD files.
<!-- MPD file Generated with GPAC version 0.5.1-DEV-rev5379 on 2014-09-10T13:23:18Z --> <MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H9M56.46S" profiles="urn:mpeg:dash:profile:isoff-live:2011"> <ProgramInformation moreInformationURL="http://gpac.sourceforge.net"> <Title>dashed/BigBuckBunny_2s_simple_2014_05_09.mpd generated by GPAC</Title> </ProgramInformation> <Period duration="PT0H9M56.46S"> <AdaptationSet segmentAlignment="true" group="1" maxWidth="480" maxHeight="360" maxFrameRate="24" par="4:3"> <SegmentTemplate timescale="96" media="bunny_$Bandwidth$bps/BigBuckBunny_2s$Number$.m4s" startNumber="1" duration="192" initialization="bunny_$Bandwidth$bps/BigBuckBunny_2s_init.mp4"/> <Representation id="854x480 595.0kbps" mimeType="video/mp4" codecs="avc1.42c01e" width="854" height="480" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="595491"/> <Representation id="1280x720 1.5Mbps" mimeType="video/mp4" codecs="avc1.42c01f" width="1280" height="720" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="1546902"/> <Representation id="1920x1080 2.1Mbps" mimeType="video/mp4" codecs="avc1.42c032" width="1920" height="1080" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="2133691"/> </AdaptationSet> </Period> </MPD>
For a more exhaustive list of DASH mpds, go here on OTTVerse.com.
Features of MPEG-DASH
MPEG-DASH has a lot of features that make it attractive to video streaming providers. Let’s take a look at a few of them now.
- MPEG-DASH is widely supported by player companies and is in active development by an international community. Continuous bug fixes, improvements, and features make MPEG-DASH an excellent choice for video streaming.
- MPEG-DASH supports both VOD (on-demand) and Live video streaming.
- It is supported by the Android ecosystem, which is very important for streaming to Android phones, TVs, and other devices. Considering that Apple iPhones and Apple TVs are quite expensive to own in large parts of the world, having a good alternative to HLS is important.
- MPEG-DASH is codec-agnostic and works just fine with H.264/AVC, AV1, or other codecs.
- MPEG-DASH supports both the MPEG-TS (Transport Stream) and Fragmented MP4 container formats.
- MPEG-DASH supports ad insertion – both client-side and server-side ad insertion. (Unsure of the difference between CSAI and SSAI – read this.)
Which Players Support MPEG-DASH?
Many players support MPEG-DASH and cater to a variety of applications and devices. Some players are built to play MPEG-DASH videos on web browsers (HTML5), Android Exoplayer, Roku, SmartTV via native apps or web browsers, and more.
Some examples of MPEG-DASH compliant players are –
- VideoJS with an MPEG-DASH plugin or VideoJS7 with native DASH playback.
- Radiant Media Player
- Android Exoplayer
Here is an example of a free, open-source, MPEG-DASH compliant web player.
DASH.js Reference Player (Link)
The DASH.js reference player is one of the best MPEG-DASH online players to play your mpd files for free, in my opinion. It comes with a very simple-to-use interface and provides you with a ton of handy and critical information to debug your streams.
It provides handy information such as buffer levels, tells you which renditions are being used, gives you a timeline of all the statistics, and much more! It is powered by the open-source dash.js player and is continually updated to the latest version so that you can always use the latest to debug your mpd streams.
For a long list of HTML5 players that are capable of MPEG-DASH video playback, please visit this article on OTTVerse.com.
I hope this article helped you understand MPEG-DASH streaming better. We covered the basics of ABR streaming, the history of MPEG-DASH, how it works, examples of MPD files, DASH-compliant video players, more. In future articles of this series on MPEG-DASH, we will cover the basics of MPDs, and how to package MPEG-DASH using packagers like Shaka, mp4box, and others.
Note: if you are interested in HLS (HTTP Live Streaming), then do check out these articles on OTTVerse.com
- How does HLS (HTTP Live Streaming) work?
- DRM in HLS using Apple FairPlay
- Examples of free-to-use HLS (m3u8) Playlists (VOD, Live)
- List of free HTML5 online HLS m3u8 Players
Until next time, take care and happy streaming!