When a viewer says “the live froze for me”, someone has to answer a hard question: was it us, or them?
Most live-video teams can’t answer it quickly. Server logs look clean because the servers did their job, dashboards show room averages, and by the time the ticket arrives the moment is gone. It usually ends with “probably your Wi-Fi”.
What works for us is to stop looking at that one viewer in isolation. We reconstruct what every participant actually received and compare the person with everyone else watching the same streams at the same moment. If everyone degraded together, look upstream. If only one did, look at their network and their device.
Two real, anonymised cases from the write-up. In one room the average showed about 1% of video lost, but one viewer was losing around 9% for much of the session: her connection, not the platform. In another, the host’s voice broke up for 36 of 37 viewers at once while a co-host was fine: the host’s upload had hit a bandwidth limit, not the server.
To picture how it works in practice, imagine a product launch streamed to 500 viewers. At 20:14 the CEO’s audio drops out, and support gets twenty messages within a minute. You type in one of them: “Anna, around 20:14”. The answer comes back in one sentence: not her fault, 430 of the 500 lost the host’s audio at the same moment, and the host’s laptop had hit its upload limit a few seconds earlier. Then you scrub the reconstructed scene to 20:14 and see it for yourself: the host’s stream thins out, the whole audience goes quiet, and one viewer in the corner was already struggling on an overheating phone before any of it started. Twenty tickets get one honest answer, and the fix goes to the right place: the host’s connection, not your servers.
Disclosure: we’re building Rewitness. A small SDK records what each participant experienced, and a deterministic rules engine lines those witnesses up on one timeline and says whose side the problem was on and what exactly happened, with the evidence. You can also scrub the reconstructed scene to any moment. It infers server-side problems from what clients received (it doesn’t read your SFU’s logs) and only sees apps that include the SDK.
How do you handle “it was broken for me” reports? Do you collect client-side stats from every participant, or only when someone complains?