Ga naar inhoud

Snelstart

Aan vier voorwaarden moet zijn voldaan. Is een ervan niet vervuld, los dat dan nu op — elk ervan veroorzaakt later een symptoom dat eruitziet als een fout in Castmux, maar dat niet is.

  • Een bron-URL die u al hebt afgespeeld. Open die eerst in VLC op uw laptop. Kan VLC hem niet afspelen, dan kan Castmux dat ook niet, en bent u het komende uur bezig met logs lezen over een probleem dat bij de originserver ligt.
  • Een multicastgroep die u mag gebruiken. 239.10.0.1:1234 is een redelijke eerste keuze: 239.0.0.0/8 is het administratief afgebakende bereik, dus het botst niet met iets dat gerouteerd wordt. Controleer bij de beheerder van het netwerk of de groep en de poort vrij zijn.
  • Het apparaat op hetzelfde layer-2-segment als de televisies. Multicast gaat niet over een router heen, tenzij iemand PIM heeft geconfigureerd, en dat valt hier buiten de scope. Zelfde VLAN, zelfde switchnetwerk.
  • Weten welke netwerkinterface naar de televisies wijst. U hebt de naam nodig — eth0, eth1, enp1s0 — niet alleen „die aan de rechterkant”. Vrijwel elke storing aan het eind van deze pagina komt doordat de multicastroute naar de andere interface wijst.

Maak op de host een map aan voor de configuratie en start daarna de container:

Terminal window
# 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

Elke vlag is essentieel:

—network host

Multicast moet op het echte LAN worden uitgezonden. Op een Docker-bridgenetwerk worden de pakketten keurig aangemaakt en gaan ze vervolgens nergens heen, omdat de bridge een ander segment is dan het segment waarop de televisies zitten. Er is nergens een teller die dit laat zien; het lijkt gewoon alsof alles werkt, terwijl niemand iets ontvangt.

—cap-add NET_RAW

Maakt pakketcapture mogelijk. Castmux gebruikt libpcap voor twee dingen: vaststellen welke clients zich daadwerkelijk bij een groep hebben aangemeld — de basis van on-demand streaming — en het meten van de werkelijke bitrate die de interface verlaat. Zonder deze vlag zijn beide functies blind.

—cap-add NET_ADMIN

Maakt inspectie en beheer van de multicastroute mogelijk. Castmux controleert de routeringstabel van buiten het streamingproces, omdat een stream naar een onrouteerbare bestemming van binnenuit gewoon succes meldt.

-v /opt/castmux/config:/config

Het ene YAML-bestand staat hier als /config/config.yaml. Koppel een map van de host via een bind-mount in plaats van een named volume te gebruiken, zodat u de configuratie met een gewone teksteditor kunt lezen en bewerken wanneer de webinterface onbereikbaar is.

Ga in de browser naar http://<appliance>:8080 en meld u aan met de inloggegevens die u in de omgeving hebt ingesteld. Poort 8080 is de standaard en kan met --port worden gewijzigd.

In de voettekst horen een versienummer, CPU- en geheugenwaarden en netwerksnelheden per interface te staan. Is dat zo, dan is het proces gezond en kunt u zenders gaan toevoegen.

Kies op de pagina UDP channels voor Add channel en vul in:

VeldWat u voor deze eerste test invult
NameIets herkenbaars. De naam wordt gebruikt in de logweergave en, bij de pass-through-engine, als servicenaam in de transportstream.
Source typeHLS.
Source URLDe URL die u in VLC hebt afgespeeld. Een master-playlist is prima.
Destination address239.10.0.1
Destination port1234
EngineLaat de standaard staan: de pass-through-engine. Blijkt de bron fMP4/CMAF te leveren in plaats van MPEG-TS-segmenten, schakel dan over op de remux-engine — zie Streaming-engines.
Force always-onAanvinken. Zie de opmerking hieronder.

Sla de zender op en wacht een paar seconden. Een pass-through-zender levert zijn eerste pakket doorgaans ongeveer twee seconden na het starten; de remux-engine heeft er ongeveer vier en een halve seconde voor nodig.

Kijk op de zenderkaart naar de tegel UDP bitrate. Die mag niet nul zijn.

Dit is de tegel die ertoe doet, en het loont om te begrijpen waarom. De andere meetwaarden — framerate, snelheid, bronbitrate — komen van de engine die over zichzelf rapporteert. Een engine kan er volledig van overtuigd zijn dat hij streamt terwijl er niets het netwerk bereikt. De UDP-bitrate wordt met libpcap op de interface zelf gemeten: hij telt pakketten die werkelijk zijn vertrokken. Het is het enige signaal dat niet kan worden voortgebracht door een proces dat u iets wijsmaakt, en ook het enige dat voor beide engines op dezelfde manier werkt.

Vanaf een machine op hetzelfde segment als de televisies:

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

De @ is geen versiering. Zonder dat teken probeert de client naar de groep te zenden in plaats van zich erbij aan te melden, en ziet u niets terwijl het apparaat volkomen gezond lijkt.

Nu de zender aantoonbaar werkt, bewerkt u hem en vinkt u force always-on uit. De zender stopt kort nadat de laatste kijker vertrekt en start weer wanneer er een zich aanmeldt. Reken bij de pass-through-engine op het eerste beeld ongeveer twee seconden na de aanmelding.

Een televisie die naar een andere zender is overgeschakeld, meldt haar vertrek niet altijd direct af, dus er zit een korte nalooptijd voordat Castmux de stream stopt. Dat is bewust: bij elke zenderwissel stoppen en opnieuw starten zou voor de kijker slechter zijn dan een paar seconden langer draaien dan strikt nodig.

Eén kanttekening tijdens het testen: de browservoorvertoning telt als kijker. Een on-demand zender met een open voorvertoning blijft actief, wat handig is en af en toe verwarrend.

Lees Systeemvereisten voordat u de overige zenders toevoegt. De capaciteit van een klein apparaat wordt begrensd door het geheugen, en het geheugen raakt abrupt op, niet geleidelijk.