On-Demand-Streaming
Warum das wichtig ist
Section titled “Warum das wichtig ist”Auf diesen Geräten ist der Arbeitsspeicher der begrenzende Faktor, nicht die CPU. Jeder laufende Sender belegt einen Decoder oder Demultiplexer, Puffer und einen Socket, und diese Kosten fallen an, ob ein Fernsehgerät zuhört oder nicht. In einem Hotel mit hundert Zimmern und vierzig Sendern werden um drei Uhr morgens meist nur zwei oder drei verschiedene Sender gesehen.
Nur zu betreiben, was gesehen wird, verwandelt ungenutzte Sender wieder in Reserve. Außerdem sinkt die Last auf dem Uplink, weil ein Sender, der nicht läuft, keine Segmente vom Ursprungsserver abruft.
Wie Zuschauer erkannt werden
Section titled “Wie Zuschauer erkannt werden”Wenn ein Fernsehgerät auf einen Multicast-Sender schaltet, meldet es sich mit einem IGMP Membership Report an, und wenn es wegschaltet, sendet es ein Leave. Diese Nachrichten sind der einzige verlässliche Nachweis dafür, dass jemand zusieht, denn nichts hinter dem Gerät meldet auf andere Weise zurück. Castmux beobachtet deshalb den IGMP-Verkehr an der Schnittstelle zu den Fernsehgeräten.
Das geschieht per Paketmitschnitt im Promiscuous Mode mit libpcap. Diese Wahl ist nicht willkürlich, und es lohnt sich, sie zu verstehen, denn die naheliegende Alternative — ein Raw-Socket vom Typ IPPROTO_IGMP — funktioniert überhaupt nicht.
Warum ein Raw-IGMP-Socket andere Hosts nicht sehen kann
Section titled “Warum ein Raw-IGMP-Socket andere Hosts nicht sehen kann”Membership-Verkehr ist nicht an diese Maschine adressiert. Er ist an Multicast-Gruppen adressiert, denen diese Maschine in der Regel nicht beigetreten ist:
| Nachricht | Ziel | Folge |
|---|---|---|
| IGMPv3-Report | 224.0.0.22 | Die Gruppe „all routers v3“. Eine Kopfstation ist kein Router und hat keinen Grund, ihr beizutreten. |
| IGMPv2-Leave | 224.0.0.2 | Die Gruppe „all routers“. Dasselbe Problem. |
| IGMPv2-Report | die Gruppe, der beigetreten wird | Adressiert zum Beispiel an 239.10.0.1 — eine Gruppe, der der Absender beitritt und an die das Gerät immer nur sendet. |
Linux verwirft Multicast für eine Gruppe, der der Host nicht beigetreten ist, bereits im Eingangs-Routingpfad, noch vor der Zustellung an irgendeinen Socket. Ein Raw-Socket ist ein Zustellungsendpunkt; das Paket ist längst verschwunden, bevor es dort ankäme. Keine Socket-Option ändert daran etwas. Der Socket öffnet sich fehlerfrei, Lesevorgänge blockieren für immer, und der daraus entstehende Fehler äußert sich als „es sieht nie jemand zu“ statt als Fehlermeldung.
Der Paketmitschnitt setzt unterhalb dieser Prüfung an, dort, wo die Frames ankommen, und sieht den Verkehr deshalb unabhängig davon, welchen Gruppen der Host beigetreten ist. Aus diesem Grund braucht Castmux die Capability zum Mitschneiden von Rohpaketen, und aus diesem Grund läuft der Container mit Host-Networking — siehe Installation.
Was erfasst wird und was ignoriert wird
Section titled “Was erfasst wird und was ignoriert wird”Erfasst werden nur die Zielgruppen, die an Ihren Sendern konfiguriert sind. Im Netzwerk eines Gebäudes läuft viel fremder Multicast — mDNS-Service-Discovery, SSDP von Druckern und Smart-TVs, Routingprotokoll-Verkehr —, und nichts davon zählt als Zuschauer. Membership für eine Gruppe, die Castmux nicht bedient, wird verworfen.
Castmux unterscheidet außerdem seinen eigenen Verkehr von dem eines Zuschauers. An eine Gruppe zu senden heißt nicht, sie anzusehen; ein Sender hält sich nicht selbst am Leben.
Aktive Abfrage
Section titled “Aktive Abfrage”Ein Client sendet beim Beitritt unaufgefordert einen Report und schweigt danach, bis ihn etwas fragt. In einem ordentlich gerouteten Netz fragt der IGMP-Querier — normalerweise der Router — regelmäßig nach, und jeder Mithörer kann aus den Antworten die Membership-Tabelle rekonstruieren.
Die Segmente, in denen diese Geräte stehen, haben in der Regel keinen Querier. Im Fernseh-VLAN gibt es keinen Router, die Switches machen bestenfalls Snooping, und nichts sendet General Queries. In diesem Zustand erfährt ein Mithörer von einem Beitritt nur genau in dem Moment, in dem er stattfindet. Starten Sie Castmux neu oder installieren Sie es in einem Gebäude, in dem die Fernsehgeräte bereits eingeschaltet sind, und es kennt niemanden: Jeder vorhandene Zuschauer bleibt unsichtbar, bis er den Sender wechselt.
Castmux sendet deshalb eigene IGMP General Queries, standardmäßig alle 30 Sekunden, und baut die Membership-Tabelle aus den Antworten auf. Dadurch übersteht der Zuschauerzustand einen Neustart, und die Zuschauerzahl ist innerhalb eines Abfrageintervalls nach dem Start korrekt statt irgendwann.
Drei Timer steuern das Verhalten. Die Voreinstellungen passen zu einem Set-Top-Box-Bestand in einem ruhigen Segment; ein Grund, einen davon zu ändern, ist ein konkret beobachtetes Symptom, nicht Ordnungsliebe.
| Timer | Voreinstellung | Was er steuert |
|---|---|---|
| Grace (Karenzzeit) | 90 s | Wie lange ein bekannter Zuschauer schweigen darf, bevor er als gegangen gilt. Der Wert muss das Abfrageintervall deutlich übersteigen, damit eine einzelne verlorene Abfrage oder eine einzelne verlorene Antwort kein Fernsehgerät verdrängt, das noch zusieht. Erhöhen Sie ihn, wenn Zuschauer in einem verlustbehafteten Segment ständig auftauchen und verschwinden. |
| Linger (Nachlaufzeit) | 30 s | Wie lange ein Sender weiterläuft, nachdem sein letzter Zuschauer gegangen ist. Zappen ist der Normalfall: Ein Gast schaltet in zwanzig Sekunden durch sechs Sender und kehrt zurück. Linger macht die Rückkehr sofort möglich, statt jedes Mal einen neuen Kaltstart zu bezahlen. |
| Query interval (Abfrageintervall) | 30 s | Wie oft Castmux eine General Query sendet, wenn die aktive Abfrage eingeschaltet ist. Kürzer bedeutet schnellere Wiederherstellung der Membership-Tabelle und mehr Verkehr; länger das Gegenteil. Ändern Sie Grace zusammen damit, nicht unabhängig davon. |
Wovor Linger Sie schützt
Section titled “Wovor Linger Sie schützt”Ein Kaltstart ist die Zeitspanne zwischen dem Eintreffen des Joins und dem ersten Paket, das zum Fernsehgerät geht. Auf dem Gerät gemessen beträgt sie etwa 1.9 Sekunden mit der Pass-through-Engine und etwa 4.4 Sekunden mit der Remux-Engine. Warum sie sich unterscheiden, erfahren Sie unter Streaming-Engines.
Einmal ist keiner der beiden Werte störend. Wer aber durch die Senderliste schaltet und ihn in zwanzig Sekunden sechsmal bezahlt, erlebt den Unterschied zwischen einem Fernseher, der sich wie ein Fernseher anfühlt, und einem, der kaputt wirkt. Das ist das ganze Argument für den Linger-Timer, und deshalb ist die Voreinstellung nicht null.
Fail-open
Section titled “Fail-open”Wenn der Paketmitschnitt nicht starten kann — die Capability fehlt, die Schnittstelle ist falsch, die Bibliothek ist nicht verfügbar —, streamt Castmux weiterhin jeden Sender, statt zu folgern, dass niemand zusieht.
Das Verhalten ist konfigurierbar, denn es gibt Installationen, bei denen ein Betreiber einen Sender tatsächlich lieber gestoppt als unbeaufsichtigt laufen sieht. Die Voreinstellung ist Fail-open, und dabei sollte es bleiben, sofern Sie keinen konkreten Grund dagegen haben.
Ist die Erkennung beeinträchtigt, kennzeichnet sich Castmux als eingeschränkt und zeigt das in der Oberfläche an. Das ist wichtiger, als es klingt: Ohne diese Anzeige ist „0 Zuschauer“ mehrdeutig zwischen „niemand sieht zu“ und „ich kann es nicht feststellen“, und ein Betreiber wird jedes Mal die erste Bedeutung lesen. Eine Anzeige für den eingeschränkten Zustand macht aus einer stillen falschen Antwort ein sichtbares Unbekanntes.
Überschreibung pro Sender
Section titled “Überschreibung pro Sender”force-always-on lässt einen einzelnen Sender dauerhaft laufen, unabhängig von der Zuschauerzahl. Greifen Sie dazu, wenn der Abnehmer des Streams nichts ist, was einer Gruppe beitreten kann:
- Ein Sender, der einen DVB-C-Multiplex speist. Der Multiplexer verarbeitet den Stream ununterbrochen und sendet keine Membership Reports in seinem Namen. Ein Sender on demand in einem Multiplex ist eine Lücke im Träger. Siehe DVB-C-Multiplexing.
- Ein Lobby- oder Signage-Bildschirm hinter einem Gerät, das IGMP nicht korrekt beherrscht oder das nie eine Startverzögerung zeigen darf.
- Während der Inbetriebnahme. Bei der Installation soll der Stream auf der Leitung sein, damit Sie ihn messen können, bevor die Zuschauererkennung eine Variable in der Diagnose wird. Schalten Sie es danach wieder ab.
Ein erzwungener Sender wird in der Oberfläche als erzwungen angezeigt. So ist klar, dass sein Betriebszustand eine Anweisung ist und kein Messergebnis.
Die Vorschau zählt als Zuschauer
Section titled “Die Vorschau zählt als Zuschauer”Das Öffnen der Vorschau in der Weboberfläche wird als Zuschauer dieses Senders registriert. Ein Sender on demand startet also, wenn Sie ihn in der Vorschau öffnen, und bleibt aktiv, solange die Vorschau offen ist. Ohne das würde die Vorschau eines ruhenden Senders nichts zeigen, und die Vorschau eines laufenden Senders würde ihn versehentlich am Leben halten — beides verwirrend. Nach dem Schließen der Vorschau läuft der normale Linger-Timer.
Wann Sie es abschalten sollten
Section titled “Wann Sie es abschalten sollten”On-Demand-Streaming ist keine kostenlose Komplexität, und in zwei Fällen bringt es nichts:
- Eine kleine, dauerhaft laufende Senderliste auf einer Box mit freiem Speicher. Wenn acht Sender bequem passen und alle acht den größten Teil des Tages gesehen werden, bringt On-Demand-Streaming nur eine Startverzögerung beim ersten Einschalten am Morgen und spart nichts, was Sie gebraucht hätten. Lassen Sie sie dauerhaft laufen.
- Ein Segment, in dem Sie keinen Verkehr mitschneiden können. Wenn das Gerät das IGMP der Fernsehgeräte nicht sehen kann — weil es nicht in deren Layer-2-Segment steht oder weil die Installation Promiscuous-Mitschnitte verbietet —, hat die Zuschauererkennung keine Grundlage. Sie fällt auf Fail-open zurück und streamt ohnehin alles, aber Sie sollten sie ausdrücklich abschalten, statt eine dauerhafte Eingeschränkt-Anzeige stehen zu lassen, die Betreiber dazu erzieht, Warnungen zu ignorieren.
Überall sonst ist der Speicher, den es freigibt, der Grund dafür, dass die Senderzahl auf diesen Geräten so hoch ist, wie sie ist.