WebRTC (Web Real-Time Communication) — это открытый стандарт, который позволяет браузерам и мобильным приложениям устанавливать прямое P2P-соединение для передачи аудио, видео и произвольных данных без установки плагинов или стороннего ПО.
Зачем нужен WebRTC?
Как это работает технически
Почему не обойтись без сервера?
Хотя WebRTC и P2P, для первого рукопожатия (обмена метаданными — SDP и ICE-кандидатами) всё равно нужен сигнальный сервер. Он не передаёт медиа-трафик, а только помогает клиентам найти друг друга. После установления соединения трафик идёт напрямую.
Проблема NAT и решение
Большинство пользователей сидят за NAT, поэтому прямое соединение невозможно. Для преодоления используются STUN и TURN серверы:
Код «Hello, world!» — видеозвонок за 30 строк
Где тестировать
Подводные камни
Итого
WebRTC — это уже не будущее, а настоящее: Zoom, Google Meet, Telegram-звонки, Discord, TikTok-стримы — всё работает на нём. Если вашему проекту нужно реальное время, но вы не хотите писать нативные приложения — начинайте с WebRTC.
Полезные ресурсы
Зачем нужен WebRTC?
- Видеозвонки и конференции (Zoom, Google Meet, Discord)
- Файлообмен без загрузки на сервер
- Онлайн-трансляции с низкой задержкой
- Игры и совместные редакторы в реальном времени
Как это работает технически
- getUserMedia — запрашивает доступ к камере и микрофону.
- RTCPeerConnection — устанавливает защищённое соединение между браузерами.
- RTCDataChannel — передаёт любые данные (текст, файлы, игровые команды) с низкой задержкой.
Почему не обойтись без сервера?
Хотя WebRTC и P2P, для первого рукопожатия (обмена метаданными — SDP и ICE-кандидатами) всё равно нужен сигнальный сервер. Он не передаёт медиа-трафик, а только помогает клиентам найти друг друга. После установления соединения трафик идёт напрямую.
Проблема NAT и решение
Большинство пользователей сидят за NAT, поэтому прямое соединение невозможно. Для преодоления используются STUN и TURN серверы:
- STUN — помогает клиенту узнать свой публичный IP и порт.
- TURN — ретранслирует трафик, когда прямое соединение не удаётся (дорого, но надёжно).
Код «Hello, world!» — видеозвонок за 30 строк
JavaScript:
// 1. Запрашиваем камеру и микрофон
const localStream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true });
// 2. Отображаем себя
document.querySelector('video#local').srcObject = localStream;
// 3. Создаём соединение
const pc = new RTCPeerConnection({ iceServers: [{ urls: 'stun:stun.l.google.com:19302' }] });
// 4. Добавляем треки
localStream.getTracks().forEach(track => pc.addTrack(track, localStream));
// 5. Создаём оффер и отправляем через сигнальный сервер
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
sendToRemote(offer); // ваша реализация сигнала
Где тестировать
-
У вас нет разрешения на просмотр ссылки, пожалуйста Вход или Регистрация
-
У вас нет разрешения на просмотр ссылки, пожалуйста Вход или Регистрация
-
У вас нет разрешения на просмотр ссылки, пожалуйста Вход или Регистрация
Подводные камни
- HTTPS обязателен (кроме localhost).
- iOS разрешил WebRTC только с 11-й версии Safari.
- TURN-сервер может «съесть» трафик — будьте готовы к счетам за гигабайты.
- Кодеки: VP8/VP9 и H264 поддерживаются не всеми клиентами одинаково.
Итого
WebRTC — это уже не будущее, а настоящее: Zoom, Google Meet, Telegram-звонки, Discord, TikTok-стримы — всё работает на нём. Если вашему проекту нужно реальное время, но вы не хотите писать нативные приложения — начинайте с WebRTC.
Полезные ресурсы
-
У вас нет разрешения на просмотр ссылки, пожалуйста Вход или Регистрация
-
У вас нет разрешения на просмотр ссылки, пожалуйста Вход или Регистрация
-
У вас нет разрешения на просмотр ссылки, пожалуйста Вход или Регистрация