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 fonctions et tous les événements nécessaires pour établir la connexion.

Établir une connexion de pair à pair

Les applications implémentant la fonctionnalité WebRTC s'appuient généralement fortement sur l'interface RTCPeerConnection. Du côté de l'appelant (c'est-à-dire du côté de l'homologue qui lance une connexion), le processus d'établissement d'une connexion est généralement le suivant:

  1. Créez une instance RTCPeerConnection avec la configuration ICE appropriée.
  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érez (à l'aide d'un service de signalisation) la description SDP locale à l'homologue distant.
  5. Enregistrez un écouteur pour les événements icecandidate sur le RTCPeerConnection.
  6. Pour chaque événement icecandidate, transférez-le (à l'aide d'un service de signalisation) vers l'homologue distant.
  7. Attendez une description SDP distante entrante du service de signalisation et définissez-la à l'aide de RTCPeerConnection.setRemoteDescription().
  8. Attendez les candidats ICE distants entrants du service de signalisation et ajoutez-les à l'aide de RTCPeerConnection.addIceCandidate().

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

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

Le problème avec 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 puisse se poursuivre.

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

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

Lorsque vous écrivez le code ci-dessus à l'aide de async et await, vous obtenez ce qui suit:

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