Bandwidth Estimation from Scratch: Achieving optimal bandwidth utilization and what I learned along the way.
Going live on at
The internet offers an unreliable, best-effort packet transport, where delays, bandwidths, and loss rates can vary at any time. How is it possible to send reliable and high-quality real-time media over a network with zero guarantees?
Real-time applications usually use UDP as the underlying transport to avoid head-of-line blocking and late retransmissions. UDP does not provide any congestion control, and the congestion control algorithms known from TCP do not satisfy the requirements of interactive real-time media flows. Most TCP congestion control algorithms work well for reliable transfers, e.g., files or web pages, but impose too much packet loss and delays that are too long for real-time media transmission.
In real-time communication, peers must send data at a valuable bit rate while keeping transit delays and packet loss low. At the same time, it has to be fair to other flows on the same link, be it real-time traffic or bulk transfers.
Learn about my journey in building a bandwidth estimator in Go. I will share fundamental concepts that make it possible to implement congestion control for real-time media and the software needed to test it.