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.
| Measure | Value | Source | Measured |
|---|---|---|---|
| Real-time media components in production | 6 (media server, conference focus, signalling, recording, telephony gateway, TURN relay) | kubectl get deployments,statefulsets -n kamo | |
| Streaming server operated alongside conferencing | 1 (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
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.