WebRTC — reproducción y emisión en directo en el navegador
Actualizado el 05 oct. 2026WebRTC 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
- Abre el canal → Editar → Añadir salida y elige WebRTC en Tipo.
- Si quieres, fija Espectadores máximos por canal (0 = sin límite).
- 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.
- 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
- Abre el canal → Editar → Añadir fuente y elige WebRTC (WHIP).
- 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.