Streaming stored video
Streaming services deliver video reliably over a best-effort network by combining HTTP, client buffers, adaptive bit rates, and content delivery networks.
Client buffering
A streaming client downloads video ahead of playback into a buffer. Playback starts after an initial delay, and if network throughput temporarily falls below the video rate, playback continues from the buffer. If the buffer empties, playback stalls to rebuffer, the experience viewers hate most. Larger buffers absorb more variation but take longer to fill and use memory.
Streaming over HTTP
Most streaming today uses HTTP over TCP or QUIC. Using HTTP lets video pass through firewalls and NATs, reuse ordinary web servers and caches, and benefit from CDNs. Early streaming used special protocols such as RTSP and RTMP; RTMP survives mainly for sending live video into platforms, while viewers almost always receive HTTP streams.
Adaptive bit rate streaming
Each video is encoded at several quality levels, a bit-rate ladder from perhaps 0.3 Mbit/s to 16 Mbit/s or more, and split into chunks of 2 to 10 seconds. A manifest file lists every version and chunk. The client chooses a version for each chunk, so quality can change mid-stream. MPEG-DASH and Apple's HTTP Live Streaming (HLS) are the main standards.
Choosing the bit rate
Adaptation algorithms estimate throughput from recent chunk downloads and also watch buffer levels. Throughput-based methods pick the highest rate below the estimate; buffer-based methods, such as BOLA, choose rates from buffer occupancy, increasing quality when the buffer is full and lowering it as the buffer drains. Good algorithms balance high quality, few stalls, and few quality switches.
CDNs for video
Video is served mostly from CDN servers near viewers. Netflix's Open Connect programme installs its own caching appliances inside ISPs and at IXPs, filled overnight with popular titles, so most Netflix traffic travels only a short distance. Large platforms similarly use their own edge caches; others use commercial CDNs. DNS or manifests steer each client to a suitable server.
Measuring quality of experience
Streaming quality is measured by startup delay, stall frequency and duration, average bit rate, and how often quality switches. Studies have found that viewers abandon videos more as startup time grows, and that stalls hurt engagement more than slightly lower resolution. Services tune encoding, adaptation, and CDN placement to these metrics.
Live and low-latency streaming
Live streaming encodes and packages chunks in real time. With conventional chunk sizes, viewers may lag the live event by 20 to 30 seconds. Low-latency HLS and DASH use shorter chunks and partial chunk delivery to bring delay down to a few seconds, while WebRTC-based streaming can achieve sub-second latency for interactive uses such as auctions or watch parties.
Worked example
A player has a 20-second buffer and is playing at 6 Mbit/s when measured throughput falls to 3 Mbit/s. At 6 Mbit/s, each 4-second chunk (24 megabits) now takes 8 seconds to download, so the buffer drains by 4 seconds per chunk and would empty after about five chunks. The adaptation algorithm switches down to the 2.5 Mbit/s version, whose chunks download in about 3.3 seconds, letting the buffer refill.
Key takeaways
Clients buffer ahead so playback survives throughput dips; empty buffers cause stalls. Streaming uses HTTP over TCP or QUIC to traverse networks and use CDNs; RTMP now mainly feeds live video in. Adaptive bit rate streaming encodes a ladder of versions in chunks listed in a manifest, with MPEG-DASH and HLS as standards. Algorithms choose rates from throughput estimates and buffer levels to balance quality, stalls, and switching. CDNs, including Netflix's Open Connect appliances in ISPs, serve video nearby. Quality of experience covers startup, stalls, bit rate, and switches. Low-latency HLS and DASH cut live delays to seconds; WebRTC achieves sub-second.
Flashcard
Video downloaded ahead of playback
Check your understanding
Why do streaming services split each video into short chunks at several bit rates?
