WebRTC изначально был спроектирован как peer-to-peer, но для масштабирования используются медиа-серверы. Архитектура влияет на нагрузку и масштабируемость.
- P2P (mesh): каждый клиент шлёт свой поток каждому другому. Работает до 4-5 участников, потом нагрузка на upstream становится непомерной.
- SFU (Selective Forwarding Unit): сервер пересылает потоки между клиентами без декодирования. Низкая нагрузка на CPU, средняя на сеть. Janus, mediasoup, LiveKit.
- MCU (Multipoint Conferencing Unit): сервер декодирует, миксует и кодирует обратно. Высокая нагрузка на CPU, низкая на клиентов. Jitsi с lib-jitsi-meet.
- Гибрид: SFU для основной массы + MCU для слабых клиентов (мобильных).
- Simulcast: клиент отправляет несколько качеств одновременно, SFU выбирает нужное для каждого получателя.
- SVC (Scalable Video Coding): одно видео в нескольких разрешениях в одном потоке, более эффективно чем simulcast.
Для большинства задач SFU - оптимальный выбор. На VPS L (4 vCPU, 8GB RAM) Janus или mediasoup обслуживает конференцию на 20-30 участников с FullHD.