Throughput-based ABR estimates the available bandwidth from recent segment download times and picks the highest rendition that fits with a safety margin. A typical formula: take the harmonic mean of the last N segment download throughputs (N around 5), multiply by a safety factor (0.7–0.9), and pick the highest rendition whose bitrate is below that. When the next segment arrives, recompute and possibly switch.
The strength is clarity: the algorithm is easy to reason about, easy to instrument, and produces predictable behaviour. When bandwidth genuinely changes, throughput-based ABR catches up within a few segments. The weakness is that on bursty or variable networks (cellular, Wi-Fi under contention) recent throughput is a poor predictor of immediate throughput, leading to oscillations and unnecessary switches. Throughput-based algorithms also tend to be aggressive with rate steps — they might jump from 720p to 1080p too eagerly and then back down.
Throughput-based ABR is the default in hls.js, Shaka Player and most older players. Modern production deployments usually layer additional heuristics: minimum dwell time per rendition (don't switch within 10 seconds), buffer floor check (don't upshift if buffer is below 5 seconds), startup boost (start at a low rendition then ramp up). These tweaks turn a textbook throughput algorithm into something acceptable for real users.

