Publicación WHIP¶
media.publish.whip
El emisor se conecta a Sapsan por WHIP y publica en una entrada publish. Los fotogramas recibidos pasan al procesamiento multimedia común; la grabación del archivo y otros protocolos de reproducción se configuran por separado.
Configuración¶
Configure estas opciones mediante central. Ejemplo de config del streamer:
listeners:
http:
- port: 8080
auth:
publish_tokens:
- PUBLISH_TOKEN
streams:
- name: studio
inputs:
- publish: {}
listeners.webrtc define puertos UDP compartidos por WHIP y WHEP. Si falta o está vacío, el sistema operativo selecciona un puerto libre. port: 0 también activa la selección automática. Los candidatos ICE del SDP anuncian el puerto asignado; no se reserva un puerto por sesión. Volver a aplicar la misma lista conserva el puerto. Un reinicio puede cambiarlo.
| Parámetro | Valor | Comportamiento |
|---|---|---|
listeners.webrtc |
Ausente o [] |
Un puerto UDP automático |
listeners.webrtc[].port |
Obligatorio por entrada, 0–65535 |
0 selecciona el puerto automáticamente; otro valor lo fija |
listeners:
webrtc:
- port: 5005
- port: 5006
Para reglas fijas del firewall o reenvío detrás de NAT, configure puertos explícitos y permita el acceso de los clientes. El proxy HTTP gestiona el SDP; los medios UDP deben llegar al propio streamer. La dirección ICE se obtiene del enrutamiento IPv4 local; listeners.webrtc no ofrece ajustes de dirección ICE pública ni TURN. La selección automática del puerto no configura NAT.
URL de publicación¶
URL directa del streamer:
https://streamer.example.com/streaming/whip/studio
Autenticación¶
Envíe Authorization: Bearer PUBLISH_TOKEN o ?token=PUBLISH_TOKEN. Configure el acceso con auth.publish_tokens o un backend de autorización. Los permisos de publicación y reproducción se configuran por separado.
Transporte¶
HTTP(S) gestiona el SDP y el control de la sesión. Los medios utilizan UDP con ICE y DTLS-SRTP/SRTCP. Use HTTPS en el navegador; el acceso HTTP y el acceso al puerto UDP son requisitos independientes.
Si la página del navegador y el endpoint WHIP/WHEP usan distintos orígenes, añada en el proxy HTTPS la cabecera de respuesta Access-Control-Expose-Headers: Location para que el cliente pueda leer la URL de sesión. No es necesario si la página y la API comparten origen.
Códecs compatibles¶
- H.264
- AV1
- Opus
El vídeo utiliza H.264 o AV1; el audio, Opus. H.264 tiene prioridad en la negociación; WHEP también depende de los códecs de origen y del reproductor. WebRTC no transcodifica: convierta previamente otros códecs de audio a Opus. HEVC y VP8/VP9 no están disponibles en este procesamiento. WHEP requiere una pista de vídeo compatible; el audio es opcional.
API HTTP¶
| Método y ruta | Resultado |
|---|---|
POST /streaming/whip/{stream} |
Oferta SDP (application/sdp); devuelve 201 Created, respuesta SDP y URL de sesión en Location |
GET /streaming/whip/{stream} |
204 No Content; no devuelve vídeo ni una página de reproductor |
OPTIONS /streaming/whip/{stream} |
CORS y tipos de contenido aceptados |
DELETE /streaming/whip/session/{id} |
Cierra la sesión; devuelve 204 No Content |
PATCH /streaming/whip/session/{id} |
Un fragmento SDP válido no vacío recibe 501 Not Implemented |
La oferta debe incluir todos los candidatos ICE del cliente; no se admite añadirlos después mediante PATCH. Guarde Location para cerrar la sesión. El servidor responde recvonly para WHIP y sendonly para WHEP.
Gestión de errores¶
| Código | Causa |
|---|---|
400 |
SDP incorrecto u oferta no negociable |
403 |
Acceso denegado; WHEP también rechaza contenido cifrado |
404 |
El stream no está activo; WHEP también requiere información de pistas disponible |
409 |
WHIP: falta la entrada publish o ya existe un emisor activo |
415 |
Content-Type incorrecto; WHEP también requiere vídeo compatible |
503 |
No se pudo registrar la ruta multimedia; un grupo de espectadores WHEP también puede estar temporalmente no disponible |
Un stream acepta un emisor WHIP activo. El emisor vuelve a conectarse tras una desconexión; el respaldo de entradas determina el comportamiento posterior.
Limitaciones¶
La oferta y la respuesta iniciales contienen todos los candidatos ICE. No están implementados Trickle ICE, reinicio ICE, contraoferta WHEP ni alternativa TCP. Cambiar la lista de puertos UDP reconstruye el transporte: vuelva a conectar los clientes. Una lista sin cambios conserva los sockets.