Определение простыми словами
WebRTC — это набор JavaScript API и сетевых протоколов, благодаря которому два браузера или мобильных приложения соединяются напрямую и обмениваются медиа-потоками либо произвольными данными. Сервер нужен только для первоначального согласования: после этого пакеты идут от пользователя к пользователю через UDP с шифрованием DTLS-SRTP.
Технологию двигают Google, Mozilla и Apple. Она встроена в Chrome, Firefox, Safari, Edge и в нативные SDK для iOS и Android. WebRTC используют видеозвонки, облачные геймпады, телемедицина, торговые терминалы и P2P-файлообменники.
Сравнение WebRTC, WebSocket и HLS
| Параметр | WebRTC | WebSocket | HLS |
|---|---|---|---|
| Транспорт | UDP + ICE/STUN/TURN | TCP поверх HTTP | HTTP-сегменты |
| Задержка | 50–250 мс | 100–500 мс | 6–30 с |
| Топология | P2P или SFU | Клиент-сервер | CDN, односторонняя |
| Шифрование | DTLS-SRTP обязательно | WSS опционально | HTTPS опционально |
| Типичные кейсы | Звонки, конференции | Чат, биржевые котировки | Прямые трансляции |
Кейсы использования
- Видеоконференции — Google Meet, Zoom Web, Яндекс Телемост.
- Облачные игры и удалённые рабочие столы с откликом до 80 мс.
- Контакт-центры с переводом на оператора прямо из браузера.
- P2P-передача больших файлов между пользователями без загрузки на сервер.
- Негатив: не подходит для архивных трансляций тысячам зрителей — для широковещания дешевле HLS или DASH.
- Негатив: за NAT симметричного типа звонок не пройдёт без TURN-сервера, а это платный трафик.
Технические детали
# Поднять coturn-сервер (STUN+TURN) для обхода NAT
sudo apt install coturn
sudo sed -i 's/#TURNSERVER_ENABLED/TURNSERVER_ENABLED/' /etc/default/coturn
cat > /etc/turnserver.conf <<EOF
listening-port=3478
fingerprint
lt-cred-mech
user=webrtc:strongPass
realm=example.com
total-quota=100
stale-nonce=600
cert=/etc/letsencrypt/live/example.com/fullchain.pem
pkey=/etc/letsencrypt/live/example.com/privkey.pem
EOF
sudo systemctl restart coturn
# Проверка
turnutils_uclient -v -t -u webrtc -w strongPass turn.example.com
В клиенте RTCPeerConnection получает ICE-кандидатов от STUN, при отказе — релей через TURN. Полоса контролируется через REMB и Transport-CC, а кодек VP9 SVC даёт адаптивное качество без перекодирования на сервере.
🔥 Где это применяется
Частые вопросы
Нужен ли TURN-сервер всегда?
Нет. Около 70 % соединений проходят через STUN. TURN включается, если оба клиента за симметричным NAT либо корпоративный фаервол блокирует UDP.
Можно ли записать звонок WebRTC?
Да, через серверный SFU (Janus, mediasoup, LiveKit) или MediaRecorder API на стороне клиента. P2P без сервера запись не сохранит.
Какая нагрузка на VPS под TURN?
Один поток HD-видео — до 2,5 Мбит/с в обе стороны. На 100 параллельных звонков нужен канал минимум 250 Мбит/с и 4 vCPU.