Google is committed to advancing racial equity for Black communities. See how.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Connessioni tra pari

RTCPeerConnection è l'interfaccia centrale nell'API WebRTC. Rappresenta la connessione tra il peer locale e quello remoto e fornisce tutte le funzioni e gli eventi necessari per stabilire la connessione.

Stabilire una connessione peer

Le applicazioni che implementano la funzionalità WebRTC di solito si basano molto sull'interfaccia RTCPeerConnection . Dal lato dei chiamanti (cioè il peer che avvia una connessione), il processo per stabilire una connessione è solitamente il seguente:

  1. Crea una nuova istanza RTCPeerConnection con la configurazione ICE appropriata.
  2. Creare una descrizione SDP locale utilizzando RTCPeerConnection.createOffer() .
  3. Impostare la descrizione SDP locale utilizzando RTCPeerConnection.setLocalDescription() .
  4. Trasferire (utilizzando un servizio di segnalazione) la descrizione SDP locale al peer remoto.
  5. Registra un listener per eventi icecandidate su RTCPeerConnection .
  6. Per ogni evento icecandidate , trasferiscilo (utilizzando un servizio di segnalazione) al peer remoto.
  7. Attendi una descrizione SDP remota in arrivo dal servizio di segnalazione e RTCPeerConnection.setRemoteDescription() utilizzando RTCPeerConnection.setRemoteDescription() .
  8. Attendi i candidati ICE remoti in arrivo dal servizio di segnalazione e aggiungili utilizzando RTCPeerConnection.addIceCandidate()

Sul lato callee, il processo è leggermente diverso.

  1. Crea una nuova istanza RTCPeerConnection con la configurazione ICE appropriata.
  2. Attendi una descrizione SDP remota in arrivo dal servizio di segnalazione e RTCPeerConnection.setRemoteDescription() utilizzando RTCPeerConnection.setRemoteDescription() .
  3. Creare una risposta per la descrizione SDP remota chiamando RTCPeerConnection.createAnswer() .
  4. Trasferire (utilizzando un servizio di segnalazione) la risposta al peer remoto.
  5. Registra un listener per eventi icecandidate su RTCPeerConnection .
  6. Per ogni evento icecandidate , trasferirlo (tramite un servizio di segnalazione) al peer remoto.
  7. Attendi i candidati ICE remoti in arrivo dal servizio di segnalazione e aggiungili utilizzando RTCPeerConnection.addIceCandidate()

La sfida con questa API è che la maggior parte di queste operazioni sono asincrone, il che spesso complica l'effettiva implementazione di un'applicazione WebRTC. Molte delle funzioni restituiscono una Promise che deve essere risolta prima che il passaggio successivo del processo possa continuare.

Si consiglia che durante l'implementazione di un'applicazione utilizzando questa API, lo sviluppatore utilizzi async e await invece di registrare ascoltatori (utilizzando Promise.then() ), poiché ciò rende il codice più facile da seguire. Considera il seguente esempio:

function createAndSendOffer(peerConnection, signallingService) {
    peerConnection.createOffer()
                  .then(offer => {
                      signallingService.send({
                          type: 'offer',
                          data: offer
                      });
                  });
}

Quando si scrive il codice sopra utilizzando async e await , si ottiene quanto segue:

async function createAndSendOffer(peerConnection, signallingService) {
    const offer = await peerConnection.createOffer();
    signallingService.send({
        type: 'offer',
        data: offer
    });
}