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:
- Créez une instance
RTCPeerConnection
avec la configuration ICE appropriée. - Créez une description SDP locale à l'aide de
RTCPeerConnection.createOffer()
. - Définissez la description SDP locale à l'aide de
RTCPeerConnection.setLocalDescription()
. - Transférez (à l'aide d'un service de signalisation) la description SDP locale à l'homologue distant.
- Enregistrez un écouteur pour les événements
icecandidate
sur leRTCPeerConnection
. - Pour chaque événement
icecandidate
, transférez-le (à l'aide d'un service de signalisation) vers l'homologue distant. - Attendez une description SDP distante entrante du service de signalisation et définissez-la à l'aide de
RTCPeerConnection.setRemoteDescription()
. - 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.
- Créez une instance
RTCPeerConnection
avec la configuration ICE appropriée. - Attendez une description SDP distante entrante du service de signalisation et définissez-la à l'aide de
RTCPeerConnection.setRemoteDescription()
. - Créez une réponse pour la description SDP distante en appelant
RTCPeerConnection.createAnswer()
. - Transférez (à l'aide d'un service de signalisation) la réponse à l'homologue distant.
- Enregistrez un écouteur pour les événements
icecandidate
sur leRTCPeerConnection
. - Pour chaque événement
icecandidate
, transférez-le (à l'aide d'un service de signalisation) vers l'homologue distant. - 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
});
}