Benzer bağlantılar

RTCPeerConnection, WebRTC API'nin merkezi arayüzüdü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şler arası bağlantı oluşturma

WebRTC işlevselliğini uygulayan uygulamalar, genellikle RTCPeerConnection arayüzünü kullanır. Arayanlar tarafında (yani bağlantı başlatan eş), genellikle bağlantı kurma işlemi aşağıdaki şekilde olur:

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

Misafir 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 bir uzak SDP açıklaması bekleyin ve RTCPeerConnection.setRemoteDescription() kullanarak ayarlayın.
  3. RTCPeerConnection.createAnswer() numaralı telefonu arayarak uzak SDP açıklaması için yanıt oluşturun.
  4. Sinyal hizmetini kullanarak yanıtı uzaktaki eşe aktarın.
  5. RTCPeerConnection üzerinde icecandidate etkinlikleri için bir işleyici kaydedin.
  6. Her icecandidate etkinliği için (bir sinyal hizmeti kullanarak) uzak eşlemeye aktarın.
  7. Sinyal hizmetinden gelen uzak ICE adaylarını bekleyin ve bunları RTCPeerConnection.addIceCandidate() kullanarak ekleyin

Bu API'nin zorluğu, bu işlemlerin çoğunun eşzamansız olmasıdır. Bu da genellikle bir WebRTC uygulamasının gerçek uygulanmasını karmaşık bir hale getirir. İşlevlerin çoğu, işlemde 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, kodlayıcının takibini kolaylaştıracağından, dinleyicileri kaydetmek yerine (Promise.then() kullanarak) async ve await'ı kullanması önerilir. Aşağıdaki örneği inceleyelim:

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

async ve await kodlarını kullanarak yukarıdaki kodu yazarken aşağıdakileri alırız:

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