Zum Inhalt springen

Schnellstart

Vier Voraussetzungen müssen erfüllt sein. Ist eine davon nicht erfüllt, klären Sie das jetzt — jede einzelne erzeugt später ein Symptom, das wie ein Fehler in Castmux aussieht und keiner ist.

  • Eine Quell-URL, die Sie bereits abgespielt haben. Öffnen Sie sie zuerst in VLC auf Ihrem Laptop. Kann VLC sie nicht abspielen, kann Castmux es auch nicht, und Sie verbringen die nächste Stunde damit, Logs zu einem Problem zu lesen, das beim Ursprungsserver liegt.
  • Eine Multicast-Gruppe, die Sie verwenden dürfen. 239.10.0.1:1234 ist eine vernünftige erste Wahl: 239.0.0.0/8 ist der administrativ begrenzte Bereich und kollidiert daher mit nichts, was geroutet wird. Klären Sie mit dem Verantwortlichen für das Netzwerk, dass Gruppe und Port frei sind.
  • Das Gerät im selben Layer-2-Segment wie die Fernseher. Multicast überquert keinen Router, sofern nicht jemand PIM konfiguriert hat — das ist hier nicht Thema. Gleiches VLAN, gleiche Switch-Infrastruktur.
  • Wissen, welche Netzwerkschnittstelle zu den Fernsehern zeigt. Sie brauchen den Namen — eth0, eth1, enp1s0 — und nicht nur „die rechte“. Fast jeder Fehler am Ende dieser Seite liegt daran, dass die Multicast-Route auf die andere zeigt.

Legen Sie auf dem Host ein Verzeichnis für die Konfiguration an und starten Sie dann den Container:

Terminal-Fenster
# A plain host directory, so config.yaml stays readable and backup-able
sudo mkdir -p /opt/castmux/config
sudo docker run -d --name castmux --restart unless-stopped \
--network host \
--cap-add NET_RAW \
--cap-add NET_ADMIN \
-v /opt/castmux/config:/config \
-e CASTMUX_WEB_USERNAME=admin \
-e CASTMUX_WEB_PASSWORD=choose-something-better \
castmux/castmux:latest

Jede Option ist unverzichtbar:

—network host

Multicast muss ins echte LAN ausgesendet werden. In einem Docker-Bridge-Netzwerk werden die Pakete einwandfrei erzeugt und landen dann nirgendwo, weil die Bridge ein anderes Segment ist als das, in dem die Fernseher hängen. Kein Zähler zeigt das an; es sieht einfach so aus, als funktioniere alles, und niemand empfängt etwas.

—cap-add NET_RAW

Erlaubt das Mitschneiden von Paketen. Castmux nutzt libpcap für zwei Dinge: um zu erkennen, welche Clients einer Gruppe tatsächlich beigetreten sind — die Grundlage für On-Demand-Streaming — und um die tatsächliche Bitrate zu messen, die die Schnittstelle verlässt. Ohne diese Berechtigung sind beide Funktionen blind.

—cap-add NET_ADMIN

Erlaubt das Prüfen und Verwalten der Multicast-Route. Castmux prüft die Routing-Tabelle von außerhalb des Streaming-Prozesses, weil ein Stream an ein nicht routbares Ziel von innen heraus Erfolg meldet.

-v /opt/castmux/config:/config

Hier liegt die einzige YAML-Datei als /config/config.yaml. Binden Sie ein Host-Verzeichnis ein, statt ein benanntes Volume zu verwenden: So können Sie die Konfiguration auch dann mit einem gewöhnlichen Texteditor lesen und bearbeiten, wenn die Weboberfläche nicht erreichbar ist.

Öffnen Sie http://<appliance>:8080 im Browser und melden Sie sich mit den Zugangsdaten an, die Sie in der Umgebung gesetzt haben. Port 8080 ist der Standard und lässt sich mit --port ändern.

In der Fußzeile sollten eine Versionsangabe, CPU- und Speicherwerte sowie die Netzwerkraten je Schnittstelle erscheinen. Ist das der Fall, läuft der Prozess einwandfrei, und Sie können Sender anlegen.

Wählen Sie auf der Seite UDP channels Add channel und füllen Sie aus:

FeldWas Sie für diesen ersten Test eintragen
NameEtwas Wiedererkennbares. Der Name erscheint in der Log-Ansicht und bei der Pass-through-Engine als Dienstname im Transportstrom.
Source typeHLS.
Source URLDie URL, die Sie in VLC abgespielt haben. Eine Master-Playlist ist in Ordnung.
Destination address239.10.0.1
Destination port1234
EngineBelassen Sie den Standard, die Pass-through-Engine. Stellt sich heraus, dass die Quelle fMP4/CMAF statt MPEG-TS-Segmenten liefert, wechseln Sie zur Remux-Engine — siehe Streaming-Engines.
Force always-onAktivieren. Siehe den Hinweis unten.

Speichern Sie den Sender und warten Sie einige Sekunden. Ein Pass-through-Sender liefert sein erstes Paket typischerweise etwa zwei Sekunden nach dem Start; die Remux-Engine braucht rund viereinhalb.

Sehen Sie auf der Senderkarte auf die Kachel UDP bitrate. Sie muss einen Wert ungleich null zeigen.

Auf diese Kachel kommt es an, und es lohnt sich zu verstehen, warum. Die anderen Metriken — Bildrate, Geschwindigkeit, Quell-Bitrate — stammen aus der Selbstauskunft der Engine. Eine Engine kann felsenfest überzeugt sein zu streamen, während nichts im Netzwerk ankommt. Die UDP-Bitrate wird mit libpcap direkt an der Schnittstelle gemessen: Sie zählt Pakete, die tatsächlich hinausgegangen sind. Sie ist das einzige Signal, das ein Prozess, der Ihnen etwas vormacht, nicht erzeugen kann, und zugleich das einzige, das für beide Engines identisch funktioniert.

Von einem Rechner im selben Segment wie die Fernseher:

Terminal-Fenster
ffplay udp://@239.10.0.1:1234
# or, with VLC
vlc udp://@239.10.0.1:1234

Das @ ist keine Verzierung. Ohne es versucht der Client, an die Gruppe zu senden, statt ihr beizutreten, und Sie sehen nichts, während das Gerät völlig gesund wirkt.

Wenn der Sender nachweislich funktioniert, bearbeiten Sie ihn und deaktivieren force always-on. Der Sender stoppt dann kurz nachdem der letzte Zuschauer gegangen ist, und startet wieder, sobald einer beitritt. Rechnen Sie bei der Pass-through-Engine mit dem ersten Bild etwa zwei Sekunden nach dem Beitritt.

Ein Fernseher, der auf einen anderen Sender umgeschaltet wurde, meldet sich nicht immer sofort ab, deshalb wartet Castmux eine kurze Nachlaufzeit, bevor es den Stream stoppt. Das ist Absicht: Bei jedem Umschalten zu stoppen und neu zu starten, wäre für den Zuschauer schlechter, als ein paar Sekunden länger zu laufen als unbedingt nötig.

Eine Einschränkung beim Testen: Die Vorschau im Browser zählt als Zuschauer. Ein On-demand-Sender mit geöffneter Vorschau bleibt aktiv — praktisch und gelegentlich verwirrend.

Lesen Sie vor dem Anlegen der übrigen Sender die Anforderungen. Die Kapazität eines kleinen Geräts ist durch den Arbeitsspeicher begrenzt, und der geht abrupt zur Neige, nicht allmählich.