Skip to main content
← Back to Insights

Adaptive Video Streaming Explained: How Netflix Streams One Chunk at a Time

· 9 min read
Jitender Sharma
Advisor & Technical Leader · Enterprise AI & Platforms

Adaptive streaming ladder of quality chunks with player picking the next segment by bandwidth

When you watch Netflix, picture quality can rise or fall without stopping playback. That is not magic. It is architecture.

Netflix does not stream one large video file. It streams thousands of tiny segments while the player continuously adapts to your network. This explainer walks that design: why one-file download fails, how chunks and quality ladders work, what a manifest is, how ABR chooses the next segment, and why buffering, seeking, and CDN caching all depend on independent objects.

THE CLAIM

Adaptive streaming is not "download the movie." It is a loop that repeatedly answers: which version of the next few seconds can I fetch before my buffer runs out? Chunks, ladders, manifests, and edge caches exist so that question stays cheap and continuous.

The bottom line first

  • One big file fails at startup, seek, and mid-stream network change.
  • Segments (~few seconds) are the unit of request, cache, and quality switch.
  • Aligned ladders (4K / 1080p / 720p / …) share the same timeline; only bitrate changes.
  • Manifest lists rungs, codecs, durations, and chunk URLs before play starts.
  • ABR picks the next chunk from measured bandwidth, latency, loss, and buffer.
  • CDN caches chunks as objects; popular segments win edge storage. See CDN Under the Hood.

Traditional video download

Imagine downloading an entire movie as one file.

One-file mental model: download Movie.mp4 as a single 10 GB file


Problems include:

  • Slow startup (wait for a large prefix, or the whole file)
  • Difficult seeking (scan or re-download large ranges)
  • Buffering when the network slows mid-transfer
  • No way to change quality dynamically without restarting

Modern streaming solves these by changing the unit of transfer from "the title" to "the next few seconds."

TAKEAWAY

A single monolithic file couples startup, seek, quality, and network into one failure mode.


Segment-based streaming

Every encoded version is split into small segments (chunks).

Timeline as chunks: a movie split into sequential segments from Chunk 1 through Chunk 1800


Each chunk typically covers on the order of a few seconds of playback (often around four seconds in teaching examples; real ladders vary by codec and recipe).

Instead of requesting one large file, the player requests one chunk at a time (often several in parallel into a buffer).

TAKEAWAY

The chunk is the atomic unit of streaming: fetch, cache, and switch quality at chunk boundaries.


Multiple quality levels

Netflix (and ABR systems generally) create identical time segments for every resolution on the ladder.

Aligned ladder for the same time windows
0-4 seconds

4K Chunk 1
1080p Chunk 1
720p Chunk 1
480p Chunk 1

4-8 seconds

4K Chunk 2
1080p Chunk 2
720p Chunk 2
480p Chunk 2

Only the quality (bitrate / resolution / codec rung) changes. The playback timeline stays aligned so the player can switch rungs between chunks without jumping in story time.


TAKEAWAY

Ladders are time-aligned menus. Adaptation changes which row you order for the next window, not where you are in the movie.


Manifest file

Before fetching video, the player downloads a manifest (DASH .mpd, HLS playlist, or vendor equivalent).

Simplified manifest shape
Movie.mpd

4K
Chunk1
Chunk2
Chunk3

1080p
Chunk1
Chunk2
Chunk3

720p
Chunk1
Chunk2
Chunk3

The manifest describes:

  • Available resolutions / bitrate rungs
  • Codecs and other constraints
  • Segment duration
  • URLs (or URL templates) for every chunk

The player uses that map to decide what is legal to request before ABR decides what to request next.

TAKEAWAY

No manifest, no menu. ABR only chooses among options the manifest declares.


Adaptive bitrate streaming (ABR)

The player continuously measures signals such as:

  • Download speed (throughput)
  • Latency
  • Packet loss / rebuffer risk
  • Available buffer (seconds of media already on hand)

It then chooses the best version of the next chunk (sometimes with hysteresis so quality does not thrash).

ABR adapting as bandwidth changes
Bandwidth = 100 Mbps
Request: 4K Chunk 1, 4K Chunk 2, 4K Chunk 3

Bandwidth = 8 Mbps
Request: 1080p Chunk 4, 720p Chunk 5, 720p Chunk 6

Bandwidth = 60 Mbps
Request: 1080p Chunk 7, 4K Chunk 8, 4K Chunk 9

Playback continues because only future chunks change quality. Already-decoded frames in the buffer keep playing.

TAKEAWAY

ABR is a control loop on the next segment, not a one-time "pick a resolution for the whole title."


Buffering

The player stays ahead of the playhead.

NOT UDP VIDEO

Browsers, mobile apps, and TV clients refill that buffer with normal HTTPS GETs of each chunk (HLS/DASH-style). That is HTTP over TLS on TCP (HTTP/1.1 or HTTP/2), not a raw UDP media stream. If the client uses HTTP/3, the app still speaks HTTPS chunk fetches; the wire is QUIC on UDP (reliable), not classic fire-and-forget UDP video. See TCP vs UDP Under the Hood and HTTP vs HTTPS Under the Hood.

Buffer ahead of what you are watching
Watching: 0-4 seconds

Already downloaded:
4-8
8-12
12-16
16-20
20-24

If the network pauses briefly, playback continues from buffered chunks. If the buffer drains faster than fetches refill it, you see a rebuffer. ABR's job is to pick rungs that keep that buffer healthy.

TAKEAWAY

Buffer turns network jitter into a soft problem. Empty buffer turns it into a hard stop.


Seeking

Jump to the one-hour mark. The player does not scan through the movie file.

It maps time → chunk index and requests something like:

Seek as chunk fetch
Chunk 901
Chunk 902
Chunk 903

Playback resumes near-immediately once those segments arrive (plus a short buffer rebuild). That only works because segments are addressable objects on a shared timeline.

TAKEAWAY

Seek is random access into the chunk index, not a linear scan of a 10 GB blob.


CDN caching

Because every chunk is an independent object:

Chunks as cache keys
Chunk 850
Chunk 851
Chunk 852

CDNs can cache only the segments that were requested. Popular titles and popular time ranges (intros, cliffhangers) naturally become widely cached; rarely watched segments consume little edge storage.

That is the same edge hit/miss idea as a general CDN, applied to media objects. Deep dive: CDN Under the Hood.

TAKEAWAY

Chunking makes video CDN-native. One giant file fights the cache; segments fit it.


End-to-end request flow


Same loop as text
User Presses Play
|
v
Download Manifest
|
v
Measure Network Speed
|
v
Select Quality
|
v
Download Next Chunk
|
v
Add Chunk to Buffer
|
v
Repeat every few seconds

The decision repeats continuously throughout playback.


Benefits of chunk-based streaming

FeatureBenefit
Small segmentsFast startup
Multiple qualitiesSmooth adaptation
BufferingFewer interruptions
Independent chunksEfficient CDN caching
Manifest-driven playbackDevice and codec compatibility
Chunk boundariesSeamless quality switching

Final takeaway

Adaptive streaming combines intelligent encoding, chunking, manifests, and real-time decision making.

Instead of downloading a single movie file, the player repeatedly asks one question:

Which version of the next four seconds can I download before my playback buffer runs out?

By answering that every few seconds, systems like Netflix deliver smooth playback from slow mobile networks to high-speed fiber while minimizing buffering and maximizing quality.

Further reading

Specs and primaries behind chunked ABR: manifests, player APIs, and how large streamers deliver segments over HTTP.

TopicResourceWhy read it
ProtocolsHTTP Live Streaming (Apple)Official HLS overview and authoring entry point
ProtocolsRFC 8216: HTTP Live StreamingWire-level HLS playlist and segment model
ProtocolsHLS 2nd Edition (draft)Current HLS evolution (fMP4, LL-HLS, steering)
ProtocolsDASH Industry ForumMPEG-DASH interoperability guidelines and tools
ProtocolsISO/IEC 23009-1 (MPEG-DASH)International standard for DASH MPD + segments
PlayersMDN: Media Source ExtensionsHow browsers append downloaded chunks into a buffer
Playersdash.jsReference DASH player implementation
Playershls.jsWidely used HLS player for MSE-based browsers
PlayersShaka PlayerOpen player with DASH/HLS and ABR logic
DeliveryOpen Connect Overview (PDF)How Netflix pre-positions and serves segment objects
DeliveryOpen Connect sitePartner-facing CDN program docs
QualityVMAF perceptual metricWhy ladders are judged by eyes, not only bitrate
PipelineNetflix video pipeline microservicesHow encode/package produce the ladders ABR consumes