Connessioni peer

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:

  1. Crea una nuova istanza RTCPeerConnection con l'ICE appropriato configurazione.
  2. Crea una descrizione SDP locale utilizzando RTCPeerConnection.createOffer().
  3. Imposta la descrizione locale dell'SDP utilizzando RTCPeerConnection.setLocalDescription().
  4. Trasferisci (utilizzando un servizio di segnalazione) la descrizione dell'SDP locale sul telecomando peer.
  5. Registra un listener per gli eventi icecandidate su RTCPeerConnection.
  6. Per ogni evento icecandidate, trasferiscilo (utilizzando un servizio di segnalazione) a il peer remoto.
  7. Attendi la descrizione dell'SDP remoto in arrivo dal servizio di segnalazione e impostalo utilizzando RTCPeerConnection.setRemoteDescription().
  8. 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.

  1. Crea una nuova istanza RTCPeerConnection con l'ICE appropriato configurazione.
  2. Attendi la descrizione dell'SDP remoto in arrivo dal servizio di segnalazione e impostalo utilizzando RTCPeerConnection.setRemoteDescription().
  3. Crea una risposta alla descrizione dell'SDP remoto chiamando RTCPeerConnection.createAnswer().
  4. Trasferisci (utilizzando un servizio di segnalazione) la risposta al peer remoto.
  5. Registra un listener per gli eventi icecandidate su RTCPeerConnection.
  6. Per ogni evento icecandidate, trasferiscilo (utilizzando un servizio di segnalazione) a il peer remoto.
  7. 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
    });
}