Ir al contenido
Castreon
Entrega

WebRTC — reproducción y emisión en directo en el navegador

Actualizado el 05 oct. 2026

WebRTC reproduce un canal directamente en el navegador — sin app, sin plugin — con un retraso mucho menor que HLS. Castreon te da una página con el reproductor ya lista, el código para insertarla en tu web y una dirección WHEP estándar para tus propios reproductores. Si el perfil tiene varias calidades, cada espectador recibe la adecuada a su conexión.

También funciona al revés: un canal puede recibir una emisión en directo por WebRTC (WHIP) — desde OBS, desde otro programa con WHIP o directamente desde el navegador, con una cámara o con la pantalla compartida.

Disponible desde Castreon 1.0.4, en el plan Enterprise.

Activar la reproducción en un canal

  1. Abre el canal → Editar → Añadir salida y elige WebRTC en Tipo.
  2. Si quieres, fija Espectadores máximos por canal (0 = sin límite).
  3. Si el perfil tiene al menos dos calidades H.264, deja activada la opción Varias calidades en el reproductor (junto a Activo) — ver más abajo. Si está desactivada o el perfil tiene una sola calidad, elige la Calidad enviada.
  4. Guarda. Las direcciones WebRTC aparecen en la página del canal, en Entrega.

Mientras nadie mira, no funciona nada: WebRTC arranca con el primer espectador y se detiene 30 segundos después del último.

Las direcciones

Para un canal con el nombre corto canal1:

Fila en Entrega Dirección Para
WebRTC · player http://<dominio>/whep/canal1/player cualquiera — se abre en cualquier navegador actual
WebRTC · iframe el código que inserta el reproductor en una página web tu web
WebRTC · WHEP http://<dominio>/whep/canal1 tu propio reproductor o app WebRTC (estándar WHEP)

<dominio> es el Dominio público de Ajustes → Instancia — consulta Exportación M3U y dominio público. Si has definido un Token para reproductores, el panel ya lo añade a las direcciones para operadores y administradores, y el reproductor lo pasa por sí mismo. Se aplican las mismas Direcciones permitidas que en HLS.

El reproductor arranca sin sonido, porque los navegadores solo permiten la reproducción automática en silencio; el espectador activa el sonido con Sound on.

Varias calidades en el reproductor

Con un perfil que tiene al menos dos calidades H.264 — por ejemplo la receta Escalera ABR (varias calidades): 1080p, 720p y 480p — cada espectador recibe una de ellas:

  • Automáticamente: Castreon mide todo el tiempo la conexión de cada espectador. Cuando la conexión ya no aguanta la calidad actual, baja; tras un periodo estable prueba la calidad superior. Si el intento no aguanta, vuelve atrás y espera más antes del siguiente.
  • A mano: el reproductor tiene un menú de calidad arriba a la derecha (Auto, 1080p, 720p, 480p, con el bitrate de cada una). Una calidad elegida ahí se mantiene hasta que el espectador vuelve a elegir Auto.

El cambio se hace en el siguiente fotograma clave del perfil (como mucho unos segundos), sin imagen rota. Las calidades son las que el perfil ya codifica, así que no se codifica nada más; solo se usan las calidades H.264. Los demás reproductores WHEP también reciben la elección automática; un reproductor que no informa de cómo va su conexión se queda en una calidad media (la mejor hasta unos 3,5 Mb/s).

Si cambias el perfil o la opción mientras alguien mira, los reproductores se reconectan solos en unos segundos, con las nuevas calidades.

Ajustes del servidor

Ajustes → WebRTC:

  • Puerto (UDP + TCP) — vacío significa 33478; un solo puerto para todos los espectadores y todas las emisiones. Ábrelo en el firewall tanto en UDP como en TCP — el panel muestra el comando exacto, por ejemplo ufw allow 33478/udp && ufw allow 33478/tcp.
  • IP pública — solo cuando el servidor está detrás de un NAT 1:1 (algunas nubes dan al servidor una dirección privada). Déjala vacía cuando la dirección pública está en el propio servidor.
  • Espectadores máximos por servidor — 0 significa sin límite; se aplica de inmediato.

El puerto y la IP pública se aplican tras reiniciar el servicio (sudo systemctl restart castreon). Cuando hace falta reiniciar, el panel te lo indica.

Retraso e imagen

  • Desde una fuente que llega de forma continua (UDP, SRT, RIST, DVB, WHIP), el retraso es de uno a dos segundos aproximadamente.
  • Desde una fuente HLS o DASH, la señal llega en segmentos de unos segundos. Castreon retiene un poco la imagen y la envía de forma uniforme, así que el retraso es de unos segundos. Justo después de arrancar puede haber una sola pausa breve mientras Castreon mide la fuente; después la imagen va fluida.
  • Los navegadores reproducen H.264 sin B-frames. Si el canal ya lo codifica Castreon en H.264, la imagen se copia tal cual. Si no (passthrough, HEVC), Castreon la convierte para los navegadores — cuenta con uno o dos núcleos de procesador por canal Full HD. Las varias calidades del reproductor se copian siempre.
  • El sonido se convierte a Opus, el formato de WebRTC.

Fuente en directo: emitir desde OBS o desde el navegador (WHIP)

Añadir la fuente

  1. Abre el canal → Editar → Añadir fuente y elige WebRTC (WHIP).
  2. Guarda. Castreon crea la Dirección WHIP (http://<dominio>/whip/canal1) y una Clave de publicación. Las dos aparecen en el editor, con botón para copiarlas.

La clave funciona como una contraseña: quien la tiene puede emitir en el canal. Nueva clave crea otra — después de guardar, la clave antigua deja de funcionar. Las cuentas que solo pueden ver el canal ven la clave enmascarada.

La emisión pasa a ser la fuente del canal como cualquier otra: el perfil, las salidas y el failover funcionan igual. Mientras nadie emite, la fuente WHIP no tiene señal: el canal espera y toma la emisión unos segundos después de que empiece. Con una fuente de reserva, el canal reproduce mientras tanto la reserva y vuelve a la emisión en la siguiente comprobación de la fuente principal (los ajustes de failover del canal). Un canal tiene una sola fuente WHIP y una sola emisión a la vez — una emisión nueva sustituye a la anterior. Una emisión que no envía nada durante 20 segundos se cierra.

Desde OBS (versión 30 o posterior)

Settings → Stream: Service = WHIP, Server = la dirección WHIP, Bearer Token = la clave de publicación. En Output, usa un codificador H.264 y un intervalo de fotogramas clave de 2 segundos. Castreon toma la imagen H.264 tal cual y convierte el sonido Opus a AAC para el canal.

Los demás programas que pueden emitir por WHIP se configuran igual: la dirección WHIP y la clave como Bearer token.

Desde el navegador

En la página del canal, la tarjeta Fuente WebRTC (WHIP) muestra si llega una emisión, desde qué dirección y con qué programa, la imagen y el sonido. Emitir desde el navegador abre una ventana en la que eliges la Fuente (cámara y micrófono, o la pantalla compartida) y la Calidad (720p o 1080p), y luego Iniciar la emisión. Mantén la ventana abierta mientras emites — si la cierras, la emisión se detiene.

Los navegadores solo permiten la cámara y la pantalla en una página HTTPS (o en localhost, por ejemplo a través de un túnel SSH) — consulta la sección siguiente. Los navegadores que no pueden enviar H.264 envían VP8; Castreon lo convierte a H.264, lo que consume procesador.

HTTPS para el panel

Castreon sirve el panel por HTTP simple. Para HTTPS, pon delante un servidor web con certificado. Lo más sencillo es Caddy, que obtiene el certificado por sí mismo — /etc/caddy/Caddyfile:

tv.example.com {
    reverse_proxy 127.0.0.1:33400
}

Con nginx, usa proxy_pass http://127.0.0.1:33400; y proxy_buffering off; (el panel recibe actualizaciones en directo). Después fija el Dominio público de Ajustes → Instancia en https://tv.example.com, para que las direcciones de Entrega y la dirección WHIP también usen HTTPS. La imagen y el sonido de WebRTC siguen viajando directamente por el puerto WebRTC, no por el servidor web.

En la página del canal

Mientras alguien mira, la tarjeta WebRTC muestra los espectadores y el límite, si la imagen se copia o se convierte, las Calidades (con el bitrate medido y cuántos espectadores tiene cada una), el Búfer (cuánto retiene Castreon la imagen para enviarla de forma uniforme), cuánto se ha enviado, las Paradas breves y la lista de espectadores — con la Calidad que recibe cada uno, si se eligió automáticamente o en el reproductor, y el ancho de banda estimado.

Para la monitorización, /metrics publica también las métricas WebRTC (castreon_webrtc_…) — consulta Métricas y Grafana. La comprobación automática de Ajustes → Soporte te avisa cuando no se ha podido abrir el puerto WebRTC o cuando un canal no puede enviar su imagen por WebRTC — consulta Comprobación automática e informe de diagnóstico.

Si no funciona

  • El reproductor sigue intentando conectar — el puerto está cerrado en el firewall (debe estar abierto en UDP y TCP), o el servidor está detrás de un NAT y la IP pública no está definida.
  • El reproductor muestra «WebRTC is available on the Enterprise plan» — la licencia del servidor no incluye WebRTC.
  • El reproductor muestra «channel is not running — retrying…» — el canal no ha podido arrancar; comprueba que está activo y que su fuente funciona (WebRTC lo arranca bajo demanda).
  • La imagen se detiene de vez en cuando — la fuente llega de forma irregular. Tras la primera pausa, Castreon amplía su reserva por sí mismo; si Paradas breves sigue subiendo, revisa la fuente.
  • El reproductor no tiene menú de calidad — el perfil tiene una sola calidad H.264, o Varias calidades en el reproductor está desactivada.
  • OBS no consigue conectar — revisa la dirección WHIP y la clave (tras Nueva clave y guardar, solo funciona la nueva) y que el puerto WebRTC esté abierto en UDP y TCP.
  • Emitir desde el navegador pide HTTPS — abre el panel por HTTPS (ver arriba) o a través de un túnel SSH en localhost.

Privacidad

Cookies y almacenamiento local

Las cookies estrictamente necesarias están siempre activas. Las estadísticas y el marketing usan servicios de Google y solo se activan si los aceptas; hasta entonces no se envía nada a Google. Puedes retirar tu consentimiento aquí en cualquier momento.

Estrictamente necesarias

Sin ellas no funcionan el inicio de sesión, los formularios ni el idioma elegido. No requieren consentimiento (§ 25, apartado 2, n.º 2 TDDDG).

Siempre activas
Nombre Finalidad Duración Tipo
castreon-session Mantiene la sesión: inicio de sesión e idioma elegido 2 horas, renovada en cada visita Cookie
XSRF-TOKEN Protege los formularios contra solicitudes falsificadas 2 horas, renovada en cada visita Cookie
remember_web_… Solo si marcas «Recordarme» al iniciar sesión Hasta cerrar sesión, máx. 400 días Cookie
__cf_bm Cloudflare: distingue visitantes de bots, solo cuando se verifica el tráfico 30 minutos Cookie · Cloudflare
castreon:consent Recuerda tu elección de cookies 12 meses Almacenamiento local
theme Apariencia de la cuenta de cliente: clara, oscura o del sistema Hasta que la cambies Almacenamiento local

Estadísticas

Google Analytics 4 (Google Ireland Ltd.): qué páginas se visitan, de dónde llegan las visitas y con qué tipo de dispositivo — con identificadores seudónimos, sin guardar la dirección IP. Nos ayuda a mejorar el sitio.

Nombre Finalidad Duración Tipo
_ga Google Analytics: reconoce al visitante (identificador seudónimo) 13 meses Cookie · Google Analytics
_ga_VHWQRPHPEF Google Analytics: mantiene el estado de la visita 13 meses Cookie · Google Analytics

Marketing

Google Ads (Google Ireland Ltd.): mide si las visitas desde anuncios de Google llevan a una prueba o a un plan y permite mostrar anuncios de Castreon en otros sitios (remarketing).

Nombre Finalidad Duración Tipo
_gcl_au, _gcl_aw Google Ads: vincula la visita con el clic en el anuncio (conversiones) 90 días Cookie · Google Ads
IDE, test_cookie Google Ads: remarketing y medición de anuncios, en dominios de Google (doubleclick.net) Hasta 13 meses Cookie · Google (tercero)