Dynamic Adaptive Streaming over HTTP (DASH)

alpharithms fallback 1

Dynamic Adaptive Streaming over HTTP (DASH) provides access to multiple versions of files encoded in levels of quality. DASH allows clients to dynamically request different quality versions of parts of a file based on changes in network conditions.

When connection bandwidth is high, a DASH client selects from higher-quality file versions. When the network is congested and speeds are slow, the client can request lower-quality versions of the file until network speeds improve.

How DASH Works

DASH, sometimes referred to as MPEG-DASH, is an HTTP protocol and, as such, can be implemented on any webserver. There are three main components to a DASH-enabled service:

  1. Different quality versions are stored for a file;
  2. The server hosts a manifest file indicating URLs for different quality levels;
  3. The Client uses a Rate Determination Algorithm to request the most appropriate quality level for a requested file.

Different Quality Versions

The foundational concept of DASH is that a client can request a smaller version of a file when their network connection is slower than normal. Or, in the case of many rural Internet customers—they can request a lower quality version of a file all the time.

This enables clients to dynamically alter the quality of files being transmitted in response to changing network conditions without causing frozen frames or excessive loss of data. For example, a client could start streaming a video in 4K resolution while the network is not congested, stream the next 5 minutes after a burst of network traffic at 720P, then return to the 4K stream after the network conditions settle. All this without the video pausing.

Manifest Files

When a media server using DASH stores a file, it encodes multiple bit-rate versions and maintains a manifest file that can appropriately direct requests based on network speed. By using the Accept-Range and Content-Length HTTP headers, a client can request a URL for a specific quality encoding as well as a specific sequence of bytes from that file version.

When a client first connects to a DASH server, it requests the manifest file for whatever data it’s preparing to stream. Based on client-side bandwidth probing, the client then requests whichever version of the file is best suited for the available transfer speeds. Below is an illustration of what a manifest file might look like:

dash manifest example
DASH manifest files map different segments of different file versions to URLs that can be requested via HTTP protocol

Rate Determination Algorithm

A DASH client uses a rate-determination algorithm (a.k.a. adaptive bitrate selection) to determine the most appropriate file quality to stream. Different DASH applications rely on different RDAs to ensure optimal bit-rate version requesting.

For a detailed look at how these algorithms work, the variables they use, and their relative strengths, read the paper A Practical Evaluation of Rate Adaptation Algorithms in HTTP-based Adaptive Streaming.

Zαck West
Full-Stack Software Engineer with 10+ years of experience. Expertise in developing distributed systems, implementing object-oriented models with a focus on semantic clarity, driving development with TDD, enhancing interfaces through thoughtful visual design, and developing deep learning agents.