O RTCPeerConnection
é a interface central na API WebRTC. Ela
representa a conexão entre o ponto local e remoto e fornece todos os
função e eventos necessários para estabelecer a conexão.
Como estabelecer uma conexão de peering
Os aplicativos que implementam a funcionalidade WebRTC geralmente dependem muito do
interface RTCPeerConnection
. Do lado do autor da chamada (ou seja, o peer
iniciar uma conexão), o processo para estabelecer uma conexão geralmente é o
seguinte:
- Criar uma nova instância de
RTCPeerConnection
com o ICE apropriado configuração do Terraform. - Crie uma descrição de SDP local usando
RTCPeerConnection.createOffer()
. - Defina a descrição do SDP local usando:
RTCPeerConnection.setLocalDescription()
: - Transferir (usando um serviço de sinalização) a descrição do SDP local para o controle remoto peering.
- Registre um listener para eventos
icecandidate
noRTCPeerConnection
. - Transfira cada evento
icecandidate
(usando um serviço de sinalização) para: no terminal remoto. - Aguarde a descrição de SDP remoto recebida do serviço de sinalização e
defina-o usando
RTCPeerConnection.setRemoteDescription()
. - Aguarde os candidatos ICE remotos do serviço de sinalização e adicione
usando
RTCPeerConnection.addIceCandidate()
Para o beneficiário, o processo é um pouco diferente.
- Criar uma nova instância de
RTCPeerConnection
com o ICE apropriado configuração do Terraform. - Aguarde a descrição de SDP remoto recebida do serviço de sinalização e
defina-o usando
RTCPeerConnection.setRemoteDescription()
. - Crie uma resposta para a descrição do SDP remoto chamando
RTCPeerConnection.createAnswer()
: - Transfira (usando um serviço de sinalização) a resposta para o peering remoto.
- Registre um listener para eventos
icecandidate
noRTCPeerConnection
. - Transfira cada evento
icecandidate
(usando um serviço de sinalização) para: no terminal remoto. - Aguarde os candidatos ICE remotos do serviço de sinalização e adicione
usando
RTCPeerConnection.addIceCandidate()
O desafio dessa API é que a maioria das operações são assíncronas,
o que geralmente dificulta a implementação real de um aplicativo WebRTC.
Muitas das funções retornam um Promise
que precisa ser resolvido antes que o
e a próxima etapa do processo pode continuar.
Recomenda-se que, ao implementar um aplicativo usando essa API, os
o desenvolvedor usa async
e await
em vez de registrar listeners.
(usando Promise.then()
), já que isso facilita o acompanhamento do código. Considere
exemplo a seguir:
function createAndSendOffer(peerConnection, signallingService) {
peerConnection.createOffer()
.then(offer => {
signallingService.send({
type: 'offer',
data: offer
});
});
}
Ao escrever o código acima usando async
e await
, recebemos o seguinte:
async function createAndSendOffer(peerConnection, signallingService) {
const offer = await peerConnection.createOffer();
signallingService.send({
type: 'offer',
data: offer
});
}