Under the hood

How random video chat actually works

9 min read

Between pressing a button and seeing a stranger's face there are three separate systems doing quite different jobs. Most explanations of random video chat stop at "it connects you". Here is the longer version, which is more interesting and also explains every annoying thing your calls do.

1. Matching: the only part that is a product decision

The first job is deciding who you talk to. This is the part with no standard, no specification and no right answer — every site does it differently, and it is where the actual product lives.

The mechanics are unglamorous: people asking for a conversation go into a pool, and the system pairs them off. What varies between sites is what goes into the pool with you — a format, a region, a language, a set of preferences, or nothing at all. Pure random matching puts in essentially nothing, which is what makes it fast and what makes it a lottery. The trade-offs of doing it that way are worth their own page.

Everything after this point is standardised, off-the-shelf and roughly identical everywhere.

2. Signalling: agreeing on what the call will be

Once two browsers have been introduced, they have to agree on the terms of the call: which codecs they both speak, whether there is video or only audio, what encryption keys to use. Neither browser can guess this about the other, so they exchange offers and answers through the server until they converge on a shared description of the session2.

This exchange is deliberately not part of the standard. The browser specification defines the API and the shape of what gets exchanged, but leaves it to each application to decide how to move those messages around1 — which is why every implementation has its own signalling layer, and why a site can be entirely standards-compliant and still be the reason your calls fail.

3. Connecting: the part that fails

Now the hard problem. Almost no device on the internet is directly reachable — home routers, corporate networks and mobile carriers all sit between you and the outside world. Two browsers cannot simply address each other.

The standard solution has each side gather every address it might conceivably be reachable on, exchange the lists, and then systematically test pairs until one works. When a direct path exists, media flows browser to browser. When none does — restrictive corporate firewalls are the classic case — the call falls back to relaying everything through an intermediate server, which works but adds delay and costs the operator real bandwidth.

This is the single biggest source of variance in how a random video chat feels. Same site, same code, wildly different experience depending on whose network each of you is sitting behind.

  • Direct path found → media goes browser to browser. Fastest, cheapest.
  • No direct path → media is relayed through a server. Works, but slower.
  • Nothing works → the call fails, usually after a few seconds of trying.

4. Media: why the picture gets worse but the call keeps going

Audio and video are chopped into small packets and sent continuously, with each packet carrying a sequence number and a timestamp so the far end can reassemble them in order and play them at the right moment3. Alongside the media, both ends exchange running reports about what they are actually receiving — how much arrived, how much was lost, how much the timing jittered.

That feedback loop is what drives the behaviour you notice. When the reports say packets are being lost, the sender lowers the video bitrate rather than letting the call break. This is why a struggling call goes blurry rather than freezing: video quality is the variable the system is willing to sacrifice, because a soft picture bothers people far less than a conversation that stops working.

Audio is protected much harder for the same reason. You can hold a conversation with a bad picture; you cannot hold one with broken sound. And the thing you feel most on a bad call is not resolution at all — it is delay.

Why any of this is worth knowing

Mostly because it reassigns blame correctly. When a call is bad, the instinct is to assume the site is bad. Sometimes it is — matching and signalling are genuinely the operator's responsibility. But blurriness, delay and connection failures are usually the network between two specific people, and no amount of engineering on either end can fix a hotel wifi connection.

It also explains why "just add a filter for country" is a bigger request than it sounds. Every constraint you add to matching shrinks the pool it can draw from, and a shrunken pool means longer waits — which is the trade any site in this category is quietly making whether or not it tells you.

Sources

  1. WebRTC: Real-Time Communication in BrowsersW3C (World Wide Web Consortium) · 2026

    The browser API specification for real-time peer-to-peer audio and video. It defines what browsers must implement and explicitly leaves the signalling channel to the application — the basis for the point above about signalling not being standardised.

  2. RFC 8829 — JavaScript Session Establishment Protocol (JSEP)IETF (Internet Engineering Task Force) · 2021

    The offer/answer model described in the signalling section. It specifies how two endpoints converge on a shared session description. A protocol document — it prescribes the exchange, not how well any implementation performs it.

  3. RFC 3550 — RTP: A Transport Protocol for Real-Time ApplicationsIETF (Internet Engineering Task Force) · 2003

    The transport underneath the media section: sequence numbers, timestamps and the reception reports that let senders react to loss. It defines the mechanism for that feedback; how aggressively any given implementation responds to it is an implementation choice, not a standard.

Keep reading

Try it rather than read about it

Video, voice or text — one other person, and yours to end whenever. 18+ only.

Start Match