For many viewers, each browser sends one stream to a media server. A Selective Forwarding Unit (SFU) forwards packets without decoding, choosing a lower simulcast layer for weak connections; an MCU decodes and mixes, at far higher CPU cost. WHIP (RFC 9725, March 2025) standardizes publishing as one HTTP POST of an SDP offer; the WHEP draft covers playback.
| Server | Language, license | Model | Good fit |
|---|---|---|---|
| Red5 | Java, Apache-2.0 | RTMP; paid Pro adds WebRTC | Live broadcasts |
| mediasoup | C++/Node.js, ISC | SFU library | Custom apps |
| Janus 691,362 | C, GPL-3.0 | Plugin server | Rooms, SIP gateways |
| LiveKit 211,381 | Go, Apache-2.0 | SFU, SDKs, cloud | Rooms, AI agents |
mediasoup leaves signaling to you, while LiveKit's client (npm 2,036 install livekit-client) reduces a call to new Room(), room.connect(url, token) and room.localParticipant.enableCameraAndMicrophone(), with your back end issuing the token.