MPTS Migrate Perfect Streamer Toolkit v1.1 — Migration der MPTS-Identität¶
Teil des Perfect Streamer Toolkit — https://pstreamer.tv
Erfasst die DVB-SI/PSI-Identität eines laufenden Mehrprogramm-MPEG-TS-Stroms (MPTS) und bildet sie auf einer Perfect-Streamer-Instanz (PSS) auf demselben Host nach. Ergebnis: Teilnehmerempfänger (STB / TV) arbeiten 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 einem über
--pss-baseerreichbaren 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 ohne freien Feeder werden im Dialog angezeigt und können übersprungen werden.
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 Transportstrom- und Dienstebene:
Transportstrom: TSID, ONID, network ID, network name, provider name (wird als mux-weiter
sdt-provider-nameangewendet, sofern alle Quelldienste ein und denselben Wert aufweisen), Delivery-Deskriptor (Parameter der terrestrischen / Kabel- / Satellitenübertragung), PAT/SDT/NIT-VersionenJe 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), 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.
Für jeden Dienst wird das ES-PID-Remapping als Identitätspaare (mpegts-pid-old ≡ mpegts-pid-new) für jede PCR- / Video- / Audio- / Teletext- / Daten-PID aufgebaut, sodass die ursprünglichen PIDs in der resultierenden multiplexierten Ausgabe 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) — die On-Air-Reihenfolge der Programme übersteht die Migration. 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), und die Identitätspaare bleiben der einzige Mechanismus zur Fixierung der PIDs, während die Programmreihenfolge in der PAT nicht erhalten bleibt.
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 dem Update: Erfassung des Multiplex vor dem PSS-Upgrade 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 PAT / PMT / SDT / NIT / EIT über
-tSekunden aus (Vorgabe 30) und erstellt das Inventar; die Gesamtbitrate des Stroms wird gemessen.(Optional) Speichern — mit
-soder-owird das Inventar zur Wiederverwendung als JSON geschrieben.PSS-Ermittlung — erkennt das laufende PSS über einen
/proc-Scan 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 tatsächlich 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 die multiplexierte Ausgabe jede ursprüngliche PID unverändert beibehält — einschließlich PCR, Video, Audio, Teletext, SCTE-35, DSM-CC. 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 und schaltet anschließend das MPTS auf pause/unpause, 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 — mpts_migrate -i migrate.json sendet nur die geänderten Felder.
Verbindung zu PSS¶
Automatische Ermittlung: Durchsuchen von
/proc/<pid>/commnachpss, Lesen der zugehörigen--config-Datei, Übernahme vonweb-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, Programmreihenfolge 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 weiter unten.
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 sind Tonaussetzer bei Radiodiensten und 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. Wird auch von einem erfolgreichen |
|
Fehler bei Argumenten / Datei / Ermittlung |
|
In der Quelle wurde keine PAT gefunden — der Eingang ist kein gültiger MPEG-TS 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 Running zurückgekehrt |
|
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 vorab 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; für UDP-Multicast müssen IGMP / Firewall dies zulassen.Das ES-PID-Remapping wird automatisch angewendet: Für jeden Dienst wird ein Identity-Remap (
mpegts-pid-old≡mpegts-pid-new) für jede PCR-/Video-/Audio-/Teletext-/Daten-PID erzeugt, damit die multiplexierte Ausgabe die ursprünglichen PIDs byte-exact beibehält. Das PMT-Layout bleibt von Migration zu Migration stabil — selbst ältere Empfänger (STB vor 2015, Samsung vor der H-Serie, LG vor WebOS 3.0), die PIDs zwischenspeichern, benötigen 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 ist in PSS mux-weit gültig (ein
sdt-provider-nameje MPTS-Muxer-Eingang). Das Dienstprogramm wendet ihn automatisch an, wenn alle erfassten Dienste ein und denselben Wert aufweisen; tragen verschiedene Dienste unterschiedlicheprovider_name-Werte, wird eine Warnung ausgegeben und das Feld bleibt unberührt — die Entscheidung liegt beim Bediener.Kein PSS-Konfigurationswerkzeug:
mpts_migrateberührt ausschließlich die SI/PSI-Identitätsfelder, 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 ein Feeder im Dialog dem falschen Dienst zugeordnet |
|
|