WebRTC nədir

WebRTC brauzerlər arasında video, səs və ixtiyari məlumatı birbaşa (peer-to-peer) ötürməyə imkan verir. Video zəng, ekran paylaşımı, onlayn oyun və fayl göndərmə bunun üzərində qurulur. Üç əsas API var.

  • getUserMedia - kamera və mikrofon axını (MediaStream).
  • RTCPeerConnection - iki brauzer arasında şifrələnmiş əlaqə.
  • RTCDataChannel - mətn və ya ikili məlumat üçün kanal.

Vacib məqam: iki peer bir-birini avtomatik tapmır. Qoşulmaq üçün onlar kiçik mesajlar (offer, answer, ICE namizədləri) dəyişməlidir. Bu mərhələyə signaling deyilir və standartın daxilində deyil: onu özünüz qurursunuz, adətən WebSocket ilə. Mediya isə həmişə şifrələnir (DTLS-SRTP).


getUserMedia: kamera və mikrofon

navigator.mediaDevices.getUserMedia() istifadəçidən icazə istəyir və MediaStream qaytarır. Axın bir və ya bir neçə trekdən ibarətdir (video, audio). Onu <video> elementinin srcObject xassəsinə veririk.

javascript
const localVideo = document.querySelector('#local');

let stream;
try {
  stream = await navigator.mediaDevices.getUserMedia({
    video: { width: { ideal: 1280 }, height: { ideal: 720 } },
    audio: { echoCancellation: true },
  });
  localVideo.srcObject = stream;
  localVideo.muted = true;
  await localVideo.play();
} catch (err) {
  if (err.name === 'NotAllowedError') console.log('Permission denied');
  else if (err.name === 'NotFoundError') console.log('No camera found');
  else throw err;
}

// later: release the camera
stream.getTracks().forEach((track) => track.stop());
  • İcazə rədd olunsa NotAllowedError, cihaz tapılmasa NotFoundError atılır.
  • İşiniz bitəndə hər trekə stop() çağırın, yoxsa kamera işıq yanmağa davam edəcək.
  • Cihaz siyahısı üçün navigator.mediaDevices.enumerateDevices() istifadə olunur.

⚠️ getUserMedia yalnız təhlükəsiz kontekstdə (https:// və ya localhost) işləyir.

💡 Yerli önizləməni muted edin, yoxsa əks-səda yaranacaq.


RTCPeerConnection, offer və answer

Əlaqə SDP (Session Description Protocol) mətnləri ilə qurulur. SDP hansı mediya axınlarının, kodeklərin və şifrələmə açarlarının olduğunu təsvir edir. Ardıcıllıq belədir: