WebRTC API

WebRTC (Web Real-Time Communications) é uma tecnologia que permite aplicativos e sites da Web a capturarem e opcionalmente transmitirem mídia de áudio e/ou vídeo, assim como trocar informação arbitrária entre navegadores sem a necessidade de um intermediador. O conjunto de padrões que abrangem WebRTC possibilita o compartilhamento de informação e a realização de teleconferência peer-to-peer, dispensando a instalação de plug-ins ou quaisquer softwares de terceiros.

WebRTC consiste em diversas APIs e protocolos interrelacionados que trabalham juntos. A documentação que você encontrará aqui o ajudará a entender os fundamentos de WebRTC, como configurar e usar, tanto informação, quanto conexões de mídia e mais.

Conceitos e uso

WebRTC serve à diversas propostas; junto com a Media Capture and Streams API, eles fornecem poder multimídia para a Web, incluindo suporte para áudio e vídeo conferência, troca de arquivos, compartilhamento de tela, gerenciamento de identidade e interface com sistemas telefônicos legados, incluindo suporte para envio de sinais DTMF (touch-tone dialing). As conexões entre pares podem ser feitas sem a necessidade de drivers ou plug-ins especiais e, muitas vezes, sem servidores intermediários.

As conexões entre dois pares são representadas pela interface RTCPeerConnection. Uma vez que uma conexão foi estabelecida e aberta usando RTCPeerConnection, streams de mídia (MediaStreams) e/ou canais de dados (RTCDataChannels) podem ser adicionados à conexão.

Dados de mídia podem consistir em qualquer número de tracks(faixas) de dados de mídia; tracks, que são representados por objetos baseados na interface MediaStreamTrack , que podem conter um número dentre tipos de dados de mídia, incluíndo áudio, vídeo e texto (como legendas ou até mesmo nomes de capítulos). A maioria das transmissões consiste de ao menos uma faixa de áudio e comumente também uma faixa de vídeo, e podem ser usadas para enviar e receber ambas as mídias ao vivo ou dados salvos de mídia (como um filme transmitido).

Você também pode usar a conexão entre dois peers para trocar dados arbitrários binários usando a interface RTCDataChannel. Isto pode ser usado para informação de back-channel (canal de volta), troca de metadata, pacotes de status de games, transferência de arquivos, ou até mesmo como um canal primário para transferir dados.

Interoperabilidade

O WebRTC é geralmente bem suportado em navegadores modernos, mas algumas incompatibilidades permanecem. A biblioteca adapter.js é um calço para isolar aplicativos dessas incompatibilidades.

Referência WebRTC

WebRTC provê interfaces que trabalham em conjunto para realizar uma variedade de tarefas, nós dividimos as interfaces na listagem abaixo por categoria. Por favor, atente-se a sidebar para uma listagem em ordem alfabética.

Configuração e gerenciamento e conexão

Essas interfaces, dicionários e tipos são usados para configurar, abrir e gerenciar conexões WebRTC. Estão inclusas as interfaces que representam conexões de mídia de mesmo nível, canais de dados e interfaces usadas ao trocar informações sobre as capacidades de cada par para selecionar a melhor configuração possível para uma conexão de mídia bidirecional.

Interfaces

RTCPeerConnection

Representa uma conexão WebRTC entre o computador local e um ponto remoto. Ele é usado para lidar com o streaming eficiente de dados entre os dois pares.

RTCDataChannel

Representa um canal de dados bidirecional entre dois pares de uma conexão.

RTCDataChannelEvent

Representa eventos que ocorrem ao anexar um RTCDataChannel a um RTCPeerConnection. O único evento enviado com esta interface é datachannel.

RTCSessionDescription

Representa os parâmetros de uma sessão. Cada RTCSessionDescription consiste em uma descrição type indicando qual parte do processo de negociação de oferta/resposta ela descreve e do descritor SDP da sessão.

RTCStatsReport

Fornece estatísticas detalhadas de informações para uma conexão ou para uma track individual na conexão; o relatório pode ser obtido chamando RTCPeerConnection.getStats(). Detalhes sobre o uso de estatísticas WebRTC podem ser encontrados em WebRTC Statistics API.

RTCIceCandidate

Representa um servidor Interactive Connectivity Establishment (Estabelecimento de Conectividade Interativa) candidato (ICE) para estabelecer um RTCPeerConnection.

RTCIceTransport

Representa informações sobre um transporte ICE.

RTCPeerConnectionIceEvent

Representa eventos que ocorrem em relação aos candidatos ICE com o destino, geralmente um RTCPeerConnection. Apenas um evento é deste tipo: icecandidate.

RTCRtpSender

Gerencia a codificação e a transmissão de dados para um MediaStreamTrack em um RTCPeerConnection.

RTCRtpReceiver

Gerencia a recepção e decodificação de dados para um MediaStreamTrack em um RTCPeerConnection.

RTCTrackEvent

A interface usada para representar um evento track, que indica que um objeto RTCRtpReceiver foi adicionado ao RTCPeerConnection, indicando que um novo MediaStreamTrack de entrada foi criado e adicionado ao RTCPeerConnection.

RTCSctpTransport

Fornece informações que descrevem um transporte de Stream Control Transmission Protocol ou SCTP (Protocolo de Transmissão de Controle de Fluxo) e também fornece uma maneira de acessar a segurança da Datagram Transport Layer Security ou DTLS (Camada de Transporte de Datagrama Subjacente) através do qual os pacotes SCTP para todos os canais de dados de uma RTCPeerConnection são enviados e recebidos.

Dicionários

RTCIceServer

Define como se conectar a um único servidor ICE (como um servidor STUN ou TURN).

RTCRtpContributingSource

Contém informações sobre uma determinada fonte de contribuição (CSRC), incluindo a hora mais recente em que um pacote para o qual a fonte contribuiu foi reproduzido.

Eventos

bufferedamountlow

A quantidade de dados atualmente armazenados em buffer pelo canal de dados — conforme indicado por sua propriedade bufferedAmount — diminuiu para ficar igual ou inferior ao tamanho mínimo de dados em buffer do canal, conforme especificado por bufferedAmountLowThreshold.

close

O canal de dados concluiu o processo de fechamento e agora está no estado 'fechado'. Seu transporte de dados subjacente está completamente fechado neste ponto. Você pode ser notificado antes do fechamento, observando o evento closing.

closing

O RTCDataChannel fez a transição para o estado closing, indicando que será fechado em breve. Você pode detectar a conclusão do processo de fechamento observando o evento close.

connectionstatechange

O estado da conexão foi alterado, pode ser acessada em connectionState.

datachannel

Um novo RTCDataChannel está disponível após o peer remoto abrir um novo canal de dados. O tipo deste evento é RTCDataChannelEvent.

error

Um RTCErrorEvent indicando que ocorreu um erro no canal de dados.

error

Um RTCErrorEvent indicando que ocorreu um erro no RTCDtlsTransport. Este erro será dtls-failure ou fingerprint-failure.

gatheringstatechange

O estado de coleta do RTCIceTransport mudou.

icecandidate

Um RTCPeerConnectionIceEvent que é enviado sempre que o dispositivo local identifica um novo candidato ICE que precisa ser adicionado ao par local chamando setLocalDescription().

icecandidateerror

Um RTCPeerConnectionIceErrorEvent indicando que ocorreu um erro durante a coleta de candidatos ICE.

iceconnectionstatechange

Enviado para um RTCPeerConnection quando o estado de sua conexão ICE - encontrado na propriedade iceconnectionstate - muda.

icegatheringstatechange

Enviado para um RTCPeerConnection quando seu estado de coleta de ICE - encontrado na propriedade icegatheringstate - muda.

message

Uma mensagem foi recebida no canal de dados. O evento é do tipo MessageEvent.

negotiationneeded

Informa ao RTCPeerConnection que ele precisa realizar negociação de sessão chamando createOffer() seguido por setLocalDescription().

open

O transporte de dados subjacente para o RTCDataChannel foi aberto ou reaberto com sucesso.

selectedcandidatepairchange

O par atualmente selecionado de candidatos ICE foi alterado para o RTCIceTransport no qual o evento é disparado.

track

O evento track, do tipo RTCTrackevent é enviado para um RTCPeerConnection quando uma nova trilha é adicionada à conexão após a negociação bem-sucedida da mídia transmissão.

signalingstatechange

Enviado para a conexão de mesmo nível quando seu signalingstate foi alterado. Isso acontece como resultado de uma chamada para setLocalDescription() ou setRemoteDescription().

statechange

O estado do RTCDtlsTransport mudou.

statechange

O estado do RTCIceTransport mudou.

statechange

O estado do RTCSctpTransport mudou.

Tipos

RTCSctpTransport.state

Indica o estado de uma instância RTCSctpTransport.

Identidade e segurança

A API WebRTC inclui várias interfaces para gerenciar segurança e identidade.

RTCIdentityProvider

Permite que um agente de usuário possa solicitar que uma declaração de identidade seja gerada ou validada.

RTCIdentityAssertion

Representa a identidade de um ponto remoto da conexão atual. Se nenhum par ainda foi definido e verificado, esta interface retorna null. Uma vez definido, não pode ser alterado.

RTCIdentityProviderRegistrar

Registra um provedor de identidade (idP).

RTCCertificate

Representa um certificado que um RTCPeerConnection usa para autenticar.

Telefonia

Essas interfaces e eventos estão relacionadas à interatividade com redes telefônicas públicas comutadas (PTSNs) Elas são primariamente usadas para enviar sons de discagem por tom - ou pacotes que representam esses tons - pela rede para um par remoto.

Interfaces

RTCDTMFSender

Gerencia a codificação e a transmissão da sinalização de multifrequência de tom duplo (DTMF) para um RTCPeerConnection.

RTCDTMFToneChangeEvent

Usado pelo evento tonechange para indicar que um tom DTMF começou ou terminou. Este evento não propaga "bolhas" (exceto onde indicado de outra forma) e não é cancelável (exceto onde indicado de outra forma).

Eventos

tonechange

Um novo tom DTMF começou a tocar na conexão, ou o último tom no toneBuffer do RTCDTMFSender foi enviado e o buffer agora está vazio. O tipo do evento é RTCDTMFToneChangeEvent.

Guias

Introdução aos protocolos WebRTC

Este artigo apresenta os protocolos sobre os quais a API WebRTC é construída.

Conectividade WebRTC

Um guia de como as conexões WebRTC funcionam e como os vários protocolos e interfaces podem ser usados ​​juntos para criar aplicativos de comunicação poderosos.

Vida útil de uma sessão WebRTC

WebRTC permite criar comunicação peer-to-peer de dados arbitrários, áudio ou vídeo — ou qualquer combinação deles — em um aplicativo de navegador. Neste artigo, veremos o tempo de vida de uma sessão WebRTC, desde o estabelecimento da conexão até o fechamento da conexão quando ela não for mais necessária.

Estabelecendo uma conexão: O padrão de negociação perfeito

Negociação perfeita é um padrão de design recomendado para o seu processo de sinalização, que fornece transparência na negociação enquanto permite que ambos os lados sejam o offerer (ofertante) ou o answerer (respondente), sem necessidade de muito código para diferenciar os dois.

Sinalização e chamada de vídeo bidirecional

Um tutorial e exemplo que transforma um sistema de chat baseado em WebSocket criado para um exemplo anterior e adiciona suporte para abertura de chamadas de vídeo entre os participantes. A conexão WebSocket do servidor de bate-papo é usada para sinalização WebRTC.

Codecs usados ​​pelo WebRTC

Um guia para os codecs que o WebRTC exige que os navegadores suportem, bem como os opcionais suportados por vários navegadores populares. Está incluído um guia para ajudá-lo a escolher os melhores codecs para suas necessidades.

Usando canais de dados WebRTC

Este guia aborda como você pode usar uma conexão de mesmo nível e um RTCDataChannel associado para trocar dados arbitrários entre dois pares.

Usando DTMF com WebRTC

O suporte do WebRTC para interagir com gateways que se conectam a sistemas telefônicos antigos inclui suporte para enviar tons DTMF usando a interface RTCDTMFSender. Este guia mostra como fazer isso.

Tutoriais

Melhorando a compatibilidade usando o adaptador WebRTC.js

A organização WebRTC fornece no GitHub o adaptador WebRTC para solucionar problemas de compatibilidade em implementações WebRTC de diferentes navegadores. O adaptador é um shim JavaScript que permite que seu código seja escrito de acordo com a especificação para que "simplesmente funcione" em todos os navegadores com suporte a WebRTC.

Uma simples amostra de RTCDataChannel

A interface RTCDataChannel é um recurso que permite abrir um canal entre dois pares através do qual você pode enviar e receber dados arbitrários. A API é intencionalmente semelhante à API WebSocket, para que o mesmo modelo de programação possa ser usado para cada uma.

Construindo um telefone conectado à Internet com Peer.js

Este tutorial é um guia passo a passo sobre como construir um telefone usando Peer.js

Especificações

Specification
WebRTC: Real-Time Communication in Browsers
Media Capture and Streams
Media Capture from DOM Elements

Protocolos adequados para WebRTC

Protocolos de suporte relacionados

Veja também