WebRTC: bu nima, arxitekturasi va ishlash prinsipi

Muallif: IT Sectr Nashr etilgan: 2026-06-01 O'qish vaqti: 9 daq

WebRTC qurilmalar o‘rtasida to‘g‘ridan-to‘g‘ri, oraliq serverlarsiz real vaqtda audio, video va ma‘lumotlarni uzatish uchun ochiq texnologiyadir. WebRTC Project (2026) ma‘lumotlariga ko‘ra, standart barcha zamonaviy brauzerlar va mobil platformalar tomonidan qo‘llab-quvvatlanadi, 500 ms dan past latencyni ta‘minlaydi. WebRTC NAT va firewall ortida ham ulanish o‘rnatish uchun ICE, STUN, TURN protokollaridan foydalanadi.

Asosiy ma’lumotlar

  • WebRTC — plaginlarsiz real vaqtda peer-to-peer audio, video va ma‘lumotlar uzatish uchun ochiq standart.
  • Arxitektura uch qatlamni o‘z ichiga oladi: ilova API (getUserMedia, RTCPeerConnection), transport (ICE, STUN, TURN) va xavfsizlik (DTLS, SRTP).
  • NAT traversal STUN serverlari (ommaviy IP) va TURN relaylari (simmetrik NATni chetlab o‘tish) yordamida ICE framework orqali hal qilinadi.
  • Mobil SDK — Google WebRTC Android va iOS uchun ovozli va video qo‘ng‘iroqlar uchun native API taqdim etadi.
  • Signallash (SDP almashinuvi) WebRTC tarkibiga kirmaydi va WebSocket, SIP yoki o‘z protokoli orqali amalga oshiriladi.

WebRTC nima

WebRTC (Web Real-Time Communication) — 2011 yilda Google tomonidan boshlangan va W3C (JavaScript API) va IETF (protokollar) tomonidan standartlashtirilgan ochiq manbali loyihadir. Asosiy vazifa plaginlar yoki uchinchi tomon dasturini o‘rnatmasdan brauzerlar va ilovalar o‘rtasida past kechikishli aloqani ta‘minlashdir.

An’anaviy yechimlardan (RTMP, HLS) farqli o‘laroq, video server orqali o‘tadigan joyda, WebRTC peer-to-peer arxitekturasidan foydalanadi: ma‘lumotlar to‘g‘ridan-to‘g‘ri ishtirokchilar o‘rtasida uzatiladi. Bu HLS da 3-10 soniyaga qarshi 200-500 ms kechikishni ta‘minlaydi — ovozli va video qo‘ng‘iroqlar, o‘yinlar oqimi va masofaviy jarrohlik uchun muhim farq.

Google WebRTC Team (2025) ma‘lumotlariga ko‘ra, texnologiya umumiy soni 5 milliarddan ortiq o‘rnatilgan ilovalarda qo‘llaniladi: Google Meet, WhatsApp, Discord, Telegram, Zoom (qisman). Telehealth va edtech sohalaridagi venchur startaplarning 85% dan ortig‘i real vaqt transporti sifatida WebRTCni tanlaydi.

Mobil rivojlanish 2013 yilda libjingle_peerconnection chiqarilishi bilan to‘liq funksional WebRTCga ega bo‘ldi — Android va iOS uchun native amalga oshirish. Hozirda ikkala platformada H.264 va VP8 apparat kodlash, kamera, mikrofon va dinamiklarni qo‘llab-quvvatlovchi barqaror SDKlar mavjud.

WebRTC arxitekturasi va protokollari

WebRTC arxitekturasi uch darajadan iborat. Yuqori daraja — JavaScript API (yoki mobil platformalar uchun native API), o‘rta — transport protokollari, pastki — kodeklar va xavfsizlik. Har bir daraja o‘z vazifasini hal qiladi, lekin barchasi ulanishni o‘rnatish uchun majburiydir.

WebRTC asosiy API lari

MediaStream (getUserMedia) — qurilmaning mikrofoni va kamerasidan audio va videoni olish. RTCPeerConnection — P2P ulanishini boshqarish: kodlash, transport, bitrate moslashuvi. RTCDataChannel — xuddi shu kanal orqali ixtiyoriy ma‘lumotlarni (matn, fayllar, ikkilik xabarlar) uzatish.

js
// JavaScript API WebRTC (brauzer namunasi)
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 vaqt protokollari

WebRTC audio va video uchun SRTP (Secure Real-Time Transport Protocol) dan foydalanadi — AES-128 shifrlash bilan himoyalangan RTP versiyasi. Sessiyani boshqarish DTLS orqali SCTP (Stream Control Transmission Protocol) orqali amalga oshiriladi. Har bir ma‘lumot oqimi majburiy ravishda shifrlanadi: WebRTCda himoyalanmagan rejim mavjud emas.

  • SRTP/SRTCP — replay hujumlaridan himoya bilan media oqimlarining shifrlangan uzatilishi
  • DTLS-SRTP — UDP orqali Datagram TLS orqali shifrlash kalitlarini o‘rnatish
  • SCTP — DataChannel uchun ishonchli yoki qisman ishonchli ma‘lumot yetkazish
  • ICE (Interactive Connectivity Establishment) — peerlar o‘rtasida tarmoq yo‘lini topish uchun framework
  • Trickle ICE — nomzodlar aniqlangan sari yuboriladigan ICE ning inkremental versiyasi, ulanishni tezlashtiradi

NAT traversal: ICE, STUN va TURN

WebRTC ning asosiy texnik qiyinligi NAT (Network Address Translation) ortida joylashgan qurilmalar o‘rtasida P2P ulanishini o‘rnatishdir. Maxsus mexanizmlarsiz qurilmalar to‘g‘ridan-to‘g‘ri bir-biriga murojaat qila olmaydi, chunki ularning mahalliy IP manzillari internetdan ko‘rinmaydi.

STUN — ommaviy manzilni aniqlash

STUN (Session Traversal Utilities for NAT) — “mening ommaviy IP manzilim va portim nima?” degan savolga javob beradigan server. Mijoz STUN serveriga so‘rov yuboradi, server uning ommaviy manzilini ko‘radi va mijozga qaytaradi. Google ochiq STUN serverini qo‘llab-quvvatlaydi stun:stun.l.google.com:19302.

swift
// iOS da WebRTC — ICE serverlarini sozlash
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 ulanish

TURN (Traversal Using Relays around NAT) — STUN yordam bermagan holatlar uchun retranslyatsiya serveri (simmetrik NAT yoki korporativ firewalllar). Bu rejimda barcha ma‘lumotlar TURN serveri orqali o‘tadi — bu tezlikni pasaytiradi va kechikishni oshiradi, lekin 99% hollarda ulanishni kafolatlaydi.

TURN WebRTC infratuzilmasining eng qimmat komponentidir, chunki server barcha media trafikini o‘zidan o‘tkazadi. Coturn Project (2025) ma‘lumotlariga ko‘ra, 8 vCPU va 16 GB RAM ga ega odatdagi TURN serveri taxminan 200 ta bir vaqtda audio qo‘ng‘iroq yoki HD sifatida 40 ta video qo‘ng‘iroqni qayta ishlaydi.

ICE jarayoni

ICE barcha mumkin bo‘lgan nomzodlarni (mahalliy IP, STUN orqali ommaviy IP, TURN orqali relay) to‘playdi va ustuvorlik tartibida ulanishga harakat qiladi. Kamida bir juft nomzod (mahalliy-uzoq) connectivity check tekshiruvidan o‘tgach, ulanish o‘rnatilgan hisoblanadi.

  • Host candidates — qurilmaning pastki tarmoqdagi mahalliy IP manzili (eng tez, lekin NAT ortida ishlamaydi)
  • Server Reflexive candidates — STUN serveri orqali olingan ommaviy IP
  • Relay candidates — retranslyatsiya amalga oshiriladigan TURN serveri manzili (eng sekin, eng ishonchli)

Mobil ilovalarda WebRTC

Mobil rivojlanish uchun Google libWebRTC ni qo‘llab-quvvatlaydi — Android (AAR) va iOS (XCFramework) uchun native kutubxona. Kutubxona barcha protokollar to‘plamini, kodeklarni (VP8, VP9, H.264, AV1) va apparat kodlash/dekodlash tezlashuvini o‘z ichiga oladi.

Android da WebRTC

Android SDK PeerConnectionFactory, PeerConnection, MediaStream sinflarini taqdim etadi. Ilova fabrika yaratadi, video kodeklarni konfiguratsiya qiladi, VideoCapturer orqali kameradan oqimni oladi va SDP offer/answer orqali peer-to-peer ulanishini o‘rnatadi.

java
// Android WebRTC — boshlang'ich sozlash
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 o‘ramlari bilan Objective-C API dan foydalanadi. H.264 apparat kodlashi VideoToolbox orqali mavjud. Videoni ko‘rsatish uchun RTCMTLVideoView (Metal) yoki RTCVideoRenderer ishlatiladi.

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

// Kamera tanlash (old/orqa)
guard let device = RTCCameraVideoCapturer
    .captureDevices().first(where: {
        $0.position == .front
    }) else { return }

// Maksimal FPS bilan olishni boshlash
capturer.startCapture(
    with: device,
    format: RTCCameraVideoCapturer
        .supportedFormats(for: device).last!,
    fps: 30
)

Ishlab chiqarishdagi video qo‘ng‘iroqlar uchun mobil ilovalar odatda libWebRTC ustidagi SDK o‘ramlaridan foydalanadi: Twilio Video, Agora, Daily.co. Ushbu SDKlar signallashni, xonalarni boshqarishni soddalashtiradi va ishtirokchilarning video tarmog‘ini ko‘rsatish uchun tayyor UI komponentlarini taqdim etadi.

Signallash va ulanishni o‘rnatish

WebRTC signallash protokolini — peerlar o‘rtasida SDP (Session Description Protocol) xabarlar almashinuvini — spetsifikatsiya qilmaydi. Dasturchi signallash uchun transportni o‘zi tanlaydi: WebSocket, MQTT, SIP, XMPP yoki REST API. Signallash offer, answer va ICE nomzodlarini bir peerdan ikkinchisiga yetkazadi.

SDP Offer/Answer almashinuvi

Jarayon offer yaratish bilan boshlanadi (tashabbuschi o‘zining media imkoniyatlarini tavsiflaydi), signallash orqali ikkinchi peerga uzatiladi, u answer bilan javob beradi. SDP almashinuvidan so‘ng har bir peer ICE ni ishga tushiradi va oqimni shifrlash uchun DTLS-SRTP ni boshlaydi.

kotlin
// Android — offer yaratish va yuborish
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 ni signallash serveriga yuborish
            sendSdpOffer(sdp.description)
        }
    }, constraints)
}

Signallash protokollari

Mobil ilovalarda eng ommabop signallash WebSocket orqali — TCP ustidagi ikki tomonlama kanal, server bilan doimiy aloqani saqlaydi. Signallash serveri ko‘pincha alohida mikroxizmat (Node.js, Golang, Elixir) bo‘lib, xona ishtirokchilari o‘rtasida xabarlarni yo‘naltiradi.

  • WebSocket — doimiy ikki tomonlama aloqa, minimal overhead, signallash uchun standart tanlov
  • SIP over WebSocket — standart VoIP protokoli, mavjud telefon infratuzilmasi bilan integratsiyalanadi
  • MQTT — IoT va zaif tarmoqlar uchun yengil pub/sub protokoli, lekin ko‘proq kechikish bilan
  • Matrix / XMPP — maxfiylik talab qiladigan ilovalar uchun markazlashtirilmagan protokollar

ICE va DTLS-SRTP tugaganidan so‘ng, signallash endi ma‘lumot uzatishda qatnashmaydi — barcha media trafigi to‘g‘ridan-to‘g‘ri P2P (yoki TURN relay orqali) ketadi. Signallash serveri faol qo‘ng‘iroqlarni uzmasdan o‘chirilishi mumkin. Bu WebRTC ning markazlashtirilmagan arxitekturasining asosiy ustunligidir.

Tez-tez so‘raladigan savollar

WebRTC RTMP yoki HLS dan nima bilan farq qiladi?

RTMP va HLS — barcha ma‘lumotlar server orqali o‘tadigan 3-10 soniya kechikishli server protokollari. WebRTC — 200-500 ms kechikishli peer-to-peer. RTMP keng auditoriyaga oqim uchun, WebRTC interaktiv qo‘ng‘iroqlar va o‘yinlar uchun mos keladi.

TURN serveridan foydalanish majburiymi?

Yo‘q, TURN faqat P2P ishlamagan hollarda kerak (simmetrik NAT, korporativ firewalllar). Google statistikasiga ko‘ra, ulanishlarning taxminan 15% TURNni talab qiladi. Ishlab chiqarishda 100% ishonchlilik uchun TURN serverini fallback sifatida saqlash tavsiya etiladi.

WebRTC mobil ilovalarda qanday kodeklarni qo‘llab-quvvatlaydi?

Majburiy kodeklar: VP8 (barcha platformalar) va H.264 (iOS/Android da apparat tezlashuvi bilan). Ixtiyoriy: VP9 (yaxshiroq siqish, kamroq bitrate) va AV1 (juda samarali, lekin CPU talabchan). Audio: Opus (asosiy) va G.711 (PCMU/PCMA).

WebRTCni faqat videosiz ma‘lumot uzatish uchun ishlatish mumkinmi?

Ha, RTCDataChannel orqali. Bu ixtiyoriy ma‘lumotlarni uzatish uchun to‘liq funksional kanal: matn, fayllar, ikkilik xabarlar. DataChannel SCTP ustida sozlanishi ishonchlilik bilan ishlaydi (o‘yinlar uchun qisman ishonchli yetkazish, fayllar uchun ishonchli).

WebRTC asosidagi qo‘ng‘iroq yozuvini qanday ta‘minlash mumkin?

Mijoz tomonda MediaRecorder API yoki SFU (Selective Forwarding Unit) orqali — barcha ishtirokchilar oqimlarini oladigan va ularni yozib oladigan server. Ikkinchi variant ishonchliroq, chunki yozuv ishtirokchi qurilmasiga bog‘liq emas va uzilishda to‘xtamaydi.

Xulosa

  • WebRTC — 200-500 ms latency bilan real vaqt P2P ochiq standarti, barcha brauzerlar va mobil platformalar tomonidan qo‘llab-quvvatlanadi.
  • Arxitektura uch qatlamga asoslanadi: media-API (getUserMedia, RTCPeerConnection), ICE transporti (STUN/TURN) va xavfsizlik (DTLS-SRTP).
  • NAT traversal ICE framework orqali hal qilinadi — to‘g‘ridan-to‘g‘ri P2P (host) dan relay TURN (relay) gacha har qanday firewalllarni chetlab o‘tish uchun.
  • Mobil SDK Google dan Android va iOS da H.264 va VP8 apparat kodlashini, kamera va mikrofon olishni ta‘minlaydi.
  • Signallash (SDP almashinuvi) WebRTC tarkibiga kirmaydi va WebSocket, SIP yoki dasturchi uchun mavjud har qanday protokol orqali amalga oshiriladi.
  • Ishlab chiqarish SDK (Twilio, Agora, Daily.co) libWebRTC asosida xonalarni boshqarish, signallash va UI komponentlarini soddalashtiradi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing