Connexions d'applications similaires

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

Établir une connexion peer-to-peer

Les applications qui implémentent la fonctionnalité WebRTC s'appuient généralement beaucoup sur l'interface RTCPeerConnection. Du côté de l'appelant (c'est-à-dire le pair qui initie 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 au pair distant.
  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 signalisation) au pair distant.
  7. Attendez une description SDP distante entrante du service de signalisation et définissez-la à l'aide de RTCPeerConnection.setRemoteDescription().
  8. Attendez de recevoir 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 au pair distant.
  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 signalisation) au pair distant.
  7. Attendez de recevoir 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.

Lorsque vous implémentez une application à l'aide de cette API, il est recommandé que le développeur utilise async et await au lieu d'enregistrer des écouteurs (à l'aide de Promise.then()), car cela rend votre code plus facile à suivre. Prenons 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
    });
}