Что такое WebRTC и для чего он нужен?

«Что такое WebRTC и для чего он нужен?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

WebRTC (Web Real-Time Communication) — это открытый стандарт и набор API, позволяющий устанавливать прямое (peer-to-peer, P2P) соединение между браузерами или приложениями для передачи в реальном времени:

  • Аудио и видео потоков.
  • Произвольных данных (файлы, текстовые сообщения).

Основные сценарии использования: видеозвонки (Zoom, Meet в браузере), стриминг, файлообмен, онлайн-игры и совместные приложения.

Ключевые API:

  1. MediaStream (getUserMedia): Получение доступа к камере и микрофону пользователя.
  2. RTCPeerConnection: Основной API для установки P2P-соединения, обработки кодека, шифрования и передачи медиаданных.
  3. RTCDataChannel: Канал для передачи любых бинарных или текстовых данных с низкой задержкой.

Пример фрагмента кода для начала видеозвонка:

// 1. Получить видеопоток с камеры пользователя
const localStream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true });

// 2. Создать P2P-соединение
const peerConnection = new RTCPeerConnection(configuration);

// 3. Добавить локальный поток в соединение
localStream.getTracks().forEach(track => peerConnection.addTrack(track, localStream));

// 4. Обработка удаленного потока (видео собеседника)
peerConnection.ontrack = (event) => {
    document.getElementById('remoteVideo').srcObject = event.streams[0];
};
// Далее следует обмен SDP-предложениями/ответами и ICE-кандидатами через сигнальный сервер

Важное замечание: Для обхода NAT и файрволов WebRTC требует сигнальный сервер (для обмена метаданными) и часто STUN/TURN-серверы (для установки самого соединения).