Bbabo NET

Science & Technology News

Signal has increased the maximum number of participants in audio and video calls from five to 40

Messenger Signal released an update in which the maximum number of participants in group audio and video calls increased from five to 40. The developers explained how they managed to solve the problem of supporting group calls with a large number of participants and end-to-end encryption at the same time.

According to representatives of the messenger, they faced the problem that if all participants send their audio and video files to each other participant separately and also receive them (full mesh), then end-to-end encryption works, but many participants will not have enough bandwidth. since in a call for 40 people, 39 connections must be maintained. When each participant sends their audio and video to the server, and the server redirects a single audio and video stream for every other participant, then there will be enough bandwidth, but end-to-end encryption does not work.

As a result, the developers chose an alternative option: Selective Forwarding Unit, when each participant sends their audio and video to the server, and the server sends them to the rest without decrypting. The Signal team created an open source signal processing service themselves and posted the code on GitHub.

A simplified version of the main loop in the code in SFU looks like this:

The Signal team evaluated many open source SFUs, but only two of them were noted to have adequate congestion control. The developers launched group calls using a modified version of one of these servers, but soon found that, even with major modifications, they could not reliably scale the number of participants beyond eight due to high CPU utilization. Then they wrote SFU from scratch in Rust.

The most challenging part of the SFU's design was arranging for the video to be sent at the correct resolution to each participant in the call, while the network conditions are constantly changing. The team combined several techniques: Simulcast and Packet Rewriting allow switching between different video resolutions, Congestion Control determines the correct volume to send, and Rate Allocation determines what to send within that volume.

The end-to-end encryption implementation is stored in RingRTC, an open source video calling library written in Rust. The content of each frame of the forwarded video is encrypted before being split into packets, as in SFrame. When a client joins a call, it generates a key and sends it to all other participants in the call as a message that is already protected by Signal encryption. It uses this key to encrypt the media before sending it to the SFU. Every time a user joins the call, he generates a new key and sends it to all other participants.

In November, Signal added blocking spam messages and sending complaints directly from the chat page. Now users of the messenger can block and report spam with one click. When a complaint is sent to the messenger's servers, only the phone number and ID of the alleged violator are received. This data correlates with other hits. If the same phone number and ID are reported in multiple complaints, or if the system detects signs that the account is being used to send spam, Signal will ask for a basic humanity check. One of the verification methods is CAPTCHA. The user will not be able to post new messages until they confirm that they are human.

Signal has increased the maximum number of participants in audio and video calls from five to 40