Benzer bağlantılar

RTCPeerConnection, WebRTC API'deki merkezi arayüzdür. Yerel ve uzak eşler arasındaki bağlantıyı temsil eder ve bağlantı kurmak için gereken tüm işlevleri ve etkinlikleri sağlar.

Eş bağlantısı oluşturma

WebRTC işlevini uygulayan uygulamalar genellikle RTCPeerConnection arayüzüne büyük ölçüde dayanır. Arayan tarafında (yani bağlantı başlatan eş), bağlantı kurma işlemi genellikle aşağıdaki gibidir:

  1. Uygun ICE yapılandırmasıyla yeni bir RTCPeerConnection örneği oluşturun.
  2. RTCPeerConnection.createOffer() kullanarak yerel bir SDP açıklaması oluşturun.
  3. RTCPeerConnection.setLocalDescription() kullanarak yerel SDP açıklamasını ayarlayın.
  4. Yerel SDP açıklamasını uzak eşe aktarın (bir sinyalleşme hizmeti kullanarak).
  5. RTCPeerConnection'da icecandidate etkinlikleri için bir dinleyici kaydedin.
  6. Her icecandidate etkinliğini (bir sinyal hizmeti kullanarak) uzak eşe aktarın.
  7. İşaretleme hizmetinden gelen uzak SDP açıklamasını bekleyin ve RTCPeerConnection.setRemoteDescription() kullanarak ayarlayın.
  8. İşaretleme hizmetinden gelen uzak ICE adaylarını bekleyin ve RTCPeerConnection.addIceCandidate()

Çağırılan taraf için süreç biraz farklıdır.

  1. Uygun ICE yapılandırmasıyla yeni bir RTCPeerConnection örneği oluşturun.
  2. İşaretleme hizmetinden gelen uzak SDP açıklamasını bekleyin ve RTCPeerConnection.setRemoteDescription() kullanarak ayarlayın.
  3. RTCPeerConnection.createAnswer()'ü arayarak uzak SDP açıklaması için bir yanıt oluşturun.
  4. Yanıtı uzak eşe aktarın (bir sinyal hizmeti kullanarak).
  5. RTCPeerConnection'da icecandidate etkinlikleri için bir dinleyici kaydedin.
  6. Her icecandidate etkinliğini (bir sinyalleme hizmeti kullanarak) uzak eşe aktarın.
  7. İşaretleme hizmetinden gelen uzak ICE adaylarını bekleyin ve RTCPeerConnection.addIceCandidate()

Bu API'nin zorluğu, bu işlemlerin çoğunun asenkron olmasıdır. Bu da genellikle bir WebRTC uygulamasının gerçek uygulamasını karmaşık hale getirir. İşlevlerin çoğu, işlemdeki sonraki adıma devam edilebilmesi için çözülmesi gereken bir Promise döndürür.

Bu API'yi kullanan bir uygulamayı uygularken geliştiricinin dinleyicileri kaydetmek (Promise.then() kullanarak) yerine async ve await kullanması önerilir. Bu, kodunuzun daha kolay anlaşılmasını sağlar. Aşağıdaki örneği inceleyin:

function createAndSendOffer(peerConnection, signallingService) {
    peerConnection.createOffer()
                  .then(offer => {
                      signallingService.send({
                          type: 'offer',
                          data: offer
                      });
                  });
}

Yukarıdaki kodu async ve await kullanarak yazarsak aşağıdaki sonucu elde ederiz:

async function createAndSendOffer(peerConnection, signallingService) {
    const offer = await peerConnection.createOffer();
    signallingService.send({
        type: 'offer',
        data: offer
    });
}