Adaptive Bitrate Streaming (ABR) is the method of delivering video over HTTP in multiple quality levels, allowing players to switch bitrates based on network conditions and device performance. Modern VOD platforms rely on ABR for stable playback across varied environments.
Source Input
The workflow begins with video Input. A video file may come from direct user uploads, a live stream recorded for later playback, or an existing storage system. These inputs often vary in codec, resolution, and format. Ingestion normalizes the video into a standard format that encoding tools (like ffmpeg) can process.
Multi-Bitrate Encoding
After ingestion, the video is transcoded into several renditions, each at a different resolution and bitrate. For example, a single video may be available in 240p, 480p, 720p, and 1080p, with bitrates suited to those sizes. This allows the same content to be delivered efficiently to both high-bandwidth and low-bandwidth users.
Example:
ffmpeg -i sam.mp4 -map 0:v -s:v:0 426x240 -b:v:0 400k -map 0:v -s:v:1 640x360 -b:v:1 800k -map 0:v -s:v:2 1280x720 -b:v:2 2500k -map 0:v -s:v:3 1920x1080 -b:v:3 5000k -map 0:a -c:a aac -ar 48000 -b:a 128k -f hls -hls_time 6 -hls_playlist_type vod output.m3u8Explanation:
- -map 0:v: Creates multiple video renditions from the same input.
- -s:v:0 426x240 / -s:v:1 640x360 / -s:v:2 1280x720 / -s:v:3 1920x1080:Explicitly scales each rendition to 240p, 360p, 720p, 1080p.
- -b:v:0 400k / -b:v:1 800k / -b:v:2 2500k / -b:v:3 5000k:Sets target bitrates for each resolution to control quality vs. bandwidth.
- -map 0:a:Ensures the audio stream is included (otherwise you"d get a video-only playlist).
- -c:a aac -ar 48000 -b:a 128k: Standardizes audio into AAC, 48 kHz, 128 kbps → ensures compatibility with HLS players.
- -f hls -hls_time 6 -hls_playlist_type vod:Outputs HLS format, cuts segments into 6-second chunks, and marks it as VOD instead of live.
Packaging into ABR Formats
The encoded renditions are divided into small segments, typically a few seconds long, and packaged into formats such as HLS or MPEG-DASH. A manifest file is also generated, which lists all renditions and segments.
The manifest enables the player to understand what quality levels are available and how to request them during playback. Without packaging and manifests, the player cannot perform adaptive switching and would be forced to play a single static stream.
CDN Distribution
Once the video is packaged, the segments and manifest are distributed through a Content Delivery Network (CDN). The CDN caches the files across servers in different geographic locations so that users can access the video from a nearby server instead of from a distant origin.
This reduces latency, avoids buffering, and allows the system to handle a large number of simultaneous viewers. Without CDN distribution, playback would depend on a single origin server, which can quickly become a bottleneck.
Player Adaptation Logic
The video player loads the manifest file and selects an initial rendition based on network speed and device performance. During playback, the player continuously measures bandwidth, buffer length, and CPU/GPU load. If conditions change, the player switches to a higher or lower rendition seamlessly.
For example, if bandwidth drops, the player might switch from 1080p to 480p to avoid buffering. Without this logic, viewers would experience stalls or fixed low-quality playback.
Error Handling and Failover
ABR workflows include mechanisms to handle playback errors. If a segment from a higher-bitrate rendition fails to load, the player falls back to a lower rendition. Similarly, CDNs and origin servers are often configured with failover, so if one source becomes unavailable, another can serve the content. This ensures that playback continues smoothly even when there are temporary network or server problems.

