RTCPeerConnection
est l'interface centrale de l'API WebRTC. Il
représente la connexion entre le pair local et distant, et fournit toutes les
la fonction et les événements
nécessaires pour établir la connexion.
Établir une connexion au pair
En général, les applications qui implémentent la fonctionnalité WebRTC s'appuient fortement sur
RTCPeerConnection
. Du côté des appelants (c'est-à-dire, du pair
une connexion), le processus permettant d'établir une connexion est généralement
suivantes:
- Créer une instance
RTCPeerConnection
avec l'erreur ICE appropriée configuration. - Créez une description SDP locale à l'aide de
RTCPeerConnection.createOffer()
. - Définissez la description SDP locale à l'aide de
RTCPeerConnection.setLocalDescription()
- Transférer (à l'aide d'un service de signalement) la description SDP locale au serveur distant pairs.
- Enregistrez un écouteur pour les événements
icecandidate
surRTCPeerConnection
. - Pour chaque événement
icecandidate
, transférez-le (à l'aide d'un service de signalement) vers le pair distant. - Attendez de recevoir une description SDP distante entrante du service de signalement.
définissez-la à l'aide de
RTCPeerConnection.setRemoteDescription()
. - Attendre les candidats ICE distants entrants en provenance du service de signalement et ajouter
à l'aide de
RTCPeerConnection.addIceCandidate()
Du côté de l'appelé, le processus est légèrement différent.
- Créer une instance
RTCPeerConnection
avec l'erreur ICE appropriée configuration. - Attendez de recevoir une description SDP distante entrante du service de signalement.
définissez-la à l'aide de
RTCPeerConnection.setRemoteDescription()
. - Créez une réponse pour la description SDP distante en appelant la méthode
RTCPeerConnection.createAnswer()
- Transférez la réponse au pair distant (à l'aide d'un service de signalement).
- Enregistrez un écouteur pour les événements
icecandidate
surRTCPeerConnection
. - Pour chaque événement
icecandidate
, transférez-le (à l'aide d'un service de signalement) vers le pair distant. - Attendre les candidats ICE distants entrants en provenance du service de signalement et ajouter
à l'aide de
RTCPeerConnection.addIceCandidate()
Le défi de 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 peut se poursuivre.
Lors de l'implémentation d'une application utilisant cette API, il est recommandé que la
le développeur utilise async
et await
au lieu d'enregistrer des écouteurs.
(en utilisant Promise.then()
), car cela facilite le suivi de votre code. Envisagez d'utiliser
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
});
}