Part 3 · Fundamentals

HLS, DASH, ABR and the buffer budget

Learn to: reason about manifest choices, bitrate and buffer consumption.

Prerequisites: 02-browser-pipeline

Manifest and transfer budget

The two formats express different manifest structures but both expose encoded alternatives. The arithmetic is a hypothetical constant-throughput example.
The two formats express different manifest structures but both expose encoded alternatives. The arithmetic is a hypothetical constant-throughput example. [S21] [S25] [S26]

On a narrow screen, swipe the diagram horizontally to keep its labels readable.

Mental model verified

HLS exposes playlists; DASH exposes an MPD with periods, adaptation sets and representations. The client obtains manifests and segments, estimates conditions, and decides the next rendition. A rendition is an encoded quality option, not a CSS size.

[S21] [S25]

Worked budget synthesis

Toy calculation: a two-second segment encoded at 1 Mbps contains roughly 2 Mbit. At steady 2 Mbps throughput it takes roughly one second to transfer, excluding overhead. At 0.5 Mbps it takes roughly four seconds; repeated transfers can drain the buffer. Real segments vary in size and requests have latency.

[S26]

Decision and pitfall verified

Let automatic adaptation be the baseline. A forced high resolution can stall; a giant buffer can waste transfer when users leave. DASH’s documented default combines throughput and BOLA rules; this is an implementation choice, not the definition of ABR.

[S26]

Further improvement synthesis

Measure startup, stalls and quality for representative networks. Tune one constraint at a time: initial quality, buffer, player-size cap or live latency target. A low-latency flag cannot repair an origin that never produces promptly available chunks.

[S23] [S28] [S35]
Keep this: ABR trades quality against the risk of draining the playback buffer.
Check yourself: Why can a lower rendition improve viewing?

It can download faster than playback consumes the buffered duration, reducing stall risk at the cost of visual detail.

Sources & further reading

  1. [S21] HLS.js README

    HLS.js maintainers · official documentation · accessed 2026-10-10 · current docs

    Supports: MSE-based HLS, native fallback, browser codec constraints and CORS on all HLS resources.

    Read this page to inspect the API and assumptions behind the cited explanation.

  2. [S23] Hls class API

    HLS.js maintainers · official documentation · accessed 2026-10-10 · current docs

    Supports: One media element per Hls instance, destroy, level caps, buffer and bandwidth introspection.

    Read this page to inspect the API and assumptions behind the cited explanation.

  3. [S25] dash.js architecture

    DASH Industry Forum · official documentation · accessed 2026-10-10 · current docs

    Supports: core/dash/streaming layers, per-period/per-track processing and dependency direction.

    Read this page to inspect the API and assumptions behind the cited explanation.

  4. [S26] dash.js ABR settings

    DASH Industry Forum · official documentation · accessed 2026-10-10 · current docs

    Supports: Default throughput and BOLA rules and configurable ABR behavior.

    Read this page to inspect the API and assumptions behind the cited explanation.

  5. [S28] dash.js low latency

    DASH Industry Forum · official documentation · accessed 2026-10-10 · current docs

    Supports: CMAF chunks, latency targets, catchup and low-latency playback trade-offs.

    Read this page to inspect the API and assumptions behind the cited explanation.

  6. [S35] Mux Data metric definitions

    Mux · official documentation · accessed 2026-10-10

    Supports: Startup time, rebuffering, errors and experience metrics.

    Read this page to inspect the API and assumptions behind the cited explanation.