Benzer bağlantılar

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

Eş bağlantısı kurma

WebRTC işlevini uygulayan uygulamalar genellikle RTCPeerConnection arayüzünü yoğun bir şekilde kullanır. Arayan tarafında (yani bağlantı başlatan eş) bağlantı kurma süreci genellikle şu şekildedir:

  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. Yerel SDP açıklamasını RTCPeerConnection.setLocalDescription() kullanarak ayarlayın.
  4. Yerel SDP açıklamasını uzak tarafa (bir sinyal hizmeti kullanarak) aktarın.
  5. RTCPeerConnection üzerindeki icecandidate etkinlikleri için bir işleyici kaydedin.
  6. Her icecandidate etkinliği için bunu (bir sinyal hizmeti kullanarak) uzak eşe aktarın.
  7. Sinyal hizmetinden gelen uzaktan SDP açıklamasını bekleyin ve RTCPeerConnection.setRemoteDescription() kullanarak ayarlayın.
  8. Sinyal hizmetinden gelen uzak ICE adaylarının gelmesini bekleyin ve bunları RTCPeerConnection.addIceCandidate() kullanarak ekleyin.

Aranan tarafında ise süreç biraz farklıdır.

  1. Uygun ICE yapılandırmasıyla yeni bir RTCPeerConnection örneği oluşturun.
  2. Sinyal hizmetinden gelen uzaktan SDP açıklamasını bekleyin ve RTCPeerConnection.setRemoteDescription() kullanarak ayarlayın.
  3. RTCPeerConnection.createAnswer() işlevini çağırarak uzak SDP açıklaması için bir yanıt oluşturun.
  4. Yanıtı uzak tarafa aktarın (sinyal hizmeti kullanarak).
  5. RTCPeerConnection üzerindeki icecandidate etkinlikleri için bir işleyici kaydedin.
  6. Her icecandidate etkinliği için bunu (bir sinyal hizmeti kullanarak) uzak eşe aktarın.
  7. Sinyal hizmetinden gelen uzak ICE adaylarının gelmesini bekleyin ve bunları RTCPeerConnection.addIceCandidate() kullanarak ekleyin.

Bu API'nin zorluğu, bu işlemlerin çoğunun eşzamansız olmasıdır. Bu durum, WebRTC uygulamasının gerçek uygulamasını genellikle karmaşık hale getirir. İşlevlerin çoğu, süreçteki bir sonraki adımın devam edebilmesi için çözülmesi gereken bir Promise döndürür.

Bu API'yi kullanarak bir uygulama 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 yazdığımızda aşağıdaki sonuçları elde ederiz:

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