Measuring call quality without asking anyone
People rarely report a bad call. They say “sorry, you cut out”, carry on, and the next time they need to talk, they use something else. If you wait for complaints to find out your calls sound bad, you’ll find out from your churn numbers.
So before we changed anything about how Freesbe calls sound, we made every call measure itself.
What every call measures
Browsers already know a lot about each WebRTC connection, through getStats(). Every 3 seconds,
each Freesbe call reads those stats for the audio it receives and works out:
- Loss: packets that never arrived.
- Made-up audio: audio the browser invented to cover gaps. This is the robotic, cut-out sound people actually notice, and it’s a better signal than loss alone, because the Opus codec can hide a lot of loss.
- Recovered packets: how many lost packets Opus’s built-in error correction made up for.
- Jitter and buffering: how unevenly audio arrives, and how long it waits before playing.
- Round trip: how long a packet takes to the call server and back.
- Route: whether the call goes direct or through a relay, over UDP or TCP.
A moment of a call is poor above 5 percent loss, 5 percent made-up audio, or 400 ms from mouth to ear. It’s fair above 1 percent, 1 percent or 200 ms, and good otherwise. We also compute an estimated MOS (mean opinion score), the classic 1-to-5 call quality number, as a way to compare calls, not as a substitute for listening.
When someone leaves a call, their app sends a short summary: those numbers, which app they used, and what kind of connection. Never anything that was said or shown. That gives us one view of every call’s quality across devices, networks and call servers.
Showing it in the call
Measuring is for us. People in the call need something simpler:
- A signal icon on someone’s face when their audio is reaching you choppy. Point at it to see what it means. On your own face, it means the call is losing your sound on the way out.
- To avoid a flickering icon, it turns on when a person’s audio turns poor and only turns off when it’s good again. Fair keeps whatever it was.
That small icon answers the most common question in any call (“is it me or them?”) without anyone having to ask.
Weak connection mode: voices first
Measuring also let the app act on its own. If your connection stays weak for 10 seconds, the call switches into weak connection mode:
- it stops downloading other people’s cameras (their pictures show instead), but keeps shared screens;
- it sends your own camera at half size and 15 frames a second;
- it sends your microphone a little leaner, at 24 kbps instead of 40.
All of that changes live, without renegotiating the call. A note in the call says what happened, with a Show video anyway button. After 30 seconds without trouble, everything comes back.
The idea is simple: when there isn’t enough bandwidth for everything, people would rather hear each other than see each other.
One call in five asks
Numbers miss things, so after about one call in five that lasted a minute or more, a small card asks How did the call sound? Good, or Not great with a reason: echo, background noise, choppy, too quiet, or delay. It goes away if you ignore it. Asking every time would train people to ignore it; asking one time in five gives us enough answers to compare against the numbers.
What we turned down
- A survey after every call. Survey fatigue sets in within a week.
- Server metrics only. The call server sees its own side. Most problems are on the last mile: someone’s Wi-Fi, a VPN, a busy home network. Only the app sees that.
- A third-party call analytics service. Useful, but it means sending call metadata to one more company, and the browser already gives us what we need.
What it led to
Measuring first gave us a baseline. Every change we made to call audio afterwards, from clearer microphone settings to volume levelling across speakers to on-device AI noise cancellation, could be checked against real calls instead of a hunch. We wrote about the last one in How Advanced AI noise cancellation works.
See Call quality in the help center for what people see in a call.