Our own video conferencing

WebRTC media servers, TURN relays and the ICE path in between

Video meetings in KamoCRM run on media infrastructure we operate: a selective forwarding unit, conference focus, TURN relay, recording and streaming gateway components. Real-time media is the least forgiving thing on the web and there is no way to learn it except by running it.

Every number here names where it came from and when it was measured.
MeasureValueSourceMeasured
Real-time media components in production6 (media server, conference focus, signalling, recording, telephony gateway, TURN relay)kubectl get deployments,statefulsets -n kamo
Streaming server operated alongside conferencing1 (MediaMTX, live streaming only)kubectl get deployments -n kamo

What building it taught us

Real-time media punishes approximation. A web request that takes an extra two hundred milliseconds is unremarkable; two hundred milliseconds of jitter in a call is an argument about who is talking over whom. Connectivity is negotiated rather than configured — candidate addresses gathered, paths tested, a relay used when a direct path cannot be found — and the failure modes are asymmetric and infuriating. One participant hears everyone, nobody hears them, and every log says the call is fine.

The failure we learned most from was a conference that ended when the second person joined. It looked like an application bug and was not: the media server had marked itself non-operational and the conference focus, having nowhere to route a second stream, tore the conference down. The lesson was about diagnosis order — check the media server's own health endpoint before reading a line of application code — and it generalises to every distributed system we have worked on since.

We also run the relay and the recording. Recording is where privacy obligations become concrete rather than theoretical, because a recording is a document about identifiable people that somebody now has to store lawfully, and that is a design constraint long before it is a policy document.

Built with

  • WebRTC
  • Jitsi Videobridge
  • Jicofo
  • Prosody
  • coturn
  • MediaMTX
  • XMPP
  • ICE
  • SRTP

What this qualifies us for

Real-time systemsLive data, messaging, presence and media — the unforgiving end of the webCustom web applicationsThe system your business actually runs on, built properlyMobile applicationsCross-platform where it makes sense, native where it does not

Tell us what you are trying to do

A short conversation is usually enough to tell whether we are the right people. If we are not, we will say so and point you somewhere better.

Start a conversationI already use KamoCRMHow we quote