Ir al contenido
Castreon
Entrega

Enlaces firmados y varios CDN

Actualizado el 18 oct. 2026

Castreon 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 ámbito playback: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.
  • /metrics tiene castreon_cdn_up y castreon_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/purge con channel, paths (como máximo 10) o all. Cada vaciado queda en Auditoría, sin claves.
  • Webhook de vaciado propio — para cualquier otro CDN o un script: Castreon envía un POST JSON (event: "cdn.purge", las rutas, el canal, el motivo) firmado con X-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.

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)