Publicação WHIP¶
media.publish.whip
O emissor se conecta ao Sapsan por WHIP e publica em uma entrada publish. Os quadros recebidos entram no processamento de mídia comum; configure separadamente a gravação do arquivo e outros protocolos de reprodução.
Configuração¶
Defina estas opções pelo central. Exemplo de config do streamer:
listeners:
http:
- port: 8080
auth:
publish_tokens:
- PUBLISH_TOKEN
streams:
- name: studio
inputs:
- publish: {}
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 publicação¶
URL direta do streamer:
https://streamer.example.com/streaming/whip/studio
Autenticação¶
Envie Authorization: Bearer PUBLISH_TOKEN ou ?token=PUBLISH_TOKEN. Configure o acesso com auth.publish_tokens ou um backend de autorização. As permissões de publicação e reprodução são configuradas separadamente.
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/whip/{stream} |
Oferta SDP (application/sdp); retorna 201 Created, resposta SDP e URL da sessão em Location |
GET /streaming/whip/{stream} |
204 No Content; não retorna vídeo nem página de reprodutor |
OPTIONS /streaming/whip/{stream} |
CORS e tipos de conteúdo aceitos |
DELETE /streaming/whip/session/{id} |
Encerra a sessão; retorna 204 No Content |
PATCH /streaming/whip/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.
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 |
409 |
WHIP: entrada publish ausente ou emissor já ativo |
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 |
Um stream aceita um emissor WHIP ativo. O emissor se reconecta após uma desconexão; a redundância de entradas determina o comportamento posterior.
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.