En Google, luchamos por la equidad racial de la comunidad negra. Más información

Conexiones entre pares

El RTCPeerConnection es la interfaz central en el API WebRTC. Representa la conexión entre el par local y remoto, y proporciona todas las funciones y eventos necesarios para establecer la conexión.

Establecer una conexión entre pares

Aplicaciones que implementan la función WebRTC por lo general dependen en gran medida del RTCPeerConnection interfaz. Desde el lado de las personas que llaman (es decir, el par que inicia una conexión), el proceso para establecer una conexión suele ser el siguiente:

  1. Crear un nuevo RTCPeerConnection ejemplo con la configuración ICE apropiado.
  2. Crear una descripción SDP local utilizando RTCPeerConnection.createOffer() .
  3. Establecer la descripción SDP local utilizando RTCPeerConnection.setLocalDescription() .
  4. Transfiera (utilizando un servicio de señalización) la descripción SDP local al par remoto.
  5. El registro de un oyente para icecandidate eventos en el RTCPeerConnection .
  6. Para cada icecandidate eventos, la transferencia (mediante un servicio de señalización) al par remoto.
  7. Esperar una descripción SDP remoto de entrada del servicio de señalización y configurarlo usando RTCPeerConnection.setRemoteDescription() .
  8. Espere a que los candidatos ICE remoto de entrada desde el servicio de señalización y añadirlos usando RTCPeerConnection.addIceCandidate()

En el lado del destinatario, el proceso es un poco diferente.

  1. Crear un nuevo RTCPeerConnection ejemplo con la configuración ICE apropiado.
  2. Esperar una descripción SDP remoto de entrada del servicio de señalización y configurarlo usando RTCPeerConnection.setRemoteDescription() .
  3. Crear una respuesta para la descripción SDP remoto llamando RTCPeerConnection.createAnswer() .
  4. Transferir (mediante un servicio de señalización) la respuesta al par remoto.
  5. El registro de un oyente para icecandidate eventos en el RTCPeerConnection .
  6. Para cada icecandidate eventos, la transferencia (mediante un servicio de señalización) al par remoto.
  7. Espere a que los candidatos ICE remoto de entrada desde el servicio de señalización y añadirlos usando RTCPeerConnection.addIceCandidate()

El desafío con esta API es que la mayoría de estas operaciones son asincrónicas, lo que a menudo complica la implementación real de una aplicación WebRTC. Muchas de las funciones devuelven una Promise que tiene que ser resuelto antes de que el siguiente paso en el proceso puede continuar.

Se recomienda que cuando se implementa una aplicación que utiliza esta API, el uso de maquillaje desarrollador async y await en lugar de registrarse oyentes (usando Promise.then() ), ya que esto hace que el código sea más fácil de seguir. Considere el siguiente ejemplo:

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

Al escribir el código anterior utilizando async y await , obtenemos lo siguiente:

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