Chaînes et sources
Ce qu’est une chaîne
Section titled “Ce qu’est une chaîne”Une source plus une destination. La source est une URL depuis laquelle Castmux tire le flux ; la destination est une adresse IPv4 et un port vers lesquels il pousse du MPEG-TS. Tout le reste sur la chaîne — moteur, profil de résolution, comportement à la demande, débit attendu — modifie la manière dont ce tuyau unique est exploité, pas ce qu’il transporte.
Les chaînes sont indépendantes. Chacune est supervisée, redémarrée et mesurée séparément, de sorte qu’un serveur d’origine hors service sur une chaîne ne perturbe pas les autres.
Types de sources
Section titled “Types de sources”Sur IP, quatre types de sources sont pris en charge aujourd’hui : HLS, SRT, RTMP et MPEG-TS brut, ce dernier soit en multicast UDP, soit en HTTP. Le tableau ci-dessous indique ce qui est également pris en charge et ce qui est prévu.
| Source | État | Remarques |
|---|---|---|
| HLS | Pris en charge | Playlist maître ou playlist média unique. Voir profils de résolution pour la manière dont un niveau est choisi. |
| SRT | Pris en charge | Mode caller, entièrement configuré depuis l'URL. La latence est calculée automatiquement. |
| RTMP | Pris en charge | Moteur de remultiplexage uniquement. En général, un encodeur local qui pousse vers le réseau de l'appareil. |
| Multicast UDP (MPEG-TS) | Pris en charge | Réception d'un flux multicast existant, comme la sortie d'une autre tête de réseau. Type de source mpegts avec une URL udp://. Voir sources MPEG-TS. |
| MPEG-TS sur HTTP | Pris en charge | Un transport stream brut sur HTTP, sans playlist. Type de source mpegts avec une URL http:// ou https://. |
| Multicast RTP | Prévu | Transport stream encapsulé dans RTP. Seul le MPEG-TS brut sur UDP est lu aujourd'hui. prévu |
| Caméras RTSP | Prévu | Pour les flux du hall, de la chapelle et de vidéosurveillance. prévu |
| Entrée tuner DVB-S/S2 | Prévu | Services satellite reçus par voie hertzienne plutôt que sur IP. Non disponible aujourd'hui : il n'existe aucune entrée tuner d'aucune sorte, n'achetez donc pas de carte tuner dans ce but. prévu |
| Entrée tuner DVB-T | Prévu | Services terrestres reçus par voie hertzienne. prévu |
| Entrée tuner DVB-C | Prévu | Réception de services depuis un réseau câblé plutôt que sur IP. prévu |
Sources HLS
Section titled “Sources HLS”Indiquez à la chaîne l’URL d’une playlist maître. Castmux lit l’échelle qu’elle annonce et sélectionne une variante à transmettre au moteur, selon le profil de résolution de la chaîne. Sans profil — la valeur par défaut, et celle de toutes les chaînes existantes — la playlist maître est transmise sans modification et c’est l’ordre du serveur d’origine qui décide.
La position de départ par rapport au direct est configurable. Démarrer plus loin en arrière dans la playlist apporte de la robustesse face à un serveur d’origine qui publie ses segments de façon irrégulière, au prix d’un retard plus important sur le direct et d’une première image plus lente après un changement de chaîne.
Sources SRT
Section titled “Sources SRT”Les chaînes SRT fonctionnent en mode caller : Castmux se connecte au serveur d’origine. Toute la configuration réside dans l’URL, et les paramètres de requête suivants sont transmis au moteur :
streamid, passphrase, transtype, latency, rcvlatency, peerlatency, rcvbuf, sndbuf, maxbw, pbkeylen, payloadsize, tlpktdrop, linger.
srt://origin.example.net:9000?streamid=play/news&passphrase=••••••••&transtype=liveLatence automatique
Section titled “Latence automatique”Castmux mesure le temps d’aller-retour vers l’hôte d’origine et fixe le budget de latence SRT à quatre fois le RTT mesuré, avec un plancher de 200 ms et un plafond de 4000 ms. Toute valeur de latence présente dans l’URL est remplacée.
Ce mécanisme existe parce que la valeur par défaut habituelle de 120 ms est inadaptée sur tout lien présentant une gigue réelle, et parce que la panne qui en résulte n’est jamais attribuée à la latence. Un budget sous-dimensionné ne coupe pas la chaîne : il provoque des artefacts intermittents — quelques secondes de macroblocs de temps en temps, à intervalles imprévisibles, sur une chaîne dont le tableau de bord est entièrement au vert. Des sites passent des semaines à incriminer l’encodeur, le switch et le téléviseur avant que quiconque soupçonne un paramètre de transport recopié depuis une autre installation au trajet plus court.
Le multiplicateur est la recommandation SRT usuelle : un récepteur doit pouvoir attendre une retransmission, qui coûte un aller-retour complet, avec de la marge pour une seconde tentative. Le plancher évite qu’un lien très court reçoive un budget trop faible pour absorber la moindre perte ; le plafond évite qu’une seule mauvaise mesure ajoute des secondes de retard à une chaîne.
Si vous préférez fixer la valeur vous-même, désactivez ce comportement avec overwrite_srt_latency: false dans la configuration globale : la latence indiquée dans l’URL est alors laissée telle quelle.
Sources RTMP
Section titled “Sources RTMP”RTMP est pris en charge par le moteur de remultiplexage, et sert normalement pour un encodeur local situé sur le même réseau que l’appareil plutôt que pour un flux arrivant par Internet.
Sources MPEG-TS
Section titled “Sources MPEG-TS”Le type de source mpegts accepte un transport stream qui arrive tel quel, sans playlist ni conteneur autour. Le schéma de l’URL détermine le transport :
# a multicast group, e.g. another headend's outputsource: type: mpegts url: udp://239.20.0.5:1234?localaddr=192.168.10.4
# a continuous transport stream over HTTPsource: type: mpegts url: https://origin.example.net/news/mpegtsEn UDP, la chaîne rejoint le groupe et lit les datagrammes de transport stream exactement comme ils arrivent. L’URL accepte trois paramètres facultatifs, identiques pour les deux moteurs :
localaddrest l’adresse locale sur laquelle recevoir le groupe. Renseignez-la sur un appareil doté de plusieurs interfaces, afin que l’abonnement parte par celle qui fait face à l’émetteur.sourcesrestreint la réception à un seul émetteur, pour le multicast spécifique à la source.buffer_sizeest le tampon de réception du noyau, en octets. La valeur par défaut est généreuse, afin qu’un blocage de l’ordonnanceur ne fasse pas perdre de datagrammes.
En HTTP, la chaîne lit une réponse unique et sans fin, comme la sortie /mpegts d’un serveur de streaming. Si le serveur d’origine ferme la connexion, la chaîne redémarre, comme pour toute autre défaillance de source.
Quelques points diffèrent des autres types de sources :
- Les profils de résolution ne s’appliquent pas. Un transport stream transporte un seul rendu fixe, et il n’y a pas d’échelle parmi laquelle choisir.
- Une chaîne ne peut pas recevoir sa propre sortie. Une source
udp://identique à l’adresse et au port de destination de la chaîne est refusée à l’enregistrement. Sinon, le moteur ingérerait indéfiniment ce qu’il vient d’envoyer, pendant que l’indicateur de débit afficherait une chaîne en bonne santé. Lire le groupe d’une autre chaîne est autorisé, et constitue un moyen délibéré d’enchaîner une chaîne sur une autre. - Seul le transport stream brut est lu. Un flux multicast encapsulé dans RTP n’est pas encore pris en charge.
La destination
Section titled “La destination”Une adresse IPv4 et un port. L’adresse peut être un groupe multicast, cas normal pour la distribution de télévision, ou une adresse unicast pour un récepteur unique ou un test.
En multicast, utilisez la plage à portée administrative 239.0.0.0/8. Elle est réservée exactement à cet usage — privé, local à l’organisation — si bien qu’aucune adresse choisie à l’intérieur ne peut entrer en conflit avec une attribution connue.
Une seule destination par chaîne aujourd’hui. Envoyer la même chaîne vers plusieurs groupes — par exemple un groupe multicast et une sonde unicast — nécessite une deuxième chaîne avec la même URL source. Plusieurs destinations par chaîne : prévu.
Réglages par chaîne
Section titled “Réglages par chaîne”active
Indique si la chaîne est supervisée. Une chaîne inactive conserve sa configuration mais n’est jamais démarrée et ne produit aucune métrique.
force_always_on
Maintient la chaîne en fonctionnement, que quelqu’un la regarde ou non. Désactivé par défaut, ce qui signifie diffusion à la demande : la chaîne ne tourne que lorsqu’un spectateur est détecté sur son groupe. Activez-le pour les chaînes qui ne doivent jamais subir le délai de démarrage à froid lors d’un changement de chaîne. Voir Diffusion à la demande.
moteur
Remplace le choix global de moteur pour cette chaîne. Vide signifie hériter. Voir Moteurs de diffusion.
resolution_profile
Le niveau de l’échelle HLS à retenir. Vide signifie prendre la playlist maître sans modification. Ignoré pour SRT et RTMP, qui n’ont pas d’échelle. Voir Profils de résolution.
min_output_kbps
Le débit de sortie en dessous duquel la chaîne est considérée comme ne produisant rien, et donc comme devant être redémarrée.
Nommer une chaîne
Section titled “Nommer une chaîne”Le nom de la chaîne n’est pas qu’une étiquette dans l’interface. Il devient le nom de service DVB transporté dans la SDT, c’est-à-dire ce qu’un téléviseur affiche dans sa liste de chaînes, et c’est l’étiquette attachée à chaque métrique produite par la chaîne.
C’est cette seconde conséquence qui surprend : renommer une chaîne renomme ses séries de métriques. L’historique ne suit pas le changement de nom, si bien qu’un tableau de bord ou une alerte basés sur l’ancien nom deviennent muets, et le graphique de la chaîne semble repartir de zéro. Choisissez les noms avant de construire vos tableaux de bord, et considérez un changement de nom comme une opération ayant un coût en aval plutôt que comme une retouche cosmétique.
Identité des chaînes
Section titled “Identité des chaînes”Les chaînes sont identifiées par un identifiant entier. Cet identifiant apparaît dans le fichier de configuration, dans l’API HTTP et partout où une chaîne est référencée depuis l’extérieur.
Les identifiants sont actuellement réutilisés après une suppression. Si vous supprimez la chaîne 7 puis ajoutez une nouvelle chaîne, celle-ci peut recevoir l’identifiant 7. C’est une chaîne différente à tous égards pour un opérateur — nom, source et destination différents —, mais tout ce qui est indexé sur l’identifiant y voit une continuité qui n’existe pas.
Les conséquences pratiques sont à connaître avant de vous fier aux identifiants :
- Tout ce qui stocke un état par chaîne rattaché à l’identifiant — un ordonnanceur externe, un appel API enregistré, un favori dans l’interface — peut se retrouver pointé vers la mauvaise chaîne après un cycle suppression-ajout.
- Les navigateurs restaurent l’état des contrôles de formulaire lors d’un rechargement simple, indépendamment de ce que le serveur a rendu ; une chaîne nouvellement créée peut donc afficher brièvement un réglage hérité de la chaîne supprimée qui portait son identifiant. C’est le badge à côté du contrôle qui dit vrai.
- En DVB-C, l’identité du service est dérivée de la position dans un multiplex plutôt que de l’identifiant de la chaîne ; réordonner ou supprimer une chaîne déplace donc les services qui l’entourent.
Des identifiants stables et non réutilisés ainsi qu’une identité de service figée : prévu. D’ici là, la règle sûre est la suivante : un identifiant désigne un emplacement, un nom désigne une chaîne.
Chaînes fournies par la licence
Section titled “Chaînes fournies par la licence”Une licence peut contenir une liste de chaînes en plus d’une autorisation de diffuser. À chaque vérification de licence, l’appareil compare cette liste à ses propres chaînes. Chaque chaîne enregistre qui en est propriétaire (managed_by dans le fichier de configuration), et deux règles en découlent :
- Une chaîne fournie par la licence appartient au serveur de licences. À chaque vérification, sa source, sa destination, son profil de résolution, son mode toujours actif et son état activé/désactivé sont mis à jour selon ce qu’envoie le serveur, de sorte qu’une chaîne qui change d’adresse est corrigée sans intervention sur site. Si le serveur cesse de la lister, elle est supprimée. L’interface web signale ces chaînes et refuse de les modifier ou de les supprimer, puisque la vérification suivante annulerait le changement.
- Une chaîne que vous avez ajoutée vous-même n’est jamais modifiée. Le serveur ne la change ni ne la supprime jamais, même si la liste contient une chaîne du même nom. Seule exception : une chaîne que vous avez désactivée. Comme elle ne diffuse rien, une chaîne sous licence portant le même nom ou la même destination peut la reprendre. C’est ce qui permet de migrer un ancien appareil sans supprimer d’abord ses anciennes chaînes.
La licence fixe aussi un nombre maximal de chaînes pouvant tourner simultanément. Une chaîne sous licence au-delà de cette limite est ajoutée désactivée plutôt qu’abandonnée, si bien qu’augmenter l’offre plus tard revient à l’activer, sans la ressaisir. La limite s’applique aussi aux chaînes que vous ajoutez vous-même : une chaîne ajoutée alors que la limite est déjà atteinte arrive désactivée, avec un message qui en explique la raison.
Une chaîne sous licence qui enverrait vers un groupe déjà utilisé par une autre chaîne en cours de fonctionnement est refusée plutôt que d’être autorisée à entrer en collision ; il en va de même pour une chaîne envoyée par le serveur sans URL source ni destination. Les refus sont affichés dans l’interface web et journalisés, ce qui permet de distinguer « le serveur n’a rien envoyé » de « l’appareil a refusé ce qu’il a envoyé ».
Exemple commenté
Section titled “Exemple commenté”Deux chaînes dans config.yaml — l’une en HLS avec un profil de résolution, l’autre en SRT avec un plancher de débit abaissé parce qu’il s’agit d’un service radio :
streams: - id: 1 name: BBC One description: Reception and lounge active: true source: type: hls url: https://origin.example.net/bbcone/master.m3u8 destination: address: 239.1.1.10 port: 5000 # Televisions here are 720p panels; the origin lists 1080p first. resolution_profile: hd force_always_on: true
- id: 2 name: Classic FM description: Audio only active: true source: type: srt url: srt://origin.example.net:9000?streamid=play/classicfm&transtype=live destination: address: 239.1.1.11 port: 5000 # Radio: well under the video-oriented global floor, so lower it or the # channel is treated as silent and restarted forever. min_output_kbps: 64 force_always_on: trueAucune latency n’est indiquée dans l’URL SRT, car Castmux la déduit de l’aller-retour mesuré. Aucun engine n’est indiqué sur l’une ou l’autre chaîne, si bien que toutes deux héritent de la valeur globale par défaut.