Loading...
System Design and AI Engineering, by Roni Das. 980 interactive lessons.
Start LearningSystem design interview guide
Short answer
A video conferencing system has two planes. The signaling plane is a WebSocket service that handles joining a room, room state, and the SDP offer and answer that sets up each connection. The media plane carries encrypted audio and video (SRTP) over UDP to a Selective Forwarding Unit (SFU) near each user, after ICE finds a path through NATs with a STUN server, or relays it through a TURN server when no direct path works. The SFU receives each track once and forwards each viewer a simulcast or SVC layer that fits their screen and network, as decided by congestion control. For a global product, SFUs in different regions are cascaded so each track crosses between regions once, and recording and large webinars are built as extra subscribers to the same SFUs.
in this guide
8 parts open to everyone · 3 with a free account · 3 with the course
You can read 8 of 14 parts. A free account opens the deep dive; the course opens all of it.
It moves you off the usual track of databases and request-response. The hard limits are the network and human perception, not storage. A weak answer draws clients, a server and a database, says 'use WebRTC' and stops. A strong answer separates signaling from media and explains why they need different transports. It knows why two people behind home routers cannot just connect, and what STUN and TURN each do about it. It chooses an SFU over a mesh or an MCU with bandwidth arithmetic, not by name. It explains how one sender can serve a phone on a weak network and a big screen on fast Wi-Fi at the same time. And it handles the global case: what happens when the people in one room are on different continents, and how recording and a 10,000-person webinar fit without slowing the live call.
This page is the free part.
₹1,777 in India$49 everywhere elseonce, for the whole course
The System Design course covers the video conferencing system design across a run of lessons, not one page. These 4 alone are about 84 minutes of step-by-step reading, every one with a quiz.
Live from the course bench
Real interview questions, live diagrams and measured lab results, pulled at random from the lessons. A new set every time you come back.
Always clarify these in the first 5 minutes of the interview. Do not start drawing boxes until both lists are agreed.
This guide is built on these 6 lessons. Each one teaches one piece of the video conferencing system design above, step by step.
Lifetime access for ₹1,777 in India or $49 elsewhere. Interactive diagrams, quizzes, and 20 capstone projects to practise on.
This one question is not enough for the interview.
Each question has why it is asked, a full answer, what the interviewer listens for, the follow-ups, the common mistakes and a diagram (268 diagrams in all). A PDF you keep, junior to staff level.
Asked to design Zoom specifically? See the Zoom system design guide
Two courses by the author of this page:
770 lessons · 18 free to read
₹1,777 in India · $49 elsewhere, once
Get System DesignYou own this course
210 lessons · 10 free to read
₹2,777 in India · $49 elsewhere, once
Get AI EngineeringYou own this course
Save your progress and get the interview checklist PDF
A video call looks simple: you see people and hear them. Underneath, every laptop and phone must find a network path to the others, often through home routers and office firewalls that block most traffic. Then each camera's video must reach every other person in the call, live, with less delay than a person notices, while each person's network gets better and worse from second to second. Take an interview-sized target: 1 million people in calls at the same moment, 5 to a room. With three video layers per camera, that is about 2.2 terabits a second flowing into the media servers and about 2.1 flowing out. No single machine can do this, and no single region either: a room with people in Mumbai and Frankfurt should not send every stream across the world twice. This guide builds the design on the open standards that every browser ships and that open-source media servers such as LiveKit, Jitsi and mediasoup are built on: WebRTC.
A video conferencing system lets a group of people send live audio and video to each other with very little delay. First, some terms. WebRTC (Web Real-Time Communication) is the open standard built into every modern browser and phone for live audio, video and data. A track is one stream of media, such as one camera or one microphone. Latency is delay; jitter is how much that delay changes from packet to packet. A NAT (network address translation) is the box, usually your home or office router, that lets many devices share one public IP address; it also blocks most traffic that you did not start yourself. The design has two planes. The signaling plane is a small, reliable channel, usually a WebSocket (a connection that stays open so the server can send messages at any time). It handles joining a room, sign-in, and swapping SDP (Session Description Protocol), the text that says which codecs and tracks each side will use. The media plane carries the actual audio and video as SRTP (Secure Real-time Transport Protocol, encrypted media packets), usually over UDP, because a late packet of live audio is useless and UDP does not stop to resend it. To get through NATs, each client uses ICE (Interactive Connectivity Establishment): it collects possible addresses with the help of a STUN server, tests them, and falls back to a TURN server that relays its media when no direct path works. In the middle sits a media server, almost always an SFU (Selective Forwarding Unit): every client uploads its tracks once, and the SFU forwards each viewer the copies it needs without decoding them. Simulcast and SVC let the SFU give each viewer a quality that fits their screen and network, and congestion control decides that quality from moment to moment. For a global product, SFUs in several regions are joined into one room (cascading), and recording and large webinars are built as extra subscribers to the same SFUs.
Where it shows up
Asked as 'design a video conferencing system', 'design Google Meet', 'design a video calling app' or 'design Zoom', and inside questions about live streaming, voice chat for games, telehealth, online classrooms and customer support video. Companies that build real-time products ask it in depth: video, collaboration, social apps, cloud communication platforms, and any team running WebRTC infrastructure.
Spec sheeta video conferencing system
worked through below, with the maths
The hard parts of this design are taught step by step in the System Design course: WebRTC, UDP and NAT.
Real-time peer-to-peer communication in the browser, the technology behind video calls, screen sharing, and live streaming.
The 'fire and forget' transport protocol that prioritizes speed over reliability.
Network Address Translation, how millions of devices share a single public IP address.
Full-duplex, persistent connections, how the real-time web actually works.
all part of
System Design Masterclass
770 lessons · about 283 hours · 18 free to read
₹1,777in India, by UPI
$49everywhere else, by PayPal
You own this course
Continue with WebRTCpay once,
yours for life
Show your math. Pulling numbers from thin air signals you have not thought about the load.
Upload per person with simulcast
about 2.2 Mbps
Interview assumptions: three video layers, 720p at 1,500 kbps, 360p at 500 kbps and 180p at 150 kbps, plus 40 kbps of audio. 1,500 + 500 + 150 + 40 = 2,190 kbps up per person. Simulcast costs the sender more upload so that the server never has to re-encode.
A 10-person call with a mesh
13.9 Mbps up per laptop, 90 streams
In a mesh, everyone sends to everyone. Each laptop encodes and uploads 9 copies of its 720p stream with audio: 9 x 1,540 = 13,860 kbps up, and the same down. The call has 10 x 9 = 90 streams. Most home connections cannot upload that, which is why a mesh only suits very small calls.
The same call with an SFU
2.2 Mbps up, 4.9 Mbps down, 48.6 Mbps out of the server
Each person uploads once, 2,190 kbps. In a gallery of 9 tiles at 360p, each person downloads 9 x 540 = 4,860 kbps. The server receives 10 x 2,190 = 21,900 kbps and sends 10 x 4,860 = 48,600 kbps, but decodes nothing. LiveKit's own example checks out the same way: 50 people each receiving 49 streams at 500 kbps is 50 x 49 x 500 kbps = 1.225 Gbps from one server.
Fleet traffic at peak
about 2.19 Tbps in, 2.11 Tbps out, about 440 machines by bandwidth
Interview assumptions: 1,000,000 people in calls at once, 5 per room, so 200,000 rooms. In speaker view each person receives 1 stream at 720p, 3 at 180p and 4 audio streams: 1,500 + 450 + 160 = 2,110 kbps. In: 1,000,000 x 2,190 kbps = 2.19 Tbps. Out: 1,000,000 x 2,110 kbps = 2.11 Tbps. If one SFU machine safely moves 5 Gbps each way (a 10 Gbps network card kept half full, an assumption), that is 2.19 Tbps / 5 Gbps = 438 machines.
Fleet size by CPU
about 16,000 cores, or 500 machines of 32 cores
A consumer is one track that one person receives. In a 5-person room each person receives 4 video and 4 audio tracks, so 1,000,000 x 8 = 8,000,000 consumers. mediasoup's docs say one worker runs on one CPU core and can typically handle over about 500 consumers. 8,000,000 / 500 = 16,000 cores, which is 500 machines of 32 cores. Bandwidth and CPU give a similar answer here; plan for the larger.
TURN relay traffic
about 430 Gbps
Interview assumption: 10% of people cannot get a direct path and use a TURN relay, so 100,000 people. The relay carries both their upload and their download: 2,190 + 2,110 = 4,300 kbps each, so 100,000 x 4,300 kbps = 430 Gbps. RFC 8656 warns that relaying comes at a high cost to whoever runs the TURN server, so it is the last resort, not the default path.
One room across two regions
40 long-distance streams without cascading, 10 with it
A 10-person room: 6 people in Mumbai, 4 in Frankfurt, gallery view of 360p tiles. With one SFU in Mumbai, each Frankfurt person sends their upload across and pulls 9 tiles back across: 4 + 4 x 9 = 40 streams, 28.2 Mbps on the long path. With an SFU in each region joined together, each track crosses once: 6 + 4 = 10 streams, 5.4 Mbps. That is 5.2 times less long-distance traffic, and every person talks to a nearby server.
Recording storage
about 1.1 GB per recorded hour
Interview assumption: one composed 1080p recording at 2,500 kbps. 2,500 kbps x 3,600 seconds / 8 = 1.125 GB an hour. If 10% of the 200,000 rooms record at peak, that is 20,000 recorders writing about 22,500 GB an hour.
Draw two planes, and keep them apart. The signaling plane is on top: clients open a WebSocket to a signaling service over HTTPS. Through it they sign in, join a room, learn who else is there, and swap SDP offers and answers and ICE candidates. The standard leaves this channel to you: JSEP, the rulebook for how a browser creates offers and answers, says how those messages travel is 'left entirely up to the application'. Behind the signaling service sits the room state: who is in each room, which tracks each person publishes, who is muted, and which media server hosts the room. Keep it in a fast shared store or a pub/sub bus. LiveKit, for example, uses Redis for room data and as a message bus between nodes. The media plane is below. Each client connects to an SFU near it. Media flows as SRTP, encrypted with keys agreed through DTLS (a version of TLS for UDP), over UDP where possible. To find a path through home routers and firewalls, the client uses ICE with a STUN server, and falls back to a TURN relay, which can run over TLS on port 443 so that it looks like normal web traffic. The SFU receives each person's tracks once, as several simulcast layers, and forwards each viewer the layer that fits their screen and network. Congestion control feedback, sent back over RTCP (the control messages that travel next to the media), tells each sender how much to send. For a global product, put SFUs in several regions. When a room has people in more than one region, the SFUs join the room together and send each track across once (cascading). Recording and webinars are extra subscribers: a recorder joins the room like a hidden participant and writes files to object storage; a webinar fans one speaker's tracks out through a tree of SFUs to many viewers.
In a real interview, sketch this on the whiteboard before diving into any single box.
Follow a browser in Mumbai joining a room that already has people in Frankfurt. This is a good order to explain it in an interview.
The browser opens a WebSocket to the signaling service and asks to join room 42. The service checks the user may join, looks up the room state, and finds that the room is already live on an SFU in Frankfurt.
The person is in Mumbai, so the service picks an SFU in the Mumbai region with spare capacity and tells it to join room 42 too. The Mumbai and Frankfurt SFUs link up for this room.
The browser and the Mumbai SFU swap SDP through the signaling channel: which codecs, which tracks, and three simulcast layers for the camera, each named by a rid (restriction identifier).
The browser gathers candidates: its own local address (host), the public address a STUN server reports (server reflexive), and a TURN relay address (relayed). It sends them as it finds them (trickle ICE). Both sides run connectivity checks on candidate pairs, and the best pair that works is nominated.
A DTLS handshake runs over the chosen path and produces the keys for SRTP. Plain unencrypted media is not allowed in WebRTC.
The browser starts sending its three camera layers and its audio. The Mumbai SFU forwards them to local viewers and sends one copy of each needed layer to the Frankfurt SFU, which forwards it to the people there. The browser subscribes to the Frankfurt people's tracks the same way, in reverse.
Every few tens of milliseconds, feedback from the receiving side tells each sender about delay and loss. If a viewer's network gets worse, the SFU switches that viewer to a lower layer at the next key frame. Nobody else is affected.
Walk through each service. The interviewer wants to hear what each one owns, not just the names.
WebSocket servers that handle sign-in, joining and leaving, SDP offers and answers, ICE candidates, mute and layout events, and chat. Small messages that must arrive, so they use a reliable connection. Stateless apart from open connections; room facts live in the room state store.
Holds who is in each room, which tracks they publish, which SFU nodes host the room, and per-node load. A fast shared store plus pub/sub, so every signaling server and SFU sees changes within milliseconds. LiveKit uses Redis for this. In Jitsi, a central server runs Prosody for signaling and Jicofo, which assigns each conference to a bridge.
STUN answers one question: what public IP address and port does my NAT show to the world? TURN relays media for clients that cannot get a direct path. Run TURN in every region, on UDP and also over TLS on port 443 for networks that block everything else, and plan for its bandwidth.
The media server. Terminates ICE, DTLS and SRTP for each client, receives each track once, and forwards copies to subscribers, choosing a simulcast layer or SVC layer per viewer. Never decodes the video. Examples: LiveKit, Jitsi Videobridge, mediasoup.
Chooses which SFU hosts a person: the nearest region, then a node below a load limit. LiveKit's region-aware selector picks the closest region and a node under its sysload_limit; Jitsi's Jicofo picks a videobridge per conference, by region when cascading is on.
Server-to-server media connections that join one room across several SFUs. Jitsi's bridges connect with ICE and DTLS and then exchange standard SRTP. Each receiving server pulls a track once and fans it out locally.
A recorder joins the room as a hidden subscriber, mixes or saves tracks, and writes MP4 or HLS files to object storage. LiveKit's egress joins as a participant of kind EGRESS and subscribes only to the tracks it needs. For webinars, extra SFUs subscribe to the speakers and fan out to viewers.
room. Durable record in a normal database. The live parts (who is in, where) are in the room state store, because they change every second and are thrown away when the room…
Every table for a video conferencing system, its keys, and which store fits it and why.
Signaling: offers, answers and room state. Before any video flows, the two sides must agree on what they will send and how. WebRTC does this with SDP (Session Description Protocol), a text format that lists the…
9 deep dives on the parts that break at scale, with 3 diagrams: Signaling: offers, answers and room state; Getting through NATs: ICE, STUN and TURN; SFU vs MCU vs mesh, with the arithmetic.
SFU vs MCU vs mesh. A mesh needs no server but each client uploads one copy per other person, 13.9 Mbps in a 10-person call, so it suits 2 or 3 people. An MCU sends each client one mixed…
6 decisions an interviewer expects you to defend, each with the alternative and why it loses here.
A user in a hotel can join the room and see the participant list, but no video ever arrives. What happened?
5 follow-up questions with model answers, the interview scorecard for this question, and a mock interview on Design a video conferencing system with the AI tutor.
The open-source media servers show the same shape this guide draws. LiveKit runs one room per node in its open-source distributed mode, with Redis for room data and messages, a region-aware node selector, and an egress service that records by joining the room as a hidden participant; its cloud joins servers in several data centres into one session as a mesh. Jitsi Meet splits signaling (Prosody and Jicofo) from media (Jitsi Videobridge), lets Jicofo pick a bridge per conference, and cascades bridges across regions, which cut next-hop round trip time from 223 ms to 158 ms on meet.jit.si. mediasoup is an SFU library where each worker runs on one CPU core, and routers are joined with pipeToRouter for larger rooms and broadcasts. Under all of them are the same IETF and W3C standards: ICE, STUN and TURN for getting through NATs, SDP offer and answer for setup, DTLS-SRTP for mandatory encryption, simulcast and SVC for layers, and GCC-style congestion control.
Sources
If any of these topics are fuzzy, the interviewer will catch it. Each lesson is 15 to 60 minutes with diagrams, code, and a quiz.
WebRTC
intermediate / cloud infrastructure
UDP
intermediate / cloud infrastructure
NAT
intermediate / cloud infrastructure
WebSockets
intermediate / messaging event systems
Pub/Sub Pattern
intermediate / messaging event systems
Video Encoding
intermediate / web content delivery
Streaming Protocols
intermediate / web content delivery
Encryption in Transit
intermediate / security architecture
Latency
foundation / core fundamentals
Bandwidth
foundation / core fundamentals
Latency-Based Routing
foundation / load balancing proxies
Global Server Load Balancing (GSLB)
foundation / load balancing proxies
interview readiness
Three questions from this guide. Answer them without scrolling up, the way you would have to in the room.
India: UPI, cards or netbanking through Razorpay. Elsewhere: card or PayPal. Download at once from My packs.
NEWSystem Design Hands-On
Postgres Sharding: Complete Hands-On (PgBouncer + Citus). 2 h 36 min and 20 chapters: one PostgreSQL loaded until it breaks, then four shards behind a router you write, PgBouncer and Citus, with the 139-page slide deck. The first 15 minutes are free to watch.
Free PDF · 79 pages
25 real tech interview questions, answered in full
Five from each of our AI, GenAI, Inference, Maths for ML and Forward Deployed packs. Each with a diagram and a model answer. Free by email.
free tool
Check these numbers yourself
Put in your own guesses for a video conferencing system and see requests per second, storage, bandwidth and servers, with every sum written out.
Open the Capacity EstimatorIt is really nice and good Please join the course