Zum Inhalt springen

Konfigurationsreferenz

Die Konfiguration ist bewusst eine einfache, lesbare Textdatei und keine Datenbank. Sie lässt sich mit cp sichern, mit der Kopie der letzten Woche vergleichen, in eine Versionsverwaltung einchecken und per SSH von Hand bearbeiten, wenn die Weboberfläche nicht erreichbar ist — also genau dann, wenn Sie am dringendsten etwas ändern müssen. Es gibt keinen separaten Zustandsspeicher, der mit ihr synchron gehalten werden müsste.

Castmux schreibt die Datei bei jeder Änderung in der Weboberfläche neu. Bearbeitungen von Hand und in der Oberfläche sind also derselbe Vorgang an derselben Datei. Wer die Datei bei laufendem Dienst von Hand bearbeitet, riskiert, dass die nächste Aktion in der Oberfläche die Änderung überschreibt: Stoppen Sie den Dienst, bearbeiten Sie die Datei und starten Sie ihn wieder.

Bei einem Upgrade werden Schlüssel, die ein neueres Release hinzufügt, automatisch mit ihren Voreinstellungen ergänzt, sodass eine ältere Datei weiter funktioniert. Bevor etwas geändert wird, wird eine .pre-migration-Kopie des Originals geschrieben. Diese Datei stellen Sie wieder her, wenn eine Migration nicht Ihren Vorstellungen entspricht.

—config

Pfad zur Konfigurationsdatei. Voreinstellung config.yaml im Arbeitsverzeichnis. Container-Installationen übergeben einen expliziten Pfad in ein eingebundenes Volume, normalerweise /config/config.yaml.

—port

TCP-Port für die Weboberfläche und die HTTP-API. Voreinstellung 8080. Die API hat keinen eigenen Port; es gibt einen einzigen Listener.

-debug

Ausführliches Logging, einschließlich der vollständigen Engine-Kommandozeilen und Details zu jedem Neustart. Nützlich bei der Diagnose eines Senders, der nicht startet. Die Ausgabe ist umfangreich; lassen Sie die Option auf einem Gerät mit kleiner Log-Partition nicht dauerhaft eingeschaltet.

CASTMUX_WEB_USERNAME

Benutzername für die Weboberfläche und die API.

CASTMUX_WEB_PASSWORD

Passwort für die Weboberfläche und die API.

Eine funktionierende Datei für eine kleine Installation: zwei Sender, einer per HLS und einer per SRT, beide sowohl auf einem DVB-C-Multiplex als auch per Multicast übertragen.

/config/config.yaml
global:
default_engine: tsduck # pass-through unless a channel overrides it
udp_device: 192.168.10.4 # source address, NOT the egress interface
startup_stagger_seconds: 3
hls_live_start_index: -1
on_demand_enabled: true
on_demand_fail_open: true # viewer detection broken => keep streaming
igmp_active_query: true
igmp_grace_seconds: 90
igmp_linger_seconds: 30
igmp_query_interval_seconds: 30
igmp_interfaces:
- eth0
- eth1
enable_dummy_listeners: true
overwrite_srt_latency: true
overwrite_pkt_size: true
ping_hosts:
- 192.168.10.1 # the site gateway
- origin.example.net # the content provider
location_name: Seaview Court
re_seller: Northern AV
ts_monitoring: true
ts_pcr_jitter_max_ms: 200
licence:
identity_dir: /config/identity # must be on a persistent volume
site_ref: seaview-court
streams:
- id: 1
name: Example One # also the DVB service name and metric label
description: Main lounge line-up
active: true
source:
type: hls
url: https://origin.example.net/one/master.m3u8
destination:
address: 239.10.0.1
port: 5000
force_always_on: false # on-demand: runs when somebody joins
engine: tsduck
epg_id: example-one.uk # the channel's id in the XMLTV guide
resolution_profile: hd # closest rung wins; not an exact-match filter
min_output_kbps: 500
pdt_shift_ms: 0 # 0 disables the PDT drift restart
- id: 2
name: Example Two
description: Contribution feed from the studio
active: true
source:
type: srt
url: srt://feed.example.net:9001?streamid=two
destination:
address: 239.10.0.2
port: 5000
force_always_on: true # always on air, viewers or not
engine: tsduck
resolution_profile: "" # SRT has no ladder; nothing to select
min_output_kbps: 500
dvb_muxes:
- id: 1
name: Mux A
device: 0 # modulator device index
frequency: 474000000 # Hz, not MHz
qam: 256
symbol_rate: 6900
network_id: 1
ts_id: 1
network_name: Seaview Court
active: true
channel_ids: [1, 2] # order decides slot, PID block, service ID

Alles unter global gilt für jeden Sender, sofern der Sender es nicht überschreibt. Eine Änderung über die Weboberfläche wird ohne Neustart auf laufende Sender angewendet; es handelt sich also um Live-Einstellungen, nicht um Einstellungen, die nur beim Start gelesen werden.

SchlüsselVoreinstellungZweck
Engines und Ausgang
default_enginetsduckWelche Engine Sender verwenden, die selbst keine angeben. Die Pass-through-Engine erhält die ursprünglichen PIDs, Audiospuren und Sprachdeskriptoren; die Remux-Engine schreibt sie neu, was manche nachgelagerten Geräte verlangen. Siehe Streaming-Engines.
udp_deviceleerQuelladresse für ausgehendes UDP. Beachten Sie genau: Damit wird die Quelladresse gebunden, die Ausgangsschnittstelle wird dadurch nicht gewählt — der Kernel entscheidet weiterhin anhand der Routingtabelle, über welchen Port die Pakete hinausgehen. Geht Multicast über die falsche Schnittstelle hinaus, korrigieren Sie die Route, nicht diesen Wert.
startup_stagger_seconds3Abstand zwischen den Senderstarts beim Hochfahren. Sonst öffnet jeder Sender seine Quelle gleichzeitig, und acht gleichzeitige HLS-Starts sättigen einen Uplink mit 100 Mbit während des ersten Segment-Schubs, sodass alle acht scheitern statt nur einer. Setzen Sie 0 zum Abschalten, wenn es Ihrem Uplink wirklich nichts ausmacht.
hls_live_start_index-1Bei welchem Segment der Live-Playlist begonnen wird, gezählt ab der Live-Kante. -1 ist das letzte Segment. Näher an der Kante bedeutet geringere Latenz und weniger Puffer, um Jitter des Ursprungsservers aufzufangen; weiter hinten ist toleranter und weiter hinter live.
overwrite_pkt_sizetrueErzwingt bei HLS-Sendern volle 1316-Byte-UDP-Datagramme — sieben Transportpakete pro Datagramm, wie Set-Top-Boxen es erwarten. Ohne diese Option erzeugen manche Quellen kurze Datagramme und verschwenden einen spürbaren Anteil der Leitung.
overwrite_srt_latencytrueLeitet die SRT-Latenz aus der gemessenen Round-Trip-Zeit zum Absender ab, statt einen festen Wert zu verwenden. Eine von Hand gesetzte Latenz, die für einen Pfad richtig war, ist für die nächste Installation meist falsch.
On-Demand-Streaming und IGMP
on_demand_enabledtrueHauptschalter für zuschauergesteuertes Streaming. Ist er aus, läuft jeder als aktiv markierte Sender dauerhaft, unabhängig davon, ob jemand zusieht.
on_demand_fail_opentrueLässt die Sender weiterlaufen, wenn die Zuschauererkennung nicht verfügbar ist — der Mitschnitt kann nicht starten, die Schnittstelle verschwindet, der Beobachter stirbt. Lassen Sie diese Option eingeschaltet. Ohne sie ist die Folge ein Gebäude voller schwarzer Bildschirme, verursacht durch eine Überwachungskomponente — in jeder Hinsicht schlimmer als ein wenig verschwendete Bandbreite.
igmp_active_querytrueSendet eigene IGMP General Queries. Clients melden sich unaufgefordert nur im Moment des Beitritts und schweigen dann, bis sie gefragt werden. Ohne Abfrage verliert ein Neustart deshalb jedes Wissen über vorhandene Zuschauer. Schalten Sie das nur ab, wenn das Segment bereits einen echten Querier hat; zwei Querier in einem Segment sind unsauber, aber nicht fatal.
igmp_grace_seconds90Wie lange ein Zuschauer schweigen darf, bevor er als gegangen gilt. Muss igmp_query_interval_seconds deutlich übersteigen, sonst verdrängt ein einziger verlorener Report einen Zuschauer, der noch zusieht.
igmp_linger_seconds30Wie lange ein Sender weiterläuft, nachdem der letzte Zuschauer gegangen ist. Das macht Zappen erträglich: Eine Rückkehr innerhalb des Linger-Fensters erfolgt sofort, statt einen Kaltstart zu kosten.
igmp_query_interval_seconds30Abstand zwischen General Queries. Ein kleinerer Wert erkennt schneller ein Gerät, das an der Steckdose ausgeschaltet wurde, auf Kosten von mehr Steuerverkehr.
igmp_interfacesalle mit einer AdresseAuf welchen Schnittstellen Membership mitgeschnitten wird. Die Voreinstellung umfasst jede Schnittstelle, der eine Adresse zugewiesen ist. Benennen Sie sie ausdrücklich auf einer Box mit mehreren Netzwerkkarten, von denen nur eine zu den Fernsehgeräten zeigt.
enable_dummy_listenerstrueHält an jeder Gruppe einen lokalen Abnehmer. Ohne ihn stauen sich Pakete an eine Gruppe, der niemand beigetreten ist, in den Socket-Puffern und verursachen schließlich Überläufe, die wie Quellenfehler aussehen.
Überwachung und Standortkennung
ts_monitoringtrueMisst die Transport-Stream-Qualität jedes Senders — Bitrate und ihre Streuung, PCR-Timing, Transport- und Continuity-Fehler — für die Diagramme pro Sender und die exportierten Messwerte. Auf einem Pass-through-Sender läuft die Messung in der Verarbeitungskette des Senders selbst; bei einem Remux-Sender hört ein zweiter, rein lesender Prozess auf die Multicast-Gruppe des Senders und misst so, was ein Empfänger tatsächlich erhält. Beide beobachten nur und verändern den Stream nie. Setzen Sie false, um auf einem stark ausgelasteten Gerät den geringen CPU-Aufwand pro Sender zu sparen.
ts_pcr_jitter_max_ms200Wie weit, in Millisekunden, eine Program Clock Reference vom tatsächlichen Timing ihres Pakets abweichen darf, bevor sie als PCR-Jitter-Ereignis zählt. Das ist eine Toleranz für Lieferschübe, nicht der Genauigkeitswert aus MPEG-2: SRT-Ursprungsserver verschachteln häufig in Schüben von etwa 160 ms, und ein Relay, das HLS umverpackt, liefert ganze Segmente auf einmal. 200 lässt gewöhnliches Verschachteln passieren und markiert die Schübe, die der Puffer eines Empfängers tatsächlich überbrücken müsste. Erhöhen Sie den Wert, wenn ein bekanntermaßen stoßweise liefernder Ursprungsserver das Diagramm mit Ereignissen flutet, gegen die niemand etwas tun kann.
ping_hostsleere ListeZusätzliche Hosts für die Erreichbarkeitsüberwachung, ergänzend zu dem, was aus der Konfiguration abgeleitet wird. Sinnvolle Einträge sind das Gateway der Installation und der Inhalte-Ursprungsserver: Wenn ein Sender ausfällt, ist die erste Frage, ob die Installation das Internet verloren hat oder der Anbieter den Sender — und das beantwortet diese Liste.
location_nameleerDer Standort, den dieses Gerät versorgt, so benannt, wie Sie ihn nennen würden — in Settings als Location angezeigt. Er kennzeichnet die exportierten Messwerte, sodass sich eine Flotte von Geräten in einem Dashboard unterscheiden lässt, er wird dem Lizenzserver als Standortname gemeldet, und er ist der DVB-C-Netzwerkname, den Set-Top-Boxen anzeigen, sofern keiner ausdrücklich gesetzt ist. Dieser Schlüssel hieß früher hotel_name; eine ältere Datei wird beim Laden automatisch migriert.
re_sellerleerDer Partner oder Installateur, der für die Installation zuständig ist. Ebenfalls ein Metrik-Label, um ein Dashboard auf den Bestand eines Wiederverkäufers zu filtern.

Diese Schlüssel enthalten rohe Argumentzeichenketten, die an die zugrunde liegenden Programme übergeben werden: FFmpeg für Remux-Sender, TSDuck für Pass-through-Sender und mpv für den HDMI-Ausgang. Sie sind bewusst nicht in der Weboberfläche. Sie lassen sich durch Bearbeiten der Datei oder über PUT /api/settings ändern, und das Speichern eines davon startet jeden aktiven Sender neu.

Der Grund, sie aus der Oberfläche herauszuhalten, ist der Wirkungsradius. Jede Zeichenkette gilt für jeden Sender, der diese Engine verwendet. Eine Engine, die wegen eines einzigen fehlerhaften Arguments nicht startet, nimmt die gesamte Senderliste auf einmal vom Netz, nicht nur einen Sender. Ein Feld, das einem ganzen Gebäude das antun kann, sollte nicht einen Tastendruck von einem Betreiber entfernt sein, der gerade einen Sender umbenennen will.

SchlüsselVoreinstellungZweck
ffmpeg_paramsausgelieferter WertOptionen ganz am Anfang der FFmpeg-Kommandozeile jedes Remux-Senders, vor dem Eingang — Zeitstempelreparatur, Probe-Größe und Pufferung. Der ausgelieferte Wert ist auf HLS-Ursprungsserver abgestimmt; seine Probe-Größe von 15 MB ist der Grund, warum es startup_stagger_seconds gibt. Ist der Schlüssel leer, wird stattdessen ein minimales -fflags +genpts -rw_timeout 10000000 verwendet.
ffmpeg_udp_paramsausgelieferter WertQuery-String, der an die udp://-Ausgangs-URL jedes Remux-Senders angehängt wird: TTL, Datagrammgröße, Socket- und FIFO-Puffer. Zwei Teile werden gemeinsam genutzt oder überschrieben. Die ttl hier wird auch von Pass-through-Sendern verwendet, sodass beide Engines dieselbe TTL auf die Leitung bringen. Und mit eingeschaltetem overwrite_pkt_size wird jedes pkt_size bei HLS-Sendern entfernt, weil die Anwendung die Datagrammgröße selbst festlegt.
ffmpeg_preview_paramsausgelieferter WertZusätzliche Optionen für den FFmpeg-Prozess der Browser-Vorschau, vor dessen Eingang eingefügt. Sie wirken nur auf Vorschauen, nie auf das, was auf die Leitung geht.
tsduck_paramsleerZusätzliche tsp-Optionen und -Plugins, die jedem Pass-through-Sender nach der eingebauten Verarbeitung und vor der Qualitätsmessung und dem Ausgang hinzugefügt werden. Zwei eingebaute Schritte treten dafür zurück: Nennt der Wert das Plugin svrename oder sdt, wird die automatische DVB-Service-Benennung übersprungen statt verdoppelt; und wählt er selbst eine HLS-Stufe (zum Beispiel --lowest-bitrate), wird die voreingestellte Auswahl der höchsten Bitrate nicht hinzugefügt, weil tsp zwei Selektoren ablehnt.
mpv_paramsausgelieferter WertZusätzliche Optionen für den Player des HDMI-Ausgangs, die nach der auf der HDMI-Seite getroffenen Anzeige- und Audioauswahl angehängt werden. mpv berücksichtigt das letzte Vorkommen einer Option; eine Angabe hier überschreibt also das entsprechende Auswahlmenü. Der ausgelieferte Wert nennt einen bestimmten Anzeigekontext und eine bestimmte Audiokarte; auf anderer Hardware als der, für die er geschrieben wurde, entfernen Sie diese Angaben und verwenden stattdessen die Auswahl auf der HDMI-Seite.

Der Block hdmi_stream unter global konfiguriert den HDMI-Ausgang. Alles darin wird auf der HDMI-Seite eingestellt.

SchlüsselVoreinstellungZweck
hdmi_stream.nameleerBezeichnung des Ausgangs in der Statusanzeige und in den Logs.
hdmi_stream.stream_idkeineDie id des abzuspielenden Senders. Der Player tritt der Multicast-Gruppe dieses Senders bei und verwendet dabei die Adresse udp_device, sofern eine gesetzt ist. 0 oder die ID eines gelöschten Senders lässt den Ausgang ohne etwas zum Abspielen, und das Log sagt, welcher Fall vorliegt.
hdmi_stream.activefalseStartet und stoppt die Wiedergabe.
hdmi_stream.voVoreinstellung des PlayersDie Videoausgabe des Players, etwa gpu, gpu-next oder drm. Die beiden gpu-Ausgaben erhalten automatisch einen DRM/KMS-Kontext, da ein Gerät keinen Desktop hat, in den gezeichnet werden könnte.
hdmi_stream.drm_deviceVoreinstellung des PlayersDas Anzeigegerät als Pfad, etwa /dev/dri/card0. Nötig auf Hardware mit mehr als einem Display-Controller, wo die Voreinstellung der falsche Anschluss sein kann.
hdmi_stream.audio_deviceVoreinstellung des PlayersDas Audioausgabegerät oder none für ein Bild ohne Ton. Die Namen der Audiogeräte unterscheiden sich von Board zu Board; ein Wert, der von einem anderen Gerät kopiert wurde, ist der übliche Grund, warum der Player nicht startet.

Der Block licence unter global legt fest, wie sich das Gerät gegenüber dem Lizenzserver ausweist. Adresse und Signaturschlüssel des Servers sind in das Release eingebaut und keine Einstellungen. server_url oder token_public_key in diesem Block werden akzeptiert, aber ignoriert, und beim Start wird eine entsprechende Warnung protokolliert.

SchlüsselVoreinstellungZweck
licence.identity_dir/config/identityWo das Gerät seinen Geräteschlüssel, sein Zertifikat und den letzten Lizenzzustand ablegt. Dies muss auf persistentem Speicher liegen. Andernfalls erzeugt jedes Neuanlegen des Containers eine neue Identität, die der Lizenzserver als neues, nicht freigegebenes Gerät sieht, und das Streaming bleibt blockiert, bis es erneut freigegeben wird.
licence.enroll_keyleerOptionaler, vorab vereinbarter Registrierungsschlüssel, der mit einer Charge von Geräten geliefert wird. Behandeln Sie ihn wie ein Passwort: Er wird nie in die Logs geschrieben, ist aber für jeden lesbar, der diese Datei lesen kann.
licence.site_refleerEine Freitext-Referenz, etwa eine Auftrags- oder Standortnummer, die bei der Registrierung mitgesendet wird, damit sich das Gerät bei der Freigabe wiedererkennen lässt. Sie ist ein Hinweis für Menschen, kein Berechtigungsnachweis.
licence.agent_versiondie laufende VersionDie Softwareversion, die dem Lizenzserver gemeldet wird. Lassen Sie sie ungesetzt.

Jeder Eintrag unter streams ist ein Sender: eine Quelle, ein Ziel, ein Satz Überwachungsregeln.

SchlüsselVoreinstellungZweck
Kennung
idzugewiesenNumerische Kennung, eindeutig innerhalb der Datei. Sie wird in API-Pfaden und in channel_ids eines Multiplex verwendet. Kennungen werden nach dem Löschen wiederverwendet; betrachten Sie eine Kennung daher nicht als dauerhaften Verweis für ein externes System.
nameerforderlichAnzeigename. Er ist nicht kosmetisch: Er wird auch zum DVB-Service-Namen in der Senderliste des Fernsehgeräts und zum Label an den exportierten Messwerten dieses Senders. Eine Umbenennung ändert, was Zuschauer sehen und wonach Ihr Dashboard gruppiert.
descriptionleerFreitext für den Betreiber. Wird nirgendwohin übertragen.
epg_idleerDie Kennung dieses Senders im XMLTV-Programmführer — die Sender-ID des Guides selbst, typischerweise etwas wie rtl.de. Sie wird auf der EPG-Seite gesetzt und bewirkt, dass eine Guide-Synchronisierung Sendungen für diesen Sender speichert. Leer bedeutet: keine Programmdaten für den Sender. Siehe Programmführer (EPG).
managed_byleerWem der Sender gehört. Leer bedeutet, dass ein Betreiber ihn angelegt hat, und er wird von nichts anderem geändert. licence bedeutet, dass der Lizenzserver ihn geliefert hat: Er kann Quelle und Ziel des Senders bei jeder Aktualisierung ersetzen, deshalb lässt die Weboberfläche ihn weder bearbeiten noch löschen. Setzen Sie licence nicht von Hand bei einem Sender, den Sie selbst angelegt haben — die nächste Aktualisierung kann ihn überschreiben.
activetrueOb der Sender überhaupt laufen soll. Ein inaktiver Sender bleibt in der Datei, wird aber nie gestartet. So legen Sie einen Sender still, ohne seine Einstellungen zu verlieren.
Quelle
source.typehlsEiner von hls, srt, rtmp oder mpegts. mpegts ist ein einfacher Transport Stream, über UDP (udp://group:port) oder HTTP (http(s)://…) — siehe MPEG-TS-Quellen. Der Typ bestimmt mehr als nur den Abruf: Nur HLS hat eine Qualitätsleiter, daher gelten Auflösungsprofile ausschließlich für HLS.
source.urlerforderlichDie URL des Ursprungsservers. Bei HLS sollte das normalerweise die Master-Playlist sein, nicht eine Variante — geben Sie Castmux die Qualitätsleiter und lassen Sie das Auflösungsprofil wählen, damit der Sender es übersteht, wenn der Ursprungsserver seine Stufen umorganisiert.
Ziel
destination.addresserforderlichIPv4-Ziel. Verwenden Sie für die Verteilung innerhalb eines Gebäudes den administrativ begrenzten Multicast-Bereich 239.0.0.0/8. Unicast wird für Punkt-zu-Punkt-Verbindungen akzeptiert.
destination.porterforderlichUDP-Zielport. Verschiedene Gruppen dürfen sich einen Port teilen; dieselbe Gruppe mit demselben Port bei zwei Sendern ist ein doppelter Absender und erzeugt auf beiden unansehbare Bilder.
Verhalten
force_always_onfalseLässt diesen Sender dauerhaft laufen und ignoriert die Zuschauererkennung. Verwenden Sie das für einen Sender, der sofort verfügbar sein muss, oder für einen Sender auf einem DVB-C-Multiplex, wo es ohnehin keine IGMP-Membership zu beobachten gibt.
enginegeerbtÜberschreibt default_engine für diesen Sender. Der übliche Grund ist eine Quelle, die die Pass-through-Engine nicht lesen kann, oder ein nachgelagertes Gerät, das auf geremuxtem Ausgang besteht.
resolution_profileleerEiner von 4k, fullhd, hd, sd, mobile oder leer für die Wahl des Ursprungsservers. Es gewinnt die nächstliegende Höhe, bei Gleichstand die höhere Bitrate — ein Sender, der 480p streamt, wenn niemand 576p anbietet, ist besser als ein Sender, der nicht startet. Die Wahl wird bei jedem Start angewendet und nie in diese Datei zurückgeschrieben. Siehe Auflösungsprofile.
Überwachung — nur in der Konfigurationsdatei
min_output_kbps500Die Untergrenze, unterhalb derer dieser Sender als nicht erzeugend gilt und neu gestartet wird. Senken Sie sie für Radio und andere reine Audio-Services: Ein Radiosender mit 128 kbps, gemessen an einer für Video bemessenen Schwelle, gilt dauerhaft als stumm und wird in einer Schleife neu gestartet. Nicht in der Weboberfläche verfügbar.
pdt_shift_ms0Neustartschwelle für die Drift von Program Date Time, in Millisekunden: Springt die angegebene Zeitachse der Quelle um mehr als diesen Wert, wird der Sender neu gestartet, statt mit einer defekten Uhr weiterzulaufen. 0 schaltet die Prüfung ab. Das ist die Voreinstellung, weil ein Ursprungsserver, der Zeitstempel berechtigterweise neu setzt, sonst Neustarts verursachen würde. Nicht in der Weboberfläche verfügbar.

Jeder Eintrag unter dvb_muxes ist ein HF-Träger: eine Reihe von Sendern, zu einem einzigen Transport Stream zusammengefasst und auf das Koaxialnetz moduliert. Wie Sie die HF-Parameter wählen, steht unter DVB-C-Multiplexing.

SchlüsselWertZweck
Kennung
idzugewiesenNumerische Kennung des Multiplex, in API-Pfaden verwendet.
nameerforderlichBezeichnung des Multiplex für den Betreiber. Wird nicht übertragen.
deviceIndex oder PfadAuf welcher Modulator-Hardware dieser Multiplex gesendet wird, je nach eingebauter Karte über Index oder Gerätepfad bezeichnet. Ein Multiplex pro Gerät.
HF-Parameter
frequencyHzMittenfrequenz des Trägers in Hertz, nicht in Megahertz. 474000000, nicht 474. Muss zum Frequenzplan des bestehenden Kabelnetzes im Gebäude passen und darf nicht mit einem dort bereits vorhandenen Träger kollidieren.
qam16 / 32 / 64 / 128 / 256Modulationsordnung. Eine höhere Ordnung überträgt mehr Bitrate in denselben 8 MHz und verträgt weniger Rauschen. Auf intaktem Koaxialkabel im Gebäude ist 256-QAM üblich; gehen Sie herunter, wenn die Verkabelung alt, stark aufgeteilt oder von unbekannter Qualität ist.
symbol_rateksym/sSymbolrate des Trägers. Zusammen mit der Modulationsordnung legt sie die gesamte Bitrate fest, die allen Services im Multiplex zur Verfügung steht — sie ist also die Zahl, die entscheidet, wie viele Sender hineinpassen.
Signalisierung
network_idGanzzahlAn die Empfänger signalisierte Netzwerkkennung. Halten Sie sie über alle Multiplexe einer Installation hinweg einheitlich, damit die Geräte sie als ein Netzwerk behandeln und nicht als mehrere.
ts_idGanzzahlTransport-Stream-Kennung. Muss unter den Multiplexen der Installation eindeutig sein; Duplikate führen dazu, dass Geräte beim Suchlauf eine Senderliste mit einer anderen überschreiben.
network_nameTextAn die Empfänger signalisierter Netzwerkname. Diesen Text sieht ein Gast beim Suchlauf; normalerweise ist es der Name des Gebäudes.
activetrueOb der Multiplex gesendet wird. Mit false wird der Träger abgeschaltet; die Fernsehgeräte zeigen dann die gesamte Senderliste als fehlend, nicht nur einen ausgefallenen Sender.
Inhalt
channel_idsgeordnete ListeDie übertragenen Sender, per id. Die Reihenfolge ist maßgeblich. Die Position in dieser Liste bestimmt den Slot, den dem Service zugewiesenen PID-Block und die Service-Kennung. Ein Umsortieren der Liste gibt den Services daher neue Kennungen, und Fernsehgeräte, die bereits gesucht haben, müssen unter Umständen neu abgestimmt werden, um wieder übereinzustimmen. Hängen Sie neue Sender nach Möglichkeit ans Ende an.

Sichern Sie das gesamte Konfigurationsverzeichnis, nicht nur config.yaml. Neben der Konfiguration enthält es die Lizenzidentität des Geräts und seine Programmdaten:

Im VerzeichnisWas es ist
config.yamlDie auf dieser Seite beschriebene Konfiguration.
config.yaml.pre-migrationDie Datei in dem Zustand vor der Änderung durch das letzte Upgrade. Diese stellen Sie wieder her, wenn eine Migration nicht Ihren Vorstellungen entspricht.
identity/Geräteschlüssel und Zertifikat des Geräts für den Lizenzserver. Gehen sie verloren, erscheint das wiederhergestellte Gerät dem Lizenzserver als neues, nicht freigegebenes Gerät und streamt nicht, bis es erneut freigegeben wird.
epg.dbGespeicherte Programmdaten. Sie lassen sich durch erneutes Synchronisieren der Guide-Quellen neu aufbauen; sie mitzusichern ist also bequem, aber nicht unerlässlich.

Die Pfade hängen davon ab, auf welcher Seite des Containers Sie sich befinden. Bei der in diesem Handbuch beschriebenen Installation ist das Verzeichnis auf dem Host /opt/castmux/config, und der Container sieht es als /config. Die Konfigurationsdatei ist also aus einer Shell auf dem Gerät /opt/castmux/config/config.yaml und innerhalb des Containers /config/config.yaml. Sicherungen werden vom Host aus erstellt:

Terminal-Fenster
# on the appliance (host), as root: the files are owned by root
sudo cp -a /opt/castmux/config /backup/seaview-court-$(date +%F)

Das Kopieren bei laufendem Dienst ist normalerweise unproblematisch, weil config.yaml nur beim Speichern einer Einstellung neu geschrieben wird. Speichern Sie während des Kopierens keine Änderungen in der Weboberfläche. Für eine garantiert konsistente Kopie, einschließlich epg.db mitten in einer Guide-Synchronisierung, stoppen Sie zuerst den Container.

Zur Wiederherstellung stoppen Sie den Container, legen das Verzeichnis zurück und starten ihn wieder. Dateien unter einem laufenden Container zu ersetzen funktioniert nicht: Der laufende Dienst schreibt bei der nächsten Änderung seine eigene Kopie von config.yaml über Ihre.

Terminal-Fenster
# on the appliance (host)
sudo docker stop castmux
sudo rm -rf /opt/castmux/config
sudo cp -a /backup/seaview-court-2026-04-11 /opt/castmux/config
sudo docker start castmux

Mit Docker Compose verwenden Sie stattdessen sudo docker compose stop und sudo docker compose start in /opt/castmux. Wenn Sie ein anderes Host-Verzeichnis eingebunden haben, ersetzen Sie /opt/castmux/config durchgehend durch dieses.

Weil die Datei einfaches YAML ist, dient die config.yaml einer Sicherung auch als Ausgangspunkt für eine zweite Installation: Ändern Sie die Adressen, die Namen und die HF-Parameter, der Rest lässt sich übernehmen. Kopieren Sie dafür nur config.yaml, niemals identity/. Zwei Geräte mit derselben Identität sind für den Lizenzserver dasselbe Gerät. Das ist heute ein manueller Vorgang.

Export und Import mit einem Klick aus der Weboberfläche sowie das Klonen einer Konfiguration über eine Flotte von Installationen sind geplant.