MPTS Migrate Perfect Streamer Toolkit v1.2 — Migration der MPTS-Identität¶
Teil des Perfect Streamer Toolkit — https://meshwork.pstreamer.tv
Erfasst die DVB-SI/PSI-Kennungen eines laufenden Mehrprogramm-MPEG-TS-Stroms (MPTS) und bildet sie auf einer Perfect-Streamer-Instanz (PSS) auf demselben Host nach. Deshalb arbeiten Teilnehmerempfänger (STB / TV) nach einer Migration oder einer Umschaltung auf die Reserve ohne erneuten Kanalsuchlauf weiter.
Das Werkzeug ist Bestandteil des Pakets pstreamer und befindet sich nach der Installation unter /opt/pss/tools/mpts_migrate — eine separate Installation ist nicht erforderlich.
Voraussetzungen¶
Stellen Sie vor dem Start des Dienstprogramms sicher, dass:
PSS läuft auf demselben Host (oder auf dem in
--pss-baseangegebenen Host). Das Dienstprogramm suchtpssin/procund liestpss.json, um den Admin-Port zu ermitteln (43971, wenn die Konfiguration ihn nicht enthält).Die MPTS-Quelle ist erreichbar, sofern eine Erfassung vorgesehen ist (Modi 1, 2, save+apply): Die als Positionsargument
<input>übergebene URL muss einen MPEG-TS-Strom liefern. Für UDP Multicast müssen IGMP / Firewall den Empfang zulassen; bei Dateien muss der Pfad vorhanden sein.Das Ziel-MPTS ist in PSS bereits eingerichtet: Das Dienstprogramm legt keine neuen Streams an. Das MPTS-Objekt und mindestens so viele SPTS-Feeder, wie das Inventar Dienste enthält, müssen vorab vorhanden sein. Dienste, für die kein freier Feeder übrig ist, werden im Dialog angezeigt und übersprungen (Standardantwort
s); mit--non-interactivewerden sie automatisch übersprungen.Die HTTP-Admin-API ist auf localhost verfügbar — zum Lesen von
/data/stream(wird bei verify verwendet) und zum Schreiben von/config/stream(apply).
Was migriert wird¶
Alle für den Empfänger sichtbaren Kennungen auf der Ebene des Transportstroms und der Dienste:
Transportstrom: TSID, ONID, network ID, network name, provider name (wird als für den ganzen Multiplex gemeinsamer
sdt-provider-nameangewendet, wenn alle Quelldienste denselben Wert haben), Delivery-Deskriptor (Parameter der terrestrischen / Kabel- / Satellitenübertragung), Versionen von PAT/SDT/NITJe Dienst:
service_id,pmt_pid,pcr_pid,service_type, Dienstname, logische Kanalnummer (LCN), free-CA-Kennzeichen, EIT-present- / EIT-schedule-KennzeichenElementarströme: PIDs (es wird ein
identity remapangewendet — siehe Einschränkungen und Fallstricke), Stromtypen, SprachkennungenBedingter Zugriff: CA-Deskriptoren auf Programm- und ES-Ebene
Dienst- / Anbieternamen in DVB-Zeichenkodierungen außerhalb von ASCII (zum Beispiel ISO-8859-5 für Kyrillisch) werden automatisch nach UTF-8 dekodiert.
Das ES-PID-Remapping wird für jede PCR- / Video- / Audio- / Teletext- / Daten-PID aller Dienste als Identitätspaare (mpegts-pid-old ≡ mpegts-pid-new) aufgebaut, sodass die ursprünglichen PIDs am Ausgang des Multiplexers byte-exact erhalten bleiben. Ältere Empfänger, die die PMT nach dem ersten Suchlauf zwischenspeichern, arbeiten ohne Neukonfiguration weiter.
Ab PSS 2.0.0.193 aktiviert der Plan am Muxer-Eingang des Ziel-MPTS zusätzlich den regulären Modus zur Beibehaltung der ursprünglichen PIDs (deaktiviertes Automatic PID mapping) und setzt für jeden Dienst die erfasste Programmnummer in der PAT (program order). So bleibt die On-Air-Reihenfolge der Programme nach der Migration erhalten. Die Unterstützung wird anhand der Konfiguration des Ziel-Streamers automatisch ermittelt; auf älteren Versionen werden diese Schlüssel nicht gesendet (das Dienstprogramm gibt eine Warnung aus), die PIDs werden nur über Identitätspaare fixiert, und die Programmreihenfolge in der PAT bleibt nicht erhalten.
Anwendungsfälle¶
Failover: Umschalten der Decoder vom primären MPTS auf das Reserve-MPTS unter Beibehaltung der Kanäle auf der Empfängerseite
Hardware-Migration: Umzug eines laufenden Multiplex von einem PSS-Host auf einen anderen ohne Anweisungen an die Zuschauer
Momentaufnahme vor / nach der Aktualisierung: Erfassung des Multiplex vor der PSS-Aktualisierung und erneutes Anwenden danach, um bitidentische SI/PSI zu gewährleisten
Manuelle Bearbeitung und erneutes Anwenden: Erfassen,
migrate.jsonbearbeiten (Dienste umbenennen, LCN ändern,service_typeanpassen), erneut anwendenDry-run-Prüfung: Ausgabe jedes HTTP POST, der gesendet würde, ohne Auswirkung auf PSS
Schnellstart¶
# Capture from a live stream and apply to local PSS in one run
mpts_migrate udp://239.1.1.1:1234
# Capture, save to migrate.json and apply
mpts_migrate -s udp://239.1.1.1:1234
# Capture only — write to file, do not apply
mpts_migrate -o backup.json udp://239.1.1.1:1234
# Apply a previously saved JSON
mpts_migrate -i backup.json
# No arguments — load ./migrate.json and apply
mpts_migrate
# Preview what apply would do, without changes
mpts_migrate -i backup.json --dry-run
Arbeitsablauf¶
Erfassung — das Dienstprogramm öffnet den Strom, wertet über
-tSekunden (Vorgabe 30) PAT / PMT / SDT / NIT / EIT aus, erstellt das Inventar und misst die Gesamtbitrate des Stroms.(Optional) Speichern — mit
-soder-owird das Inventar zur Wiederverwendung als JSON geschrieben.PSS-Ermittlung — findet das laufende PSS, indem es
/procdurchsucht, und liestpss.json, um den Admin-Port zu ermitteln (43971, wenn die Konfiguration ihn nicht enthält);--pss-base http://host:portumgeht die automatische Ermittlung.Bestätigung der Zuordnung — ein interaktiver Dialog fragt ab, wie jeder erfasste Dienst einem vorhandenen SPTS-Feeder zugeordnet werden soll;
--non-interactiveübernimmt die Vorschläge und bricht bei einem Konflikt ab;--target-mpts <id>überspringt die Abfrage zur MPTS-Auswahl.Automatisches Aufheben der Feeder-Pause — für jeden zugeordneten SPTS / muxer-output sendet das Dienstprogramm
{"pause":false}, falls der Feeder pausiert war, damit der Multiplexer nach dem Apply Daten erhält.Automatische Bitratenanpassung — überschreitet
captured_bitrate × (1 + headroom%)diempegts-output-bitratedes Ziel-MPTS, hebt das Dienstprogramm dieses Limit auf PSS mit einem einzigen POST an (mit Aufrundung auf die nächsten 1000 kbps). Abschaltbar über--no-bitrate-adjust.Planung — vergleicht das Inventar mit dem aktuellen
/config/stream-Baum auf PSS und bereitet HTTP-POST-Anfragen nur für die abweichenden Felder vor. Das ES-PID-Remapping wird als Identitätspaare (mpegts-pid-old≡mpegts-pid-new) erzeugt, damit am Ausgang des Multiplexers alle ursprünglichen PIDs, einschließlich PCR, Video, Audio, Teletext, SCTE-35, DSM-CC, unverändert bleiben. Ab PSS 2.0.0.193 aktiviert der Plan zusätzlich den Modus zur Beibehaltung der ursprünglichen PIDs am Muxer-Eingang des Ziels und setzt die Programmreihenfolge in der PAT (siehe Was migriert wird).Anwenden — sendet die geplanten POST-Anfragen, pausiert anschließend das MPTS und hebt die Pause wieder auf, damit PSS die Konfiguration neu einliest; mit
--dry-runwird der Plan lediglich ausgegeben.Verify (standardmäßig aktiviert, auch bei leerem Plan) — erfasst das resultierende MPTS über einen der UDP-Ausgänge von PSS und vergleicht es mit dem Ziel; kritische Abweichungen (TSID, ONID, service_id, name, type, LCN) → Exit-Code 5.
Ein erneuter Durchlauf der gesamten Verarbeitungskette ist idempotent: Der zweite Lauf meldet no changes needed, wenn PSS bereits dem Inventar entspricht, und verify bestätigt dies mit einer neuen Erfassung.
CLI-Optionen¶
Modusauswahl¶
Option |
Beschreibung |
Standard |
|---|---|---|
|
Pfad zum Migrations-JSON (dient als Standardimport, wenn |
|
|
Erfasstes Inventar in die Migrationsdatei speichern (kombinierbar mit einem Stromeingang; apply wird dennoch ausgeführt) |
— |
|
Nur Erfassung: Schreiben in die Datei, kein apply |
— |
|
Nur apply: Datei laden, keine Erfassung |
— |
Erfassung¶
Option |
Beschreibung |
Standard |
|---|---|---|
|
Maximale Erfassungsdauer |
|
|
Hinweis zur TS-Bitrate für das Pacing im Dateimodus |
|
Apply / Verify¶
Option |
Beschreibung |
Standard |
|---|---|---|
|
Abfrage zur MPTS-Auswahl überspringen; auf diese stream id auf PSS anwenden |
— |
|
Vorschläge des Dialogs automatisch übernehmen; bei einem Konflikt beenden |
— |
|
Plan der POSTs ausgeben, nichts senden |
— |
|
Automatische PSS-Ermittlung überschreiben (zum Beispiel |
automatisch |
|
Erfassung und Diff nach dem Apply überspringen |
verify aktiviert |
|
Erfassungsfenster für die Verifikation |
|
|
|
Anhebung aktiviert |
|
Bitratenreserve über dem gemessenen Wert bei der Anpassung |
|
Sonstiges¶
Option |
Beschreibung |
|---|---|
|
Ausführliches Protokoll (jeder HTTP POST und jeder Dialogzweig) |
|
Hilfe anzeigen und beenden |
Migrationsdatei (migrate.json)¶
Menschenlesbares JSON mit format_version: 1. Die Standardablage ist ./migrate.json; sie wird mit -f überschrieben. Beispiel für den Aufbau:
{
"format_version": 1,
"tool": "mpts_migrate",
"capture": {
"source": "udp://239.1.1.1:1234",
"captured_at_utc": "2026-04-30T08:15:00Z",
"duration_s": 8.2,
"packets": 109344
},
"transport_stream": {
"transport_stream_id": 1234,
"original_network_id": 8442,
"network_name": "Operator",
"delivery": { "type": "terrestrial", "frequency_khz": 522000 }
},
"services": [
{
"service_id": 1, "pmt_pid": 256, "pcr_pid": 256,
"service_type": 1, "service_name": "Channel 1",
"provider_name": "MyProvider", "logical_channel_number": 101,
"program_order": 1,
"free_ca_mode": false,
"elementary_streams": [
{ "pid": 256, "stream_type": 27, "language": "rus" }
]
}
]
}
Die Datei kann vor einem erneuten Apply bearbeitet werden: Dienste umbenennen, LCN ändern, service_type wechseln, network_name anpassen. Der Befehl mpts_migrate -i migrate.json sendet nur die geänderten Felder.
Verbindung zu PSS¶
Automatische Ermittlung: Das Dienstprogramm sucht
pssin/proc/<pid>/comm, liest dessen--config-Datei und übernimmtweb-server.bind-port(43971, wenn der Schlüssel fehlt).Manuell:
--pss-base http://host:portumgeht die automatische Ermittlung vollständig. Nützlich für ein entferntes PSS oder wenn--dry-runeinen Plan ohne laufendes PSS erstellen soll.Die Admin-REST-API erfordert auf
localhostkeine Authentifizierung.
Verifikation¶
Wenn --no-verify nicht angegeben ist (Vorgabe), führt das Dienstprogramm nach dem Anwenden des Plans Folgendes aus:
Sucht am Ziel-MPTS einen UDP-Ausgang auf localhost oder fügt vorübergehend einen auf
127.0.0.1:<auto>hinzu (mit dem Vermerkadded by mpts_migrate for verification).Erfasst das laufende MPTS über diesen Ausgang für
--verify-timeSekunden (Vorgabe 10).Vergleicht das erfasste Inventar mit dem Ziel:
Kritische Abweichung (TSID, ONID, network name, service_id, name, type, LCN) → Exit-Code 5.
Weiche Abweichung (PMT PID, Anzahl der ES, Anbietername, Reihenfolge der Programme in der PAT) → wird als Warnung ausgegeben, Exit-Code 0.
Ist das Ziel-MPTS überlastet (Ausgangsbitrate ≥ der konfigurierten
mpegts-output-bitrate), wirdWARNING: target MPTS is overloadedausgegeben — siehe Bitrate adjust.
Dry-run¶
--dry-run gibt jede HTTP-Anfrage aus, die das Dienstprogramm senden würde (Pfad, JSON-Rumpf), sendet jedoch keine davon. Nützlich für:
Die Durchsicht des Plans mit dem Bediener vor der Übernahme.
Die Erzeugung reproduzierbarer Änderungssätze in CI / Change-Management.
Den Betrieb bei nicht erreichbarem PSS (zu kombinieren mit
--pss-base http://host:port).
Dry-run startet keine Verifikation.
Bitrate adjust¶
Überschreitet captured_bitrate × (1 + headroom%) standardmäßig die mpegts-output-bitrate des Ziel-MPTS, hebt das Dienstprogramm dieses Limit auf PSS an, bevor die SI/PSI-Änderungen angewendet werden. Ohne ausreichende Reserve verliert ein überlastetes MPTS Daten niedriger Priorität. Typische Symptome: Tonaussetzer bei Radiodiensten, sporadische EIT-CRC-Fehler. Abschaltbar über --no-bitrate-adjust; die Reserve wird über --bitrate-headroom <pct> eingestellt (Vorgabe 15).
Exit-Codes¶
Code |
Bedeutung |
|---|---|
|
Erfolg — apply und (sofern aktiviert) die Verifikation sind fehlerfrei durchgelaufen. Mit demselben Code endet auch ein erfolgreicher |
|
Fehler bei Argumenten / Datei / Ermittlung |
|
In der Quelle wurde keine PAT gefunden: Am Eingang liegt kein gültiger MPEG-TS an, oder das Erfassungsfenster ist zu kurz; wird auch zurückgegeben, wenn der Bediener die Bestätigung der Zuordnung abgelehnt oder den Dialog verlassen hat (apply abgebrochen) |
|
Ein oder mehrere HTTP POSTs des Apply sind fehlgeschlagen |
|
Apply war erfolgreich, das Ziel-MPTS ist jedoch nicht in den Zustand |
|
Die Verifikation ist fehlgeschlagen — der erfasste Strom weicht in kritischen Feldern vom Ziel ab |
Einschränkungen und Fallstricke¶
PSS muss das Ziel-MPTS und die Feeder bereits vorhalten: Das Dienstprogramm legt keine neuen Streams an. Das Ziel-MPTS und mindestens so viele SPTS-Feeder, wie das Inventar Dienste enthält, müssen bereits vorhanden sein; Dienste ohne freien Feeder werden im Dialog übersprungen.
Die MPTS-Quelle muss während der Erfassung erreichbar sein (Modi 1, 2, save+apply): Die als Positionsargument
<input>übergebene URL muss einen MPEG-TS-Strom liefern, und für UDP Multicast müssen IGMP / Firewall den Empfang zulassen.Das ES-PID-Remapping wird automatisch angewendet: Ein Identity-Remap (
mpegts-pid-old≡mpegts-pid-new) wird für jede PCR-/Video-/Audio-/Teletext-/Daten-PID aller Dienste erzeugt, damit die ursprünglichen PIDs am Ausgang des Multiplexers byte-exact erhalten bleiben. Das PMT-Layout bleibt von Migration zu Migration stabil, deshalb benötigen selbst ältere Empfänger (STB vor 2015, Samsung vor der H-Serie, LG vor WebOS 3.0), die PIDs zwischenspeichern, keinen erneuten Suchlauf.Der Delivery-Deskriptor muss dem tatsächlichen Übertragungsweg entsprechen — für Empfänger, die sich über die NIT neu abstimmen (DVB-T/T2/C/S). Ein nicht passender
delivery-Block kann den Empfänger auf eine falsche Frequenz führen.Die Konsistenz der LCN zwischen primärem und Reserve-MPTS ist für Failover entscheidend — unterscheiden sie sich, verschieben sich die Kanalpositionen in der Empfängerliste nach der Umschaltung.
Der Provider name gilt in PSS für den ganzen Multiplex (ein
sdt-provider-nameje MPTS-Muxer-Eingang). Das Dienstprogramm wendet ihn automatisch an, wenn alle erfassten Dienste denselben Wert haben; haben die Dienste unterschiedlicheprovider_name-Werte, gibt das Dienstprogramm eine Warnung aus und lässt das Feld unberührt: Die Entscheidung liegt beim Bediener.Kein PSS-Konfigurationswerkzeug:
mpts_migrateändert ausschließlich die SI/PSI-Kennungsfelder, daspause-Kennzeichen jedes Feeders, (optional)mpegts-output-bitratesowie ab PSS 2.0.0.193 die Schlüssel für den PID-Beibehaltungsmodus und die Programmreihenfolge. Encoder, Eingänge, Verschlüsselung, Zeitpläne und Ähnliches konfiguriert es nicht.Auf PSS älter als 2.0.0.193 werden der Modus zur Beibehaltung der ursprünglichen PIDs am Muxer und die Programmreihenfolge in der PAT nicht unterstützt: Das Dienstprogramm gibt eine Warnung aus, die PIDs werden allein durch Identitätspaare fixiert, und die Programmreihenfolge kann nach der Migration von der ursprünglichen abweichen.
Fehlerdiagnose¶
Symptom |
Wahrscheinliche Ursache / Abhilfe |
|---|---|
|
Die Quelle ist kein MPEG-TS, IGMP/Firewall blockiert den Multicast, oder |
|
|
Apply war erfolgreich, das MPTS bleibt jedoch pausiert |
Das PSS-Protokoll prüfen; mit |
Die Verifikation meldet eine kritische Abweichung |
Ziel und erfassten Strom im JSON vergleichen; meist wurde im Dialog ein Feeder dem falschen Dienst zugeordnet |
|
|