Internet connections are limited in bandwidth, and whether they are last generation fibre or old school ADSL, their traffic usually fluctuates. Even high-speed connections can reach their capacity on peak hours, affecting the transfer rate of everyone using it. When it happens during a video call, it can cause glitches that render the communication impractical and create a terrible user experience. This is why we are currently implementing a feature that will automatically adjust the video bitrate in Jami, meaning the number of bits per seconds that can be used to transfer a video stream.

Doing this requires a mechanism for detecting congestion on the receiving end of a video stream and alerting the sender to adjust the bitrate. There are two types of congestion control algorithms designed to do so. Old algorithms use a drop based strategy called AIMD (additive increase/multiplicative decrease) that quickly decrease the bitrate when drops are detected and increase it back smoothly when they are not significant. This is the one currently running in Jami, but the major problem with it is that the data rate will increase back until drops occur again, causing glitches on the receiver video stream. The challenge lies in detecting congestion before it causes packet drops.  

New algorithms like GCC (Google Congestion Control) add delay monitoring to the drop based strategy. The principle is simple: the receiver will analyze the packet reception frequency, and an important variation indicates that a drop will likely occur. By analogy, a driver will start to slow down when he sees traffic congestion ahead, instead of keeping the same speed and braking just before hitting the next car on his lane. The Jami development team is currently working on adding this new method of congestion control in order to enhance the user experience.

By Pierre Lespagnol and François Naggar-Tremblay