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