Enlaces firmados y varios CDN
Actualizado el 18 oct. 2026Castreon puede dar a los espectadores enlaces de visualización que caducan y puede entregar el mismo canal a través de varios CDN a la vez: el reproductor pasa solo a otro CDN si uno se cae. Desde aquí también se vacía la caché de los CDN: a mano, por la API o automáticamente.
Disponible desde Castreon 1.7.0, en la edición Enterprise. Los ajustes están en Ajustes → CDN y enlaces firmados.
Los perfiles
Cada perfil indica quién comprueba el enlace:
- Castreon (el servidor) — los espectadores llegan directamente al servidor y Castreon comprueba la firma. Dirección vacía = el dominio público de Ajustes → Instancia.
- Bunny, Gcore, CDN77 — los espectadores llegan a través del CDN y el CDN comprueba la firma, en su formato oficial. Rellena la dirección del CDN (solo el dominio), la Ruta del canal en el CDN (por defecto
/live/{slug}/, el CDN toma de Castreon) y la Clave de firma que da el CDN. Junto a cada tipo, el panel muestra qué hay que activar en el CDN.
Opciones por perfil: Duración del enlace (5 minutos – 7 días) y Vincular el enlace a la IP del espectador (más seguro, pero un teléfono que pasa del Wi-Fi a los datos móviles pierde la reproducción hasta que recibe un enlace nuevo). Las claves ya no se muestran después de guardar; el campo vacío conserva la clave actual.
Probar pide a través del perfil la playlist de un canal en marcha, una vez con un enlace válido y otra con uno caducado: el enlace válido debe recibir la playlist y el caducado debe ser rechazado. Si el CDN sirve también el enlace caducado, el panel te avisa de que la comprobación no está activada en el CDN.
Qué está verificado: el perfil Castreon está probado de principio a fin. Para Bunny, Gcore y CDN77, la firma es idéntica a la del código oficial de cada proveedor (verificado en pruebas), pero no se ha probado en una cuenta real: usa Probar antes de producción. El panel lo indica junto a cada perfil.
El enlace para un espectador
- En la página del canal, Enlace firmado: elige el perfil (y, opcionalmente, la IP del espectador) → Crear enlace.
- Desde tus aplicaciones:
POST /api/v1/channels/{id}/playback-url, un enlace por espectador (clave API con el ámbitoplayback:sign).
Exigir enlace firmado en /live bloquea los enlaces sin firmar hacia el servidor. Las peticiones sin firma pasan entonces solo desde las direcciones de Acceso a los flujos: pon ahí primero los CDN y los balanceadores de carga que toman del servidor. HTTP-TS, LL-HLS y WebRTC todavía no tienen enlace firmado.
El reloj del servidor debe estar en hora (NTP): la caducidad del enlace se calcula con él.
Varios CDN: Content Steering
Con al menos dos perfiles activados, Enlace firmado tiene la opción Todas (Content Steering): un solo enlace para todos los CDN, según el estándar HLS Content Steering. Castreon comprueba cada CDN cada 30 segundos, en un canal en marcha: que responda, que reciba la playlist, que no se quede atrás con los segmentos. Tras 3 comprobaciones fallidas, el CDN se marca como caída y pasa al final de la lista; tras 3 correctas vuelve. Los reproductores que entienden Content Steering pasan solos al CDN siguiente, sin detener la reproducción (probado con hls.js 1.6); los demás reproductores usan el primer CDN de la lista.
- El orden de los perfiles (las flechas) es la prioridad. El enlace
cdn: "auto"de la API elige el primer CDN que funciona. - El estado de cada CDN, con el porcentaje de éxitos en 24 horas, aparece junto al perfil. En Notificaciones, la familia CDN avisa de un CDN caído.
/metricstienecastreon_cdn_upycastreon_cdn_latency_seconds.
La comprobación se hace desde el servidor, no desde las redes de los espectadores: un CDN que funciona desde el servidor puede tener aun así un problema en un país concreto.
Vaciado de la caché
Para el vaciado, el perfil necesita el ID de la zona / recurso y una Clave API para el vaciado del CDN (opcional).
- Vaciar todo en el perfil: toda la caché de la zona, con confirmación.
- Vaciar la caché de la CDN en la página del canal (administradores): solo el directorio del canal.
- API:
POST /api/v1/cdn/purgeconchannel,paths(como máximo 10) oall. Cada vaciado queda en Auditoría, sin claves. - Webhook de vaciado propio — para cualquier otro CDN o un script: Castreon envía un
POSTJSON (event: "cdn.purge", las rutas, el canal, el motivo) firmado conX-Castreon-Signature: sha256=HMAC-SHA256(secreto, cuerpo).
Purga automática (activada por defecto): cada vez que un canal arranca y cuando se elimina, Castreon vacía el directorio del canal en cada CDN con vaciado configurado y avisa al webhook. El motivo: en cada arranque, los segmentos nuevos tienen los mismos nombres que los anteriores, y un CDN que todavía los guarde daría a los espectadores trozos antiguos. Como máximo un vaciado por canal cada 30 segundos; si el CDN pide una pausa (límite de peticiones), Castreon espera y vuelve a intentarlo. El último vaciado automático y su resultado aparecen en los ajustes.
El vaciado usa las API oficiales de cada CDN (según su documentación); no se ha probado en cuentas reales.
Problemas frecuentes
- La prueba dice que el CDN sirve el enlace caducado: la comprobación de la firma no está activada en el CDN (mira el texto junto al tipo de perfil).
- Los segmentos reciben 403, la playlist no: en Gcore falta el ajuste que pasa los parámetros de la playlist a los segmentos.
- El CDN aparece como «caída» con «playlist antigua»: el CDN guarda la playlist en caché demasiado tiempo; las playlists deben seguir la cabecera del servidor (
no-cache). - El vaciado dice que la clave API es incorrecta: la clave no es válida o no tiene permiso para vaciar. La zona / recurso no existe en la CDN: el ID de la zona / recurso es incorrecto.
- Se alcanzó el límite de vaciados de la CDN: el CDN solo acepta unos pocos vaciados por minuto; el panel dice dentro de cuántos segundos puedes volver a intentarlo.