Diffusion à la demande
Pourquoi c’est important
Section titled “Pourquoi c’est important”Sur ces appareils, la contrainte déterminante est la mémoire, pas le CPU. Chaque chaîne en fonctionnement mobilise un décodeur ou un démultiplexeur, des tampons et un socket, et ce coût est payé qu’un téléviseur écoute ou non. Dans un hôtel de cent chambres avec quarante chaînes, le nombre de chaînes distinctes regardées à trois heures du matin est généralement de deux ou trois.
Ne faire tourner que ce qui est regardé transforme les chaînes inactives en marge disponible. Cela allège aussi la liaison montante, car une chaîne qui ne tourne pas ne récupère aucun segment auprès du serveur d’origine.
Comment les spectateurs sont détectés
Section titled “Comment les spectateurs sont détectés”Lorsqu’un téléviseur se cale sur une chaîne multicast, il s’annonce par un rapport d’abonnement IGMP, et lorsqu’il la quitte, il envoie un message de départ (leave). Ces messages sont la seule preuve fiable que quelqu’un regarde, car rien en aval de l’appareil ne fait remonter l’information autrement. Castmux surveille donc le trafic IGMP sur l’interface qui fait face aux téléviseurs.
Il le fait par capture de paquets, en mode promiscuous, avec libpcap. Ce choix n’est pas arbitraire et mérite d’être compris, car l’alternative évidente — un socket brut IPPROTO_IGMP — ne fonctionne pas du tout.
Pourquoi un socket IGMP brut ne voit pas les autres hôtes
Section titled “Pourquoi un socket IGMP brut ne voit pas les autres hôtes”Le trafic d’abonnement n’est pas adressé à cette machine. Il est adressé à des groupes multicast que cette machine n’a, en général, pas rejoints :
| Message | Destination | Conséquence |
|---|---|---|
| Rapport IGMPv3 | 224.0.0.22 | Le groupe all-routers-v3. Une tête de réseau n'est pas un routeur et n'a aucune raison de l'avoir rejoint. |
| Leave IGMPv2 | 224.0.0.2 | Le groupe all-routers. Même problème. |
| Rapport IGMPv2 | le groupe rejoint | Adressé, par exemple, à 239.10.0.1 — un groupe que l'émetteur rejoint et vers lequel l'appareil ne fait jamais qu'envoyer. |
Linux écarte le multicast destiné à un groupe que l’hôte n’a pas rejoint dans le chemin de routage d’entrée, avant toute remise à un socket. Un socket brut est un point de remise ; le paquet a disparu bien avant d’y arriver. Aucune option de socket n’y change rien. Le socket s’ouvre sans erreur, les lectures bloquent indéfiniment, et le bug qui en résulte se manifeste par « personne ne regarde jamais » plutôt que par une erreur.
La capture de paquets se situe en dessous de cette vérification, au point d’arrivée des trames ; elle voit donc le trafic quels que soient les groupes rejoints par l’hôte. C’est pourquoi Castmux a besoin de la capacité de capturer des paquets bruts et pourquoi le conteneur tourne en réseau hôte — voir Installation.
Ce qui est suivi, et ce qui est ignoré
Section titled “Ce qui est suivi, et ce qui est ignoré”Seuls les groupes de destination configurés sur vos chaînes sont suivis. Le réseau d’un bâtiment transporte énormément de multicast sans rapport — découverte de services mDNS, SSDP des imprimantes et des téléviseurs connectés, échanges des protocoles de routage — et rien de tout cela ne compte comme spectateur. Les abonnements à un groupe que Castmux ne dessert pas sont écartés.
Castmux distingue aussi son propre trafic de celui d’un spectateur. Envoyer vers un groupe n’est pas le regarder ; une chaîne ne se maintient pas elle-même en vie.
Interrogation active
Section titled “Interrogation active”Un client envoie un rapport spontané lorsqu’il rejoint un groupe, puis ne dit plus rien jusqu’à ce qu’on l’interroge. Sur un réseau correctement routé, le querier IGMP — normalement le routeur — interroge périodiquement, et tout auditeur peut reconstituer la table des abonnements à partir des réponses.
Les segments sur lesquels vivent ces appareils n’ont généralement pas de querier. Il n’y a pas de routeur sur le VLAN des téléviseurs, les switchs font au mieux du snooping, et rien n’envoie de requêtes générales. Dans cette situation, un auditeur n’entend parler d’un abonnement qu’au moment précis où il se produit. Redémarrez Castmux, ou installez-le dans un bâtiment où des téléviseurs sont déjà calés sur des chaînes, et il ne connaît personne : chaque spectateur existant reste invisible jusqu’à ce qu’il change de chaîne.
Castmux envoie donc ses propres requêtes générales IGMP, par défaut toutes les 30 secondes, et construit la table des abonnements à partir des réponses. C’est ce qui permet à l’état des spectateurs de survivre à un redémarrage, et au nombre de spectateurs d’être exact dans l’intervalle d’une requête après le démarrage plutôt qu’au bout d’un temps indéterminé.
Temporisations
Section titled “Temporisations”Trois temporisations régissent le comportement. Les valeurs par défaut conviennent à un parc de décodeurs sur un segment calme ; la raison d’en modifier une est un symptôme précis observé, pas un souci d’ordre.
| Temporisation | Défaut | Ce qu'elle contrôle |
|---|---|---|
| Grâce | 90 s | Durée pendant laquelle un spectateur connu peut rester silencieux avant d'être considéré comme parti. Elle doit dépasser nettement l'intervalle de requête, afin qu'une seule requête ou une seule réponse perdue n'évince pas un téléviseur qui regarde toujours. Augmentez-la si vous voyez des spectateurs apparaître et disparaître sur un segment sujet aux pertes. |
| Maintien | 30 s | Durée pendant laquelle une chaîne continue de tourner après le départ de son dernier spectateur. Le zapping est le cas normal : un client passe six chaînes en vingt secondes et revient. Le maintien rend ce retour instantané au lieu d'imposer à chaque fois un nouveau démarrage à froid. |
| Intervalle de requête | 30 s | Fréquence à laquelle Castmux envoie une requête générale lorsque l'interrogation active est activée. Plus court signifie une reconstitution plus rapide de la table des abonnements et davantage de trafic ; plus long, l'inverse. Modifiez la grâce en même temps, pas indépendamment. |
Ce contre quoi le maintien vous protège
Section titled “Ce contre quoi le maintien vous protège”Un démarrage à froid est l’intervalle entre l’arrivée de l’abonnement et le départ du premier paquet vers le téléviseur. Mesuré sur l’appareil, il est d’environ 1.9 seconde avec le moteur pass-through et d’environ 4.4 secondes avec le moteur de remultiplexage. Voir Moteurs de diffusion pour la raison de cet écart.
Aucun de ces chiffres n’est gênant une fois. Payé six fois en vingt secondes par quelqu’un qui parcourt la grille, il fait la différence entre un téléviseur qui se comporte comme un téléviseur et un téléviseur qui semble en panne. C’est tout l’argument en faveur de la temporisation de maintien, et c’est pourquoi sa valeur par défaut n’est pas zéro.
Défaillance en mode ouvert
Section titled “Défaillance en mode ouvert”Si la capture de paquets ne peut pas démarrer — capacité manquante, mauvaise interface, bibliothèque indisponible —, Castmux continue de diffuser toutes les chaînes plutôt que de conclure que personne ne regarde.
Ce comportement est configurable, car il existe des parcs où un opérateur préférerait réellement qu’une chaîne s’arrête plutôt qu’elle tourne sans supervision. Le comportement par défaut est la défaillance en mode ouvert, et il doit le rester sauf raison concrète.
Lorsque la détection est altérée, Castmux se signale comme dégradé et l’indique dans l’interface. C’est plus important qu’il n’y paraît : sans cela, « 0 spectateur » est ambigu entre « personne ne regarde » et « je ne peux pas le savoir », et un opérateur retiendra la première interprétation à chaque fois. Un indicateur dégradé transforme une mauvaise réponse silencieuse en inconnue visible.
Remplacement par chaîne
Section titled “Remplacement par chaîne”force-always-on fait tourner une chaîne donnée en continu, quel que soit le nombre de spectateurs. Utilisez-le lorsque le consommateur du flux n’est pas quelque chose qui peut rejoindre un groupe :
- Une chaîne qui alimente un multiplex DVB-C. Le multiplexeur consomme le flux en continu et n’émet pas de rapports d’abonnement pour son compte. Une chaîne à la demande dans un multiplex, c’est un trou dans la porteuse. Voir Multiplexage DVB-C.
- Un écran de hall ou d’affichage dynamique derrière un équipement qui gère mal IGMP, ou qui ne doit jamais présenter de délai de démarrage.
- Pendant la mise en service. Lors de l’installation, vous voulez le flux sur le réseau pour pouvoir le mesurer, avant que la détection des spectateurs devienne une variable du diagnostic. Désactivez-le une fois terminé.
Une chaîne forcée est affichée comme telle dans l’interface, pour qu’il soit clair que son état de fonctionnement est une consigne et non une mesure.
L’aperçu compte comme un spectateur
Section titled “L’aperçu compte comme un spectateur”Ouvrir l’aperçu dans l’interface web enregistre un spectateur pour cette chaîne : une chaîne à la demande démarre donc lorsque vous la prévisualisez et reste active tant que l’aperçu est ouvert. Sans cela, prévisualiser une chaîne inactive n’afficherait rien et prévisualiser une chaîne en direct la maintiendrait en vie par accident — deux situations déroutantes. Fermer l’aperçu laisse la temporisation de maintien normale s’écouler.
Quand la désactiver
Section titled “Quand la désactiver”La diffusion à la demande n’est pas une complexité gratuite, et il existe deux cas où elle n’apporte rien :
- Une petite grille toujours active sur une machine qui a de la mémoire à revendre. Si huit chaînes tiennent confortablement et que les huit sont regardées la majeure partie de la journée, la diffusion à la demande ajoute un délai de démarrage au premier réglage du matin et n’économise rien dont vous ayez besoin. Faites-les tourner en mode toujours actif.
- Un segment sur lequel vous ne pouvez pas capturer le trafic. Si l’appareil ne peut pas voir l’IGMP des téléviseurs — parce qu’il n’est pas sur leur segment de couche 2, ou parce que le déploiement interdit la capture en mode promiscuous —, la détection des spectateurs n’a rien sur quoi travailler. Elle échouera en mode ouvert et diffusera tout de toute façon, mais vous devriez la désactiver explicitement plutôt que de laisser un indicateur dégradé en permanence, ce qui habitue les opérateurs à ignorer les avertissements.
Partout ailleurs, la mémoire qu’elle libère est la raison pour laquelle le nombre de chaînes sur ces appareils est ce qu’il est.