WebRTC е отворена технология за предаване на аудио, видео и данни в реално време между устройства директно, без междинни сървъри. Според WebRTC Project (2026), стандартът се поддържа от всички съвременни браузъри и мобилни платформи, осигурявайки латентност под 500 ms. WebRTC използва протоколите ICE, STUN, TURN за установяване на връзка дори зад NAT и защитни стени.
Основни точки
WebRTC (Web Real-Time Communication) — проект с отворен код, започнат от Google през 2011 г. и стандартизиран от W3C (JavaScript API) и IETF (протоколи). Основната задача е да осигури комуникация с ниска латентност между браузъри и приложения без инсталиране на плъгини или софтуер на трети страни.
За разлика от традиционните решения (RTMP, HLS), където видеото преминава през сървър, WebRTC използва peer-to-peer архитектура: данните се предават директно между участниците. Това осигурява закъснение от 200-500 ms спрямо 3-10 секунди при HLS — критична разлика за гласови и видео разговори, стрийминг на игри и дистанционна хирургия.
Според Google WebRTC Team (2025), технологията се използва в приложения с общо над 5 милиарда инсталации: Google Meet, WhatsApp, Discord, Telegram, Zoom (частично). Над 85% от стартъпите с рисков капитал в областта на telehealth и edtech избират WebRTC като основен транспорт в реално време.
Мобилното развитие получи напълно функционален WebRTC през 2013 г. с пускането на libjingle_peerconnection — native имплементация за Android и iOS. В момента и двете платформи имат стабилни SDK с поддръжка на хардуерно кодиране на H.264 и VP8, камера, микрофон и високоговорители на устройството.
Архитектурата на WebRTC се състои от три нива. Горното ниво — JavaScript API (или native API за мобилни платформи), средното — транспортни протоколи, долното — кодеци и сигурност. Всяко ниво решава своя задача, но всички са задължителни за установяване на връзка.
MediaStream (getUserMedia) — заснемане на аудио и видео от микрофона и камерата на устройството. RTCPeerConnection — управление на P2P връзка: кодиране, транспорт, адаптация на битрейта. RTCDataChannel — предаване на произволни данни (текст, файлове, двоични съобщения) по същия канал.
// 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 няма незащитен режим.
Основната техническа трудност на WebRTC е установяването на P2P връзка между устройства, които се намират зад NAT (Network Address Translation). Без специални механизми устройствата не могат директно да се свържат едно с друго, защото локалните им IP адреси не се виждат от интернет.
STUN (Session Traversal Utilities for NAT) — сървър, който отговаря на въпроса „какъв е моят публичен IP и порт?”. Клиентът изпраща заявка към STUN сървъра, сървърът вижда неговия публичен адрес и го връща на клиента. Google публично поддържа STUN сървър stun:stun.l.google.com:19302.
// 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 (Traversal Using Relays around NAT) — сървър за ретрансмисия за случаите, когато STUN не помага (симетричен NAT или корпоративни защитни стени). В този режим всички данни преминават през TURN сървъра — това намалява скоростта и увеличава закъснението, но гарантира връзка в 99% от случаите.
TURN е най-скъпият компонент на инфраструктурата на WebRTC, тъй като сървърът пропуска целия медиен трафик през себе си. Според Coturn Project (2025), типичен TURN сървър с 8 vCPU и 16 GB RAM обработва около 200 едновременни аудио разговора или 40 видео разговора в HD качество.
ICE събира всички възможни кандидати (локален IP, публичен IP чрез STUN, релеен чрез TURN) и се опитва да установи връзка по приоритет. Щом поне една двойка кандидати (локален-отдалечен) премине connectivity check проверка, връзката се счита за установена.
За мобилно развитие Google поддържа libWebRTC — native библиотека за Android (AAR) и iOS (XCFramework). Библиотеката включва целия стек от протоколи, кодеци (VP8, VP9, H.264, AV1) и хардуерно ускорение на кодиране/декодиране.
Android SDK предоставя класовете PeerConnectionFactory, PeerConnection, MediaStream. Приложението създава фабрика, конфигурира видео кодеците, заснема потока от камерата чрез VideoCapturer и установява peer-to-peer връзка чрез SDP offer/answer.
// 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();
iOS SDK използва Objective-C API с обвивките RTCPeerConnectionFactory, RTCCameraVideoCapturer, RTCVideoTrack. Хардуерното кодиране на H.264 е достъпно чрез VideoToolbox. За показване на видео се използва RTCMTLVideoView (Metal) или RTCVideoRenderer.
// 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
)
За видео разговори в производствена среда мобилните приложения обикновено използват SDK обвивки над libWebRTC: Twilio Video, Agora, Daily.co. Тези SDK опростяват сигнализацията, управлението на стаи и предоставят готови UI компоненти за показване на видео мрежата на участниците.
WebRTC не специфицира протокол за сигнализация — обмен на SDP (Session Description Protocol) съобщения между пирове. Разработчикът сам избира транспорта за сигнализация: WebSocket, MQTT, SIP, XMPP или REST API. Сигнализацията доставя offer, answer и ICE кандидати от един пир до друг.
Процесът започва със създаване на offer (инициаторът описва своите медийни възможности), предава се чрез сигнализация до втория пир, който отговаря с answer. След обмена на SDP всеки пир стартира ICE и започва DTLS-SRTP за криптиране на потока.
// 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), която маршрутизира съобщения между участниците в стаята.
След завършване на ICE и DTLS-SRTP, сигнализацията вече не участва в предаването на данни — целият медиен трафик върви директно P2P (или чрез TURN реле). Сървърът за сигнализация може да бъде изключен без прекъсване на активните разговори. Това е основното предимство на децентрализираната архитектура на WebRTC.
Често задавани въпроси
RTMP и HLS са сървърни протоколи със закъснение 3-10 секунди, при които всички данни преминават през сървър. WebRTC е peer-to-peer със закъснение 200-500 ms. RTMP е подходящ за стрийминг към голяма аудитория, WebRTC — за интерактивни разговори и игри.
Не, TURN е необходим само в случаите, когато P2P не работи (симетричен NAT, корпоративни защитни стени). Според статистика на Google, около 15% от връзките изискват TURN. За производствена среда се препоръчва да има TURN сървър като резервен вариант за 100% надеждност.
Задължителни кодеци: VP8 (всички платформи) и H.264 (с хардуерно ускорение на iOS/Android). По избор: VP9 (по-добра компресия, по-нисък битрейт) и AV1 (суперефективен, но изискващ за CPU). Аудио: Opus (основен) и G.711 (PCMU/PCMA).
Да, чрез RTCDataChannel. Това е напълно функционален канал за предаване на произволни данни: текст, файлове, двоични съобщения. DataChannel работи през SCTP с конфигурируема надеждност (частично надеждна доставка за игри, надеждна за файлове).
Чрез MediaRecorder API от страна на клиента или чрез SFU (Selective Forwarding Unit) — сървър, който получава всички потоци на участниците и може да ги записва. Вторият вариант е по-надежден, тъй като записът не зависи от устройството на участника и не се прекъсва при изключване.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.