

Sender pseudocode ( send_side_bandwidth_) : Another detail of WebRTC implementation is that the sender will use not only this bandwidth estimation received in the REMB packet but also the packet loss feedback to decide the final value of the target video bitrate to be sent. As explained before the receiver of the traffic analyzes the inter-packet delay and generates an estimation of the available bandwidth that is reported back to the sender using RTCP messages with a new message type that was defined for this purpose: REMB.


If you want to read more about the history and status of congestion control standards you can read this very interesting post from Randell Jesup.įrom the very beginning of WebRTC, the media engine (that is built by Google but included in both Chrome and Firefox) was based on the concept of remote bandwidth estimation. Some popular examples of these algorithms are Google Congestion Control (the one used in WebRTC), SCReAM and SPROUT. The idea is that when you start having some congestion, the buffers in the routers will start filling and the delay will be more variable. These algorithms predicts congestion analyzing the delay between packets. Modern bandwidth estimation algorithms are more advanced and try to detect congestion before it is bad enough to make routers discard packets. To detect the packet loss you use the standard RTCP feedback mechanisms where the receiver side reports packet loss periodically using RTCP Receiver Report (RR) messages. Basically we used to start increasing slowly the video bitrate until we detected packets being lost. In the past bandwidth estimation algorithms used to be very rudimentary and based mostly on packet loss. The bandwidth estimation (BWE) module is responsible for deciding how much video* traffic you can send without congesting the network to prevent degradation of the video quality. Bandwidth estimation is probably the most critical component in the video engine of WebRTC.
