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 (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 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.
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.
// 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);
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.
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 (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.
// 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 (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 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.
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 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.
// 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 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.
// 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.
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.
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.
// 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)
}
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.
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
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.
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.
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).
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).
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
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.