WebRTC: nədir, arxitekturası və iş prinsipi

Müəllif: IT Sectr Dərc olunub: 2026-06-01 Oxuma vaxtı: 9 dəq

WebRTC cihazlar arasında birbaşa, ara serverlər olmadan real vaxtda audio, video və məlumat ötürmək üçün açıq texnologiyadır. WebRTC Project (2026)-ya görə, standart bütün müasir brauzerlər və mobil platformalar tərəfindən dəstəklənir, 500 ms-dən aşağı latency təmin edir. WebRTC NAT və firewall arxasında belə əlaqə qurmaq üçün ICE, STUN, TURN protokollarından istifadə edir.

Əsas məqamlar

  • WebRTC — plaginlər olmadan real vaxtda peer-to-peer audio, video və məlumat ötürülməsi üçün açıq standart.
  • Arxitektura üç təbəqəni əhatə edir: tətbiq API-si (getUserMedia, RTCPeerConnection), nəqliyyat (ICE, STUN, TURN) və təhlükəsizlik (DTLS, SRTP).
  • NAT traversal STUN serverləri (ictimai IP) və TURN relay-lərindən (simmetrik NAT-ı keçmək) istifadə edərək ICE framework-i vasitəsilə həll edilir.
  • Mobil SDK — Google WebRTC Android və iOS üçün səsli və video zənglər üçün native API təmin edir.
  • Siqnalizasiya (SDP mübadiləsi) WebRTC-yə daxil deyil və WebSocket, SIP və ya öz protokol vasitəsilə həyata keçirilir.

WebRTC nədir

WebRTC (Web Real-Time Communication) — 2011-ci ildə Google tərəfindən başladılan və W3C (JavaScript API) və IETF (protokollar) tərəfindən standartlaşdırılan açıq mənbəli layihədir. Əsas vəzifə plaginlər və ya üçüncü tərəf proqramı quraşdırmadan brauzerlər və tətbiqlər arasında aşağı gecikməli rabitəni təmin etməkdir.

Ənənəvi həllərdən (RTMP, HLS) fərqli olaraq, videonun serverdən keçdiyi yerdə, WebRTC peer-to-peer arxitekturasından istifadə edir: məlumatlar birbaşa iştirakçılar arasında ötürülür. Bu, HLS-də 3-10 saniyəyə qarşı 200-500 ms gecikmə təmin edir — səsli və video zənglər, oyun yayımı və uzaqdan cərrahiyyə üçün kritik fərqdir.

Google WebRTC Team (2025) məlumatlarına görə, texnologiya ümumi sayı 5 milyarddan çox quraşdırmaya malik tətbiqlərdə istifadə olunur: Google Meet, WhatsApp, Discord, Telegram, Zoom (qismən). Telehealth və edtech sahəsində vençur startaplarının 85%-dən çoxu real vaxt nəqliyyatı kimi WebRTC-ni seçir.

Mobil inkişaf 2013-cü ildə libjingle_peerconnection-in buraxılması ilə tam funksional WebRTC əldə etdi — Android və iOS üçün native tətbiq. Hal-hazırda hər iki platformada H.264 və VP8-in aparat kodlaşdırması, kamera, mikrofon və dinamik dəstəyi ilə sabit SDK-lar mövcuddur.

WebRTC arxitekturası və protokolları

WebRTC arxitekturası üç səviyyədən ibarətdir. Yuxarı səviyyə — JavaScript API (və ya mobil platformalar üçün native API), orta — nəqliyyat protokolları, aşağı — kodeklər və təhlükəsizlik. Hər səviyyə öz vəzifəsini həll edir, lakin hamısı əlaqə qurmaq üçün məcburidir.

WebRTC-nin əsas API-ləri

MediaStream (getUserMedia) — cihazın mikrofonu və kamerasından audio və videonun tutulması. RTCPeerConnection — P2P əlaqəsinin idarə edilməsi: kodlaşdırma, nəqliyyat, bitrate adaptasiyası. RTCDataChannel — eyni kanal vasitəsilə ixtiyari məlumatların ötürülməsi (mətn, fayllar, ikili mesajlar).

js
// JavaScript API WebRTC (brauzer nümunəsi)
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);

Real vaxt protokolları

WebRTC audio və video üçün SRTP (Secure Real-Time Transport Protocol) — AES-128 şifrələməsi ilə qorunan RTP versiyasından istifadə edir. Sessiyanın idarə edilməsi DTLS vasitəsilə SCTP (Stream Control Transmission Protocol) üzərindən gedir. Hər bir məlumat axını məcburi şəkildə şifrələnir: WebRTC-də qorunmayan rejim yoxdur.

  • SRTP/SRTCP — replay hücumlarından qorunma ilə media axınlarının şifrələnmiş ötürülməsi
  • DTLS-SRTP — UDP üzərindən Datagram TLS vasitəsilə şifrələmə açarlarının qurulması
  • SCTP — DataChannel üçün etibarlı və ya qismən etibarlı məlumat çatdırılması
  • ICE (Interactive Connectivity Establishment) — peer-lər arasında şəbəkə yolunun tapılması üçün framework
  • Trickle ICE — namizədlərin aşkar edildikcə göndərildiyi, əlaqə qurulmasını sürətləndirən ICE-in inkremental versiyası

NAT traversal: ICE, STUN və TURN

WebRTC-nin əsas texniki çətinliyi NAT (Network Address Translation) arxasında olan cihazlar arasında P2P əlaqəsinin qurulmasıdır. Xüsusi mexanizmlər olmadan cihazlar birbaşa bir-birinə müraciət edə bilməz, çünki onların lokal IP ünvanları internetdən görünmür.

STUN — ictimai ünvanın müəyyən edilməsi

STUN (Session Traversal Utilities for NAT) — sualına cavab verən server “mənim ictimai IP-m və portum nədir?”. Müştəri STUN serverinə sorğu göndərir, server onun ictimai ünvanını görür və müştəriyə qaytarır. Google açıq şəkildə STUN serverini dəstəkləyir stun:stun.l.google.com:19302.

swift
// iOS-da WebRTC — ICE serverlərinin konfiqurasiyası
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 — relay bağlantısı

TURN (Traversal Using Relays around NAT) — STUN-un kömək etmədiyi hallar üçün retranslyasiya serveri (simmetrik NAT və ya korporativ firewall-lar). Bu rejimdə bütün məlumatlar TURN serverindən keçir — bu sürəti azaldır və gecikməni artırır, lakin 99% hallarda əlaqəni təmin edir.

TURN WebRTC infrastrukturunun ən bahalı komponentidir, çünki server bütün media trafikini özündən keçirir. Coturn Project (2025) məlumatlarına görə, 8 vCPU və 16 GB RAM olan tipik TURN serveri təxminən 200 eyni vaxtda audio zəng və ya HD keyfiyyətində 40 video zəngi emal edir.

ICE prosesi

ICE bütün mümkün namizədləri (lokal IP, STUN vasitəsilə ictimai IP, TURN vasitəsilə relay) toplayır və prioritet sırasına uyğun olaraq əlaqə qurmağa çalışır. Ən azı bir cüt namizəd (lokal-uzaq) connectivity check yoxlamasından keçən kimi əlaqə qurulmuş sayılır.

  • Host candidates — cihazın alt şəbəkədə lokal IP ünvanı (ən sürətli, lakin NAT arxasında işləmir)
  • Server Reflexive candidates — STUN serveri vasitəsilə əldə edilmiş ictimai IP
  • Relay candidates — retranslyasiyanın getdiyi TURN serverinin ünvanı (ən yavaş, ən etibarlı)

Mobil tətbiqlərdə WebRTC

Mobil inkişaf üçün Google libWebRTC-ni dəstəkləyir — Android (AAR) və iOS (XCFramework) üçün native kitabxana. Kitabxana bütün protokol yığınını, kodekləri (VP8, VP9, H.264, AV1) və aparat kodlaşdırma/dekodlaşdırma sürətləndirilməsini əhatə edir.

Android-də WebRTC

Android SDK PeerConnectionFactory, PeerConnection, MediaStream siniflərini təqdim edir. Tətbiq fabrik yaradır, video kodekləri konfiqurasiya edir, VideoCapturer vasitəsilə kameradan axını tutur və SDP offer/answer vasitəsilə peer-to-peer əlaqəsi qurur.

java
// Android WebRTC — ilkinləşdirmə
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-da WebRTC

iOS SDK RTCPeerConnectionFactory, RTCCameraVideoCapturer, RTCVideoTrack örtükləri ilə Objective-C API-dən istifadə edir. H.264-ün aparat kodlaşdırması VideoToolbox vasitəsilə mövcuddur. Videonu göstərmək üçün RTCMTLVideoView (Metal) və ya RTCVideoRenderer istifadə olunur.

swift
// iOS WebRTC — kameradan video tutulması
let factory = RTCPeerConnectionFactory()
let capturer = RTCCameraVideoCapturer(delegate: factory)

// Kamera seçimi (ön/arxa)
guard let device = RTCCameraVideoCapturer
    .captureDevices().first(where: {
        $0.position == .front
    }) else { return }

// Maksimum FPS ilə tutulmanın başladılması
capturer.startCapture(
    with: device,
    format: RTCCameraVideoCapturer
        .supportedFormats(for: device).last!,
    fps: 30
)

Production-da video zənglər üçün mobil tətbiqlər adətən libWebRTC üzərində SDK örtüklərindən istifadə edir: Twilio Video, Agora, Daily.co. Bu SDK-lar siqnalizasiyanı, otaqların idarə edilməsini sadələşdirir və iştirakçıların video şəbəkəsini göstərmək üçün hazır UI komponentləri təqdim edir.

Siqnalizasiya və əlaqənin qurulması

WebRTC peer-lər arasında SDP (Session Description Protocol) mesaj mübadiləsinin siqnalizasiya protokolunu spesifikasiya etmir. Tərtibatçı siqnalizasiya üçün nəqliyyatı özü seçir: WebSocket, MQTT, SIP, XMPP və ya REST API. Siqnalizasiya offer, answer və ICE namizədlərini bir peerdən digərinə çatdırır.

SDP Offer/Answer mübadiləsi

Proses offer-in yaradılması ilə başlayır (təşəbbüsçü öz media imkanlarını təsvir edir), siqnalizasiya vasitəsilə ikinci peer-ə ötürülür, o da answer ilə cavab verir. SDP mübadiləsindən sonra hər bir peer ICE-i işə salır və axını şifrələmək üçün DTLS-SRTP-yə başlayır.

kotlin
// Android — offer yaradılması və göndərilməsi
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-un siqnalizasiya serverinə göndərilməsi
            sendSdpOffer(sdp.description)
        }
    }, constraints)
}

Siqnalizasiya protokolları

Mobil tətbiqlərdə ən populyar siqnalizasiya WebSocket vasitəsilədir — TCP üzərindən serverlə daimi əlaqə saxlayan ikitərəfli kanal. Siqnalizasiya serveri çox vaxt ayrıca mikroxidmətdir (Node.js, Golang, Elixir), otaq iştirakçıları arasında mesajları yönləndirir.

  • WebSocket — daimi ikitərəfli əlaqə, minimal overhead, siqnalizasiya üçün standart seçim
  • SIP over WebSocket — standart VoIP protokolu, mövcud telefon infrastrukturu ilə inteqrasiya olunur
  • MQTT — IoT və zəif şəbəkələr üçün yüngül pub/sub protokolu, lakin daha çox gecikmə ilə
  • Matrix / XMPP — məxfilik tələb edən tətbiqlər üçün mərkəzləşdirilməmiş protokollar

ICE və DTLS-SRTP tamamlandıqdan sonra siqnalizasiya artıq məlumat ötürülməsində iştirak etmir — bütün media trafiki birbaşa P2P (və ya TURN relay vasitəsilə) gedir. Siqnalizasiya serveri aktiv zəngləri kəsmədən söndürülə bilər. Bu, WebRTC-nin mərkəzləşdirilməmiş arxitekturasının əsas üstünlüyüdür.

Tez-tez verilən suallar

WebRTC RTMP və ya HLS-dən nə ilə fərqlənir?

RTMP və HLS — bütün məlumatların serverdən keçdiyi 3-10 saniyə gecikməli server protokollarıdır. WebRTC — 200-500 ms gecikməli peer-to-peer-dir. RTMP geniş auditoriyaya yayım üçün, WebRTC isə interaktiv zənglər və oyunlar üçün uyğundur.

TURN serverindən istifadə etmək məcburidir?

Xeyr, TURN yalnız P2P keçmədiyi hallarda lazımdır (simmetrik NAT, korporativ firewall-lar). Google statistikasına görə, əlaqələrin təxminən 15%-i TURN tələb edir. Production-da 100% etibarlılıq üçün TURN serverini fallback kimi saxlamaq tövsiyə olunur.

WebRTC mobil tətbiqlərdə hansı kodekləri dəstəkləyir?

Məcburi kodeklər: VP8 (bütün platformalar) və H.264 (iOS/Android-də aparat sürətləndirilməsi ilə). İstəyə bağlı: VP9 (daha yaxşı sıxılma, daha az bitrate) və AV1 (çox səmərəli, lakin CPU tələbkar). Audio: Opus (əsas) və G.711 (PCMU/PCMA).

WebRTC-ni yalnız video olmadan məlumat ötürmək üçün istifadə etmək olar?

Bəli, RTCDataChannel vasitəsilə. Bu, ixtiyari məlumatların ötürülməsi üçün tam funksional kanaldır: mətn, fayllar, ikili mesajlar. DataChannel SCTP üzərində işləyir və konfiqurasiya edilə bilən etibarlılığa malikdir (oyunlar üçün qismən etibarlı çatdırılma, fayllar üçün etibarlı).

WebRTC əsasında zəng yazısını necə təmin etmək olar?

Müştəri tərəfdə MediaRecorder API və ya SFU (Selective Forwarding Unit) — bütün iştirakçı axınlarını alan və onları yaza bilən server vasitəsilə. İkinci variant daha etibarlıdır, çünki yazı iştirakçının cihazından asılı deyil və qoşulma kəsilməsində dayanmır.

Nəticə

  • WebRTC — 200-500 ms gecikmə ilə real vaxt P2P açıq standartı, bütün brauzerlər və mobil platformalar tərəfindən dəstəklənir.
  • Arxitektura üç təbəqəyə əsaslanır: media-API (getUserMedia, RTCPeerConnection), ICE nəqliyyatı (STUN/TURN) və təhlükəsizlik (DTLS-SRTP).
  • NAT traversal ICE framework-i ilə həll edilir — birbaşa P2P (host) istənilən firewall-ları keçmək üçün relay TURN (relay) qədər.
  • Mobil SDK Google-dan Android və iOS-da H.264 və VP8 aparat kodlaşdırması, kamera və mikrofon tutulmasını təmin edir.
  • Siqnalizasiya (SDP mübadiləsi) WebRTC-yə daxil deyil və WebSocket, SIP və ya tərtibatçı üçün əlçatan istənilən protokol vasitəsilə həyata keçirilir.
  • Production SDK (Twilio, Agora, Daily.co) libWebRTC üzərində otaqların idarə edilməsini, siqnalizasiyanı və UI komponentlərini sadələşdirir.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun