Skip to content

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.

Siguientes pasos