Connexions d'applications similaires

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

Établir une connexion entre pairs

Les applications qui mettent en œuvre la fonctionnalité WebRTC s'appuient généralement sur l'interface RTCPeerConnection. Du côté des appelants (c'est-à-dire, le pair qui déclenche une connexion), le processus permettant d'établir 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 pour votre SDP locale à l'aide de RTCPeerConnection.createOffer().
  3. Définissez la description du SDP locale à l'aide de RTCPeerConnection.setLocalDescription().
  4. Transférez (description à l'aide d'un service de signalisation) la description de la 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) vers le pair distant.
  7. Attendez qu'une description SDP entrante émane du service de signalisation et définissez-la à l'aide de RTCPeerConnection.setRemoteDescription().
  8. Attendez les candidats GICE entrants du service de signalisation, puis ajoutez-les à l'aide de RTCPeerConnection.addIceCandidate().

Le processus est légèrement différent pour les appelants.

  1. Créez une instance RTCPeerConnection avec la configuration ICE appropriée.
  2. Attendez qu'une description SDP entrante émane du service de signalisation et définissez-la à l'aide de RTCPeerConnection.setRemoteDescription().
  3. Créez une réponse pour la description du SDP distante en appelant RTCPeerConnection.createAnswer().
  4. Transfert (à l'aide d'un service de signalisation) de 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) vers le pair distant.
  7. Attendez les candidats GICE entrants du service de signalisation, puis ajoutez-les à l'aide de RTCPeerConnection.addIceCandidate().

Le problème avec cette API, c'est que la plupart de ces opérations sont asynchrones, ce qui complique souvent la mise en œuvre réelle d'une application WebRTC. Un grand nombre de fonctions renvoient un Promise qui doit être résolu avant que l'étape suivante du processus puisse continuer.

Lorsque vous mettez en œuvre une application à l'aide de cette API, nous vous recommandons 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
                      });
                  });
}

Lors de l'écriture du code ci-dessus à l'aide de async et de await, nous obtenons les éléments suivants:

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