WebRTC: що це, архітектура та принцип роботи

Автор: IT Sectr Опубліковано: 2026-06-01 Час читання: 9 хв

WebRTC — це відкрита технологія для передачі аудіо, відео та даних у реальному часі між пристроями напряму, без проміжних серверів. За даними WebRTC Project (2026), стандарт підтримується всіма сучасними браузерами та мобільними платформами, забезпечуючи затримку менше 500 мс. WebRTC використовує протоколи ICE, STUN, TURN для встановлення з'єднання навіть за NAT та фаєрволами.

Головне

  • WebRTC — відкритий стандарт для peer-to-peer передачі аудіо, відео та даних у реальному часі без плагінів.
  • Архітектура включає три шари: API додатків (getUserMedia, RTCPeerConnection), транспорт (ICE, STUN, TURN) та безпека (DTLS, SRTP).
  • NAT traversal вирішується через ICE framework з використанням STUN-серверів (публічна IP) та TURN-релеїв (обхід симетричних NAT).
  • Мобільні SDK — Google WebRTC для Android та iOS надають нативні API для голосових та відеодзвінків.
  • Сигналізація (SDP обмін) не входить до WebRTC і реалізується через WebSocket, SIP або власний протокол.

Що таке WebRTC

WebRTC (Web Real-Time Communication) — це проєкт з відкритим кодом, ініційований Google у 2011 році та стандартизований W3C (JavaScript API) та IETF (протоколи). Основне завдання — забезпечити низькозатримковий зв'язок між браузерами та додатками без встановлення плагінів або стороннього ПЗ.

На відміну від традиційних рішень (RTMP, HLS), де відео проходить через сервер, WebRTC використовує peer-to-peer архітектуру: дані передаються напряму між учасниками. Це дає затримку 200-500 мс проти 3-10 секунд у HLS — різниця, критична для голосових та відеодзвінків, стрімінгу ігор та віддаленої хірургії.

За даними Google WebRTC Team (2025), технологія використовується в додатках із загальною аудиторією понад 5 мільярдів встановлень: Google Meet, WhatsApp, Discord, Telegram, Zoom (частково). Понад 85% венчурних стартапів у сфері telehealth та edtech обирають WebRTC як базовий транспорт реального часу.

Мобільна розробка отримала повноцінний WebRTC у 2013 році з виходом libjingle_peerconnection — нативної реалізації для Android та iOS. Зараз обидві платформи мають стабільні SDK з підтримкою апаратного кодування H.264 та VP8, камери, мікрофона та динаміків пристрою.

Архітектура та протоколи WebRTC

Архітектура WebRTC складається з трьох рівнів. Верхній рівень — JavaScript API (або нативний API для мобільних платформ), середній — транспортні протоколи, нижній — кодеки та безпека. Кожен рівень вирішує своє завдання, але всі вони обов'язкові для встановлення з'єднання.

Основні API WebRTC

MediaStream (getUserMedia) — захоплення аудіо та відео з мікрофона та камери пристрою. RTCPeerConnection — керування P2P з'єднанням: кодування, транспорт, адаптація бітрейту. RTCDataChannel — передача довільних даних (текст, файли, двійкові повідомлення) по тому ж каналу.

js
// JavaScript API WebRTC (браузерний приклад)
const pc = new RTCPeerConnection({
    iceServers: [
        { urls: "stun:stun.l.google.com:19302" }
    ]
});

pc.onicecandidate = (event) => {
    if (event.candidate) {
        sendToPeer(JSON.stringify(event.candidate));
    }
};

const offer = await pc.createOffer();
await pc.setLocalDescription(offer);

Протоколи реального часу

WebRTC використовує SRTP (Secure Real-Time Transport Protocol) для аудіо та відео — захищена версія RTP з шифруванням AES-128. Керування сесією йде по SCTP (Stream Control Transmission Protocol) через DTLS. Кожен потік даних шифрується обов'язково: у WebRTC немає незахищеного режиму.

  • SRTP/SRTCP — зашифрована передача медіа-потоків із захистом від повторного відтворення (replay attack)
  • DTLS-SRTP — встановлення ключів шифрування через Datagram TLS поверх UDP
  • SCTP — надійна або частково надійна доставка даних для DataChannel
  • ICE (Interactive Connectivity Establishment) — фреймворк для пошуку мережевого шляху між пірами
  • Trickle ICE — інкрементальна версія ICE, де кандидати надсилаються в міру виявлення, прискорюючи встановлення з'єднання

NAT traversal: ICE, STUN та TURN

Головна технічна складність WebRTC — встановлення P2P-з'єднання між пристроями, які знаходяться за NAT (Network Address Translation). Без спеціальних механізмів пристрої не можуть напряму звернутися один до одного, тому що їх локальні IP-адреси не видно з інтернету.

STUN — визначення публічної адреси

STUN (Session Traversal Utilities for NAT) — сервер, який відповідає на питання «Яка моя публічна IP та порт?». Клієнт надсилає запит на STUN-сервер, сервер бачить його публічну адресу та повертає її клієнту. Google публічно підтримує STUN-сервер stun:stun.l.google.com:19302.

swift
// WebRTC на iOS — налаштування ICE серверів
import WebRTC

let config = RTCConfiguration()
config.iceServers = [
    RTCIceServer(
        urlStrings: ["stun:stun.l.google.com:19302"]
    ),
    RTCIceServer(
        urlStrings: ["turn:turn.example.com:3478"],
        username: "user",
        credential: "password"
    )
]

let pc = RTCPeerConnection(configuration: config)

TURN — релейне з'єднання

TURN (Traversal Using Relays around NAT) — сервер-ретранслятор для випадків, коли STUN не допомагає (симетричний NAT або корпоративні фаєрволи). У цьому режимі всі дані проходять через TURN-сервер — це знижує швидкість та збільшує затримку, але гарантує з'єднання в 99% випадків.

TURN — найдорожчий компонент інфраструктури WebRTC, оскільки сервер пропускає через себе весь медіа-трафік. За даними Coturn Project (2025), типовий TURN-сервер на 8 vCPU та 16 ГБ RAM обробляє близько 200 одночасних аудіо-дзвінків або 40 відеодзвінків у HD-якості.

Процес ICE

ICE збирає всі можливі кандидати (локальна IP, публічна IP через STUN, релейна через TURN) і намагається встановити з'єднання в порядку пріоритету. Як тільки хоча б одна пара кандидатів (локальний-віддалений) проходить перевірку connectivity check, з'єднання вважається встановленим.

  • Host candidates — локальна IP адреса пристрою в підмережі (найшвидший, але не працює за NAT)
  • Server Reflexive candidates — публічна IP, отримана через STUN сервер
  • Relay candidates — адреса TURN-сервера, через який йде ретрансляція (найповільніший, найнадійніший)

WebRTC у мобільних додатках

Для мобільної розробки Google підтримує libWebRTC — нативну бібліотеку для Android (AAR) та iOS (XCFramework). Бібліотека включає весь стек протоколів, кодеки (VP8, VP9, H.264, AV1) та апаратне прискорення кодування/декодування.

WebRTC на Android

Android SDK надає класи PeerConnectionFactory, PeerConnection, MediaStream. Додаток створює фабрику, налаштовує відео-кодеки, захоплює потік з камери через VideoCapturer та встановлює піринг через SDP offer/answer.

java
// Android WebRTC — ініціалізація
import org.webrtc.*;

PeerConnectionFactory.Initialize(PeerConnectionFactory.InitializationOptions
    .builder(context)
    .setFieldTrials("WebRTC-H264-HighProfile/Enabled/")
    .createInitializationOptions());

PeerConnectionFactory factory =
    PeerConnectionFactory.builder()
        .setVideoDecoderFactory(new DefaultVideoDecoderFactory(eglBase))
        .setVideoEncoderFactory(new DefaultVideoEncoderFactory(eglBase, true, true))
        .createPeerConnectionFactory();

WebRTC на iOS

iOS SDK використовує Objective-C API з обгортками RTCPeerConnectionFactory, RTCCameraVideoCapturer, RTCVideoTrack. Апаратне кодування H.264 доступне через VideoToolbox. Для відображення відео використовується RTCMTLVideoView (Metal) або RTCVideoRenderer.

swift
// iOS WebRTC — захоплення відео з камери
let factory = RTCPeerConnectionFactory()
let capturer = RTCCameraVideoCapturer(delegate: factory)

// Вибір камери (передня/задня)
guard let device = RTCCameraVideoCapturer
    .captureDevices().first(where: {
        $0.position == .front
    }) else { return }

// Запуск захоплення з максимальним FPS
capturer.startCapture(
    with: device,
    format: RTCCameraVideoCapturer
        .supportedFormats(for: device).last!,
    fps: 30
)

Для відеодзвінків у production мобільні додатки зазвичай використовують SDK-обгортки над libWebRTC: Twilio Video, Agora, Daily.co. Ці SDK спрощують сигналізацію, керування кімнатами та надають готові UI-компоненти для відображення відео-сітки учасників.

Сигналізація та встановлення з'єднання

WebRTC не специфікує протокол сигналізації — обмін SDP (Session Description Protocol) повідомленнями між пірами. Розробник сам обирає транспорт для сигналізації: WebSocket, MQTT, SIP, XMPP або REST API. Сигналізація доставляє offer, answer та ICE-кандидати від одного піра до іншого.

SDP обмін Offer/Answer

Процес починається зі створення offer (ініціатор описує свої медіа-можливості), передається через сигналізацію другому піру, який відповідає answer. Після обміну SDP кожен пір встановлює ICE та запускає DTLS-SRTP для шифрування потоку.

kotlin
// Android — створення та відправка offer
private fun startCall(peerConnection: PeerConnection) {
    val constraints = MediaConstraints().apply {
        mandatory["OfferToReceiveAudio"] = "true"
        mandatory["OfferToReceiveVideo"] = "true"
    }

    peerConnection.createOffer(object : SdpObserver {
        override fun onCreateSuccess(sdp: SessionDescription) {
            peerConnection.setLocalDescription(this, sdp)
            // Надсилання sdp.description на сигналінг-сервер
            sendSdpOffer(sdp.description)
        }
    }, constraints)
}

Протоколи сигналізації

Для мобільних додатків найбільш популярна сигналізація через WebSocket — двоспрямований канал поверх TCP, який тримає постійне з'єднання з сервером. Сервер сигналізації — часто окремий мікросервіс (Node.js, Golang, Elixir), який маршрутизує повідомлення між учасниками кімнати.

  • WebSocket — постійне двоспрямоване з'єднання, мінімальний overhead, стандартний вибір для сигналізації
  • SIP over WebSocket — стандартний протокол VoIP, інтегрується з існуючою телефонною інфраструктурою
  • MQTT — легкий pub/sub протокол для IoT та слабких мереж, але з більшою затримкою
  • Matrix / XMPP — децентралізовані протоколи для додатків з вимогою приватності

Після завершення ICE та DTLS-SRTP сигналізація більше не бере участі в передачі даних — весь медіа-трафік йде напряму P2P (або через TURN-релей). Сервер сигналізації може бути вимкнений, не перериваючи активні дзвінки. Це ключова перевага децентралізованої архітектури WebRTC.

Часті запитання

Чим WebRTC відрізняється від RTMP або HLS?

RTMP та HLS — серверні протоколи із затримкою 3-10 секунд, де всі дані проходять через сервер. WebRTC — peer-to-peer із затримкою 200-500 мс. RTMP підходить для стрімінгу на велику аудиторію, WebRTC — для інтерактивних дзвінків та ігор.

Чи обов'язково використовувати TURN сервер?

Ні, TURN потрібен тільки для випадків, коли P2P не проходить (симетричний NAT, корпоративні фаєрволи). За статистикою Google, близько 15% з'єднань потребують TURN. Для production рекомендується мати TURN-сервер як fallback для 100% надійності.

Які кодеки підтримує WebRTC у мобільних додатках?

Обов'язкові кодеки: VP8 (всі платформи) та H.264 (з апаратним прискоренням на iOS/Android). Опціонально: VP9 (краще стиснення, менший бітрейт) та AV1 (надефективний, але вимогливий до CPU). Аудіо: Opus (основний) та G.711 (PCMU/PCMA).

Чи можна використовувати WebRTC тільки для передачі даних без відео?

Так, через RTCDataChannel. Це повноцінний канал для передачі довільних даних: текст, файли, двійкові повідомлення. DataChannel працює поверх SCTP з налаштовуваною надійністю (частково надійна доставка для ігор, надійна для файлів).

Як забезпечити запис дзвінка на базі WebRTC?

Через MediaRecorder API на клієнті або через SFU (Selective Forwarding Unit) — сервер, який отримує всі потоки учасників і може їх записувати. Другий варіант надійніший, оскільки запис не залежить від пристрою учасника та не переривається при відключенні.

Підсумки

  • WebRTC — відкритий стандарт P2P реального часу з latency 200-500 мс, підтримуваний всіма браузерами та мобільними платформами.
  • Архітектура базується на трьох шарах: медіа-API (getUserMedia, RTCPeerConnection), ICE-транспорт (STUN/TURN) та безпека (DTLS-SRTP).
  • NAT traversal вирішується ICE фреймворком — від прямого P2P (host) до релейного TURN (relay) для обходу будь-яких фаєрволів.
  • Мобільні SDK від Google забезпечують апаратне кодування H.264 та VP8, захоплення камери та мікрофона на Android та iOS.
  • Сигналізація (SDP обмін) не входить до WebRTC і реалізується через WebSocket, SIP або будь-який протокол, доступний розробнику.
  • Production SDK (Twilio, Agora, Daily.co) поверх libWebRTC спрощують керування кімнатами, сигналізацію та UI-компоненти.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також