×

🌐 Distribution

Nginx · Redis · SSL · Lua

Architecture Principal → Stream → CDN

Vue d'ensemble

Le serveur principal agit uniquement comme orchestrateur — authentification, génération de tokens, routage CDN. Il ne touche jamais les données de flux. Les flux transitent directement de stream server via les proxys CDN vers les clients. Chaque réseau client dispose d'un CDN local pour une faible latence. Un CDN-Z public sert de secours.

Auth, tokens, orchestration. Aucune donnée de flux.

Validation du token via Redis, proxy vers stream server.

Serveurs de flux source (HLS/MPEG-TS).

Lecteur IPTV (VLC, décodeur, application mobile).

Flux de requêtes

Le client s'authentifie (API B2C / lien de lecture)

Le serveur principal crée un token dans Redis (URL source, TTL 24h)

Le serveur principal redirige le client vers le meilleur CDN (302)

Le client suit la redirection vers le CDN

Le CDN valide le token via le Redis du serveur principal (réseau X)

Le CDN proxie le flux de stream server vers le client

Topologie réseau

secours

internet public

Vérification de santé et basculement

CdnRouter vérifie la santé du CDN toutes les 30s via le point de terminaison /health. Si le meilleur CDN pour le sous-réseau du client est hors service, il bascule sur le CDN correspondant suivant (trié par longueur de préfixe CIDR, le plus spécifique en premier).

Aucun CDN sain → /cdn/ local sur le serveur principal (filet de sécurité)

Détails du token

Format du jeton

Clés Redis

URL de redirection

Formats supportés et normalisation d'URL

CdnToken détecte et gère automatiquement les différents formats d'URL source. Pour les chemins MPEG-TS ou de flux nus, il sonde le serveur pour la disponibilité HLS via une requête HEAD.

Playlist HLS — utilisée directement, playlist maître filtrée à une seule variante vidéo + toutes les pistes audio

MPEG-TS brut — converti automatiquement en HLS si le serveur le supporte (stream server le fait toujours), sinon proxysé brut sans mise en mémoire tampon

Fichier (mp4, m4s, ts, mkv, etc.) — proxysé directement tel quel, sans conversion

DASH (mpd) — proxysé directement tel quel

Filtre de playlist maître Nginx

Pour les flux HLS, le filtre de corps nginx réécrit la playlist maître (index.m3u8) pour ne conserver que la première variante vidéo tout en préservant toutes les pistes audio/sous-titres. Cela empêche les lecteurs de télécharger simultanément plusieurs qualités vidéo.

Avant (depuis stream server)

Après (livré au client)

Composants

Génère des tokens hex de 32 caractères, détecte automatiquement le format (HLS/MPEG-TS/fichier), normalise l'URL, stocke dans Redis avec SETEX (TTL 24h).

Trouve le meilleur CDN sain par IP client (correspondance CIDR + vérification de santé). Chaîne de secours.

Installe automatiquement nginx + lua-resty-redis + Redis sur les serveurs CDN. Injecte la localisation /cdn/ dans le nginx principal.

Modèle DB : domaine, ip_scope (CIDR), redis_host (IP principale sur le réseau X), statut de santé.