Connexions d'applications similaires

RTCPeerConnection est l'interface centrale de l'API WebRTC. Il représente la connexion entre le pair local et distant, et fournit toutes les la fonction et les événements nécessaires pour établir la connexion.

Établir une connexion au pair

En général, les applications qui implémentent la fonctionnalité WebRTC s'appuient fortement sur RTCPeerConnection. Du côté des appelants (c'est-à-dire, du pair une connexion), le processus permettant d'établir une connexion est généralement suivantes:

  1. Créer une instance RTCPeerConnection avec l'erreur ICE appropriée configuration.
  2. Créez une description SDP locale à l'aide de RTCPeerConnection.createOffer().
  3. Définissez la description SDP locale à l'aide de RTCPeerConnection.setLocalDescription()
  4. Transférer (à l'aide d'un service de signalement) la description SDP locale au serveur distant pairs.
  5. Enregistrez un écouteur pour les événements icecandidate sur RTCPeerConnection.
  6. Pour chaque événement icecandidate, transférez-le (à l'aide d'un service de signalement) vers le pair distant.
  7. Attendez de recevoir une description SDP distante entrante du service de signalement. définissez-la à l'aide de RTCPeerConnection.setRemoteDescription().
  8. Attendre les candidats ICE distants entrants en provenance du service de signalement et ajouter à l'aide de RTCPeerConnection.addIceCandidate()

Du côté de l'appelé, le processus est légèrement différent.

  1. Créer une instance RTCPeerConnection avec l'erreur ICE appropriée configuration.
  2. Attendez de recevoir une description SDP distante entrante du service de signalement. définissez-la à l'aide de RTCPeerConnection.setRemoteDescription().
  3. Créez une réponse pour la description SDP distante en appelant la méthode RTCPeerConnection.createAnswer()
  4. Transférez la réponse au pair distant (à l'aide d'un service de signalement).
  5. Enregistrez un écouteur pour les événements icecandidate sur RTCPeerConnection.
  6. Pour chaque événement icecandidate, transférez-le (à l'aide d'un service de signalement) vers le pair distant.
  7. Attendre les candidats ICE distants entrants en provenance du service de signalement et ajouter à l'aide de RTCPeerConnection.addIceCandidate()

Le défi de cette API est que la plupart de ces opérations sont asynchrones, ce qui complique souvent l'implémentation réelle d'une application WebRTC. De nombreuses fonctions renvoient un Promise qui doit être résolu avant que l'étape suivante du processus peut se poursuivre.

Lors de l'implémentation d'une application utilisant cette API, il est recommandé que la le développeur utilise async et await au lieu d'enregistrer des écouteurs. (en utilisant Promise.then()), car cela facilite le suivi de votre code. Envisagez d'utiliser l'exemple suivant:

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

Lorsque nous écrivons le code ci-dessus à l'aide de async et await, nous obtenons ce qui suit:

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