Signierte Links und mehrere CDNs
Aktualisiert am 18 Okt 2026Castreon kann Zuschauern Wiedergabe-Links, die ablaufen, geben und denselben Kanal gleichzeitig über mehrere CDNs ausliefern: Der Player wechselt von selbst auf ein anderes CDN, wenn eines ausfällt. Hier wird auch der Cache der CDNs geleert — von Hand, über die API oder automatisch.
Verfügbar ab Castreon 1.7.0 in der Enterprise-Edition. Die Einstellungen finden Sie unter Einstellungen → CDN und signierte Links.
Die Profile
Jedes Profil legt fest, wer den Link prüft:
- Castreon (der Server) — die Zuschauer kommen direkt zum Server, und Castreon prüft die Signatur. Leere Adresse = die öffentliche Domain aus Einstellungen → Instanz.
- Bunny, Gcore, CDN77 — die Zuschauer kommen über das CDN, und das CDN prüft die Signatur, in seinem offiziellen Format. Tragen Sie die CDN-Adresse (nur die Domain), den Kanalpfad im CDN (standardmäßig
/live/{slug}/, das CDN holt von Castreon) und den vom CDN vergebenen Signaturschlüssel ein. Neben jeder Art zeigt das Panel, was beim CDN eingeschaltet werden muss.
Optionen pro Profil: Gültigkeit des Links (5 Minuten – 7 Tage) und Link an die IP des Zuschauers binden (sicherer, aber ein Handy, das von WLAN auf mobile Daten wechselt, verliert die Wiedergabe, bis es einen neuen Link erhält). Schlüssel werden nach dem Speichern nicht mehr angezeigt; ein leeres Feld behält den aktuellen Schlüssel.
Testen fordert über das Profil die Playlist eines laufenden Kanals an, einmal mit einem gültigen und einmal mit einem abgelaufenen Link: Der gültige Link muss die Playlist erhalten, der abgelaufene muss abgewiesen werden. Liefert das CDN auch den abgelaufenen Link aus, meldet Ihnen das Panel, dass die Prüfung beim CDN nicht eingeschaltet ist.
Wie weit geprüft: Das Castreon-Profil ist durchgehend getestet. Bei Bunny, Gcore und CDN77 ist die Signatur identisch mit der des offiziellen Codes des jeweiligen Anbieters (in Tests geprüft), wurde aber nicht mit einem echten Konto ausprobiert — verwenden Sie Testen vor dem Produktivbetrieb. Das Panel zeigt dies neben jedem Profil an.
Der Link für einen Zuschauer
- Auf der Kanalseite, Signierter Link: Profil wählen (und optional die IP des Zuschauers) → Link erstellen.
- Aus Ihren eigenen Anwendungen:
POST /api/v1/channels/{id}/playback-url, ein Link pro Zuschauer (API-Schlüssel mit dem Bereichplayback:sign).
Signierten Link auf /live verlangen sperrt unsignierte Links zum Server. Anfragen ohne Signatur kommen dann nur noch von den Adressen in Zugriff auf Streams durch — tragen Sie dort zuerst die CDNs und Load-Balancer ein, die vom Server holen. HTTP-TS, LL-HLS und WebRTC haben noch keinen signierten Link.
Die Serveruhr muss stimmen (NTP): Der Ablauf des Links wird danach berechnet.
Mehrere CDNs: Content Steering
Mit mindestens zwei eingeschalteten Profilen bietet Signierter Link die Option Alle (Content Steering): ein einziger Link für alle CDNs, nach dem Standard HLS Content Steering. Castreon prüft jedes CDN alle 30 Sekunden an einem laufenden Kanal: Es antwortet, es erhält die Playlist, es bleibt mit den Segmenten nicht zurück. Nach 3 fehlgeschlagenen Prüfungen wird das CDN als ausgefallen markiert und ans Ende der Liste gesetzt; nach 3 erfolgreichen kommt es zurück. Player, die Content Steering verstehen, wechseln von selbst auf das nächste CDN, ohne die Wiedergabe zu unterbrechen (ausprobiert mit hls.js 1.6); andere Player verwenden das erste CDN der Liste.
- Die Reihenfolge der Profile (die Pfeile) ist die Priorität. Der Link
cdn: "auto"aus der API wählt das erste CDN, das funktioniert. - Der Zustand jedes CDN, mit der Erfolgsquote über 24 Stunden, erscheint neben dem Profil. Unter Benachrichtigungen meldet die Familie CDNs ein ausgefallenes CDN.
/metricsenthältcastreon_cdn_upundcastreon_cdn_latency_seconds.
Die Prüfung erfolgt vom Server aus, nicht aus den Netzen der Zuschauer: Ein CDN, das vom Server aus funktioniert, kann trotzdem in einem bestimmten Land ein Problem haben.
Cache leeren
Zum Leeren braucht das Profil die ID der Zone / Ressource und einen API-Schlüssel zum Leeren des CDN (optional).
- Alles leeren beim Profil — der gesamte Cache der Zone, mit Bestätigung.
- CDN-Cache leeren auf der Kanalseite (Administratoren) — nur das Verzeichnis des Kanals.
- API:
POST /api/v1/cdn/purgemitchannel,paths(höchstens 10) oderall. Jedes Leeren wird im Audit vermerkt, ohne Schlüssel. - Eigener Leeren-Webhook — für jedes andere CDN oder ein Skript: Castreon sendet einen JSON-
POST(event: "cdn.purge", die Pfade, den Kanal, den Grund), signiert mitX-Castreon-Signature: sha256=HMAC-SHA256(Secret, Body).
Automatisches Leeren (standardmäßig eingeschaltet): Bei jedem Start eines Kanals und beim Löschen leert Castreon das Verzeichnis des Kanals auf jedem CDN mit eingerichtetem Leeren und benachrichtigt den Webhook. Der Grund: Bei jedem Start haben die neuen Segmente dieselben Namen wie die vorherigen, und ein CDN, das diese noch hält, würde den Zuschauern alte Stücke liefern. Höchstens ein Leeren pro Kanal alle 30 Sekunden; verlangt das CDN eine Pause (Anfragelimit), wartet Castreon und versucht es erneut. Das letzte automatische Leeren und sein Ergebnis erscheinen in den Einstellungen.
Das Leeren verwendet die offiziellen APIs jedes CDN (nach deren Dokumentation); es wurde nicht mit echten Konten ausprobiert.
Häufige Probleme
- Der Test meldet, dass das CDN den abgelaufenen Link ausliefert: Die Signaturprüfung ist beim CDN nicht eingeschaltet (siehe den Text neben der Art des Profils).
- Segmente erhalten 403, die Playlist nicht: Bei Gcore fehlt die Einstellung, die die Parameter aus der Playlist an die Segmente weitergibt.
- Das CDN ist „ausgefallen“ mit „alte Playlist“: Das CDN hält die Playlist zu lange im Cache — Playlists müssen dem Header des Servers folgen (
no-cache). - Das Leeren meldet, dass der API-Schlüssel falsch ist: Der Schlüssel ist ungültig oder hat kein Recht zum Leeren. Die Zone / Ressource existiert beim CDN nicht: Die ID der Zone / Ressource ist falsch.
- Das Leeren-Limit des CDN ist erreicht: Das CDN nimmt nur wenige Leerungen pro Minute an — das Panel sagt, nach wie vielen Sekunden Sie es erneut versuchen können.