RTCPeerConnection
è l'interfaccia centrale dell'API WebRTC. it
rappresenta la connessione tra il peer locale e quello remoto e fornisce tutti i
la funzione e gli eventi necessari per stabilire la connessione.
È in corso una connessione peer
Le applicazioni che implementano la funzionalità WebRTC di solito fanno molto affidamento
interfaccia di RTCPeerConnection
. Dal punto di vista dei chiamanti, ovvero
avviare una connessione), il processo per stabilire una connessione è in genere
seguenti:
- Crea una nuova istanza
RTCPeerConnection
con l'ICE appropriato configurazione. - Crea una descrizione SDP locale utilizzando
RTCPeerConnection.createOffer()
. - Imposta la descrizione locale dell'SDP utilizzando
RTCPeerConnection.setLocalDescription()
. - Trasferisci (utilizzando un servizio di segnalazione) la descrizione dell'SDP locale sul telecomando peer.
- Registra un listener per gli eventi
icecandidate
suRTCPeerConnection
. - Per ogni evento
icecandidate
, trasferiscilo (utilizzando un servizio di segnalazione) a il peer remoto. - Attendi la descrizione dell'SDP remoto in arrivo dal servizio di segnalazione e
impostalo utilizzando
RTCPeerConnection.setRemoteDescription()
. - Attendi i candidati ICE remoti in arrivo dal servizio di segnalazione e aggiungi
usando
RTCPeerConnection.addIceCandidate()
Per quanto riguarda i destinatari, il processo è leggermente diverso.
- Crea una nuova istanza
RTCPeerConnection
con l'ICE appropriato configurazione. - Attendi la descrizione dell'SDP remoto in arrivo dal servizio di segnalazione e
impostalo utilizzando
RTCPeerConnection.setRemoteDescription()
. - Crea una risposta alla descrizione dell'SDP remoto chiamando
RTCPeerConnection.createAnswer()
. - Trasferisci (utilizzando un servizio di segnalazione) la risposta al peer remoto.
- Registra un listener per gli eventi
icecandidate
suRTCPeerConnection
. - Per ogni evento
icecandidate
, trasferiscilo (utilizzando un servizio di segnalazione) a il peer remoto. - Attendi i candidati ICE remoti in arrivo dal servizio di segnalazione e aggiungi
usando
RTCPeerConnection.addIceCandidate()
Il problema di questa API è che la maggior parte di queste operazioni è asincrona,
che spesso complicano l'implementazione effettiva di un'applicazione WebRTC.
Molte funzioni restituiscono un valore Promise
che deve essere risolto prima che
passaggio successivo della procedura.
Quando implementi un'applicazione utilizzando questa API, è consigliabile che i campi
gli sviluppatori utilizzano async
e await
anziché registrare listener
(utilizzando Promise.then()
), perché in questo modo è più facile seguire il codice. Prendi in considerazione
nell'esempio seguente:
function createAndSendOffer(peerConnection, signallingService) {
peerConnection.createOffer()
.then(offer => {
signallingService.send({
type: 'offer',
data: offer
});
});
}
Quando scrivi il codice riportato sopra utilizzando async
e await
, otteniamo quanto segue:
async function createAndSendOffer(peerConnection, signallingService) {
const offer = await peerConnection.createOffer();
signallingService.send({
type: 'offer',
data: offer
});
}