Skip to content

Reprodução WebRTC (WHEP)

media.play.webrtc

Configuração

Defina estas opções pelo central. Exemplo de config do streamer:

listeners.webrtc define portas UDP compartilhadas por WHIP e WHEP. Se estiver ausente ou vazio, o sistema operacional seleciona uma porta livre. port: 0 também ativa a seleção automática. Os candidatos ICE do SDP anunciam a porta atribuída; não existe uma porta exclusiva por sessão. Reaplicar a mesma lista mantém a porta. Uma reinicialização pode alterá-la.

Parâmetro Valor Comportamento
listeners.webrtc Ausente ou [] Uma porta UDP automática
listeners.webrtc[].port Obrigatório por entrada, 0–65535 0 seleciona a porta automaticamente; outro valor a fixa
listeners:
  webrtc:
  - port: 5005
  - port: 5006

Para regras fixas de firewall ou encaminhamento atrás de NAT, configure portas explícitas e permita o acesso dos clientes. O proxy HTTP trata o SDP; a mídia UDP deve chegar ao próprio streamer. O endereço ICE vem do roteamento IPv4 local; listeners.webrtc não tem ajuste de endereço ICE público nem TURN. A seleção automática de porta não configura NAT.

URL de reprodução

URL direta do streamer:

https://streamer.example.com/streaming/whep/studio

Esta URL é para um cliente WHEP que envia SDP por POST. Abri-la na barra do navegador executa GET e não inicia a reprodução.

Autenticação

WHEP usa a autorização de reprodução. Envie um token permitido em Authorization: Bearer PLAY_TOKEN ou ?token=PLAY_TOKEN. O acesso é verificado ao criar a sessão; os bytes são contabilizados nela. Um token de publicação não concede acesso de reprodução por si só.

Transporte

HTTP(S) trata o SDP e o controle da sessão. A mídia usa UDP com ICE e DTLS-SRTP/SRTCP. Use HTTPS no navegador; acesso HTTP e acesso à porta UDP são requisitos independentes.

Se a página do navegador e o endpoint WHIP/WHEP usam origens diferentes, adicione no proxy HTTPS o cabeçalho de resposta Access-Control-Expose-Headers: Location para o cliente ler a URL da sessão. Isso não é necessário quando a página e a API compartilham a origem.

Codecs compatíveis

  • H.264
  • AV1
  • Opus

O vídeo usa H.264 ou AV1; o áudio, Opus. H.264 tem preferência na negociação; WHEP também depende dos codecs da origem e do reprodutor. WebRTC não transcodifica: converta outros codecs de áudio para Opus antes. HEVC e VP8/VP9 não são suportados neste processamento. WHEP exige uma faixa de vídeo compatível; o áudio é opcional.

API HTTP

Método e caminho Resultado
POST /streaming/whep/{stream} Oferta SDP (application/sdp); retorna 201 Created, resposta SDP e URL da sessão em Location
GET /streaming/whep/{stream} 204 No Content; não retorna vídeo nem página de reprodutor
OPTIONS /streaming/whep/{stream} CORS e tipos de conteúdo aceitos
DELETE /streaming/whep/session/{id} Encerra a sessão; retorna 204 No Content
PATCH /streaming/whep/session/{id} Um fragmento SDP válido não vazio recebe 501 Not Implemented

A oferta deve incluir todos os candidatos ICE do cliente; adicioná-los depois por PATCH não é suportado. Guarde Location para encerrar a sessão. O servidor responde recvonly para WHIP e sendonly para WHEP.

Requisitos e comportamento

O stream deve estar ativo e fornecer MediaInfo válido. O cliente precisa de porta UDP acessível e codecs compatíveis. SRTP protege a conexão, mas WHEP não entrega conteúdo com criptografia DRM ativada.

Tratamento de erros

Código Causa
400 SDP inválido ou oferta que não pode ser negociada
403 Acesso negado; WHEP também recusa conteúdo criptografado
404 O stream não está ativo; WHEP também exige informações de faixas disponíveis
415 Content-Type incorreto; WHEP também exige vídeo compatível
503 Falha ao registrar a rota de mídia; um grupo WHEP também pode estar temporariamente indisponível

Limitações

A oferta e a resposta iniciais incluem todos os candidatos ICE. Trickle ICE, reinício ICE, contraoferta WHEP e alternativa TCP não estão implementados. Alterar a lista de portas UDP recria o transporte: reconecte os clientes. Uma lista inalterada mantém os sockets.

Próximos passos