MPTS Migrate Perfect Streamer Toolkit v1.0 — MPTS-Identitätsmigration¶
Teil des Perfect Streamer Toolkit — https://pstreamer.tv
Erfasst die DVB-SI/PSI-Identität eines laufenden Multi-Programm-MPEG-TS-Streams (MPTS) und reproduziert sie auf einer Perfect-Streamer-Instanz (PSS) auf demselben Host. Ergebnis: Endkunden-Empfänger (STB / TV) arbeiten ohne erneuten Sender-Suchlauf nach der Migration oder dem Failover weiter.
Voraussetzungen¶
Stellen Sie vor dem Start des Tools sicher, dass:
PSS läuft auf demselben Host (oder auf einem über
--pss-baseerreichbaren Host). Das Tool suchtpssin/procund liestpss.json, um den Admin-Port (Standard43971) zu ermitteln.MPTS-Quelle erreichbar, falls eine Erfassung geplant ist (Modi 1, 2, save+apply): die als Positionsargument
<input>übergebene URL muss einen MPEG-TS-Stream liefern. Für UDP multicast — IGMP / Firewall müssen den Empfang erlauben; bei Dateien — der Pfad muss existieren.Ziel-MPTS bereits im PSS konfiguriert: das Tool legt keine neuen Streams an. Ein MPTS-Objekt sowie mindestens so viele SPTS-Feeder, wie das Inventar Services hat, müssen vorab existieren. Services ohne verfügbaren Feeder erscheinen im Dialog und können übersprungen werden.
Die HTTP-Admin-API ist auf localhost offen — fürs Lesen von
/data/stream(verify) und Schreiben in/config/stream(apply).
Was wird migriert¶
Alle vom Empfänger sichtbaren Identifikatoren auf Transportstream- und Service-Ebene:
Transport-Stream: TSID, ONID, network ID, network name, provider name (wird mux-weit als
sdt-provider-nameangewendet, wenn alle Quell-Services denselben Wert haben), Delivery-Descriptor (Parameter terrestrischer/Kabel-/Satelliten-Übertragung), PAT/SDT/NIT-VersionenPro Service:
service_id,pmt_pid,pcr_pid,service_type, Servicename, logische Kanalnummer (LCN), free-CA-Flag, EIT-present-/EIT-schedule-FlagsElementarstreams: PIDs (Identity-Remap angewandt — siehe Einschränkungen), Streamtypen, Sprachtags
Conditional Access: CA-Deskriptoren auf Programm- und ES-Ebene
Service- und Provider-Namen in nicht-ASCII-DVB-Kodierungen (z. B. ISO-8859-5 für Kyrillisch) werden automatisch nach UTF-8 dekodiert.
Per-Service-ES-PID-Remap wird als Identity-Paare (mpegts-pid-old ≡ mpegts-pid-new) für jedes PCR/video/audio/teletext/data PID gebildet, sodass die resultierende multiplexte Ausgabe die Quell-PIDs byte-exact beibehält. Legacy-Empfänger, die das PMT nach dem ersten Suchlauf cachen, arbeiten ohne Neukonfiguration weiter.
Anwendungsfälle¶
Failover: Umschalten der Decoder vom primären auf den Backup-MPTS bei gleichbleibenden Kanälen am Empfänger
Hardware-Migration: Verlagerung eines laufenden Multiplexes von einem PSS-Host auf einen anderen ohne Instruktionen für Zuschauer
Snapshot vor/nach Update: Multiplex vor dem PSS-Upgrade erfassen und danach erneut anwenden, um bit-identische SI/PSI zu garantieren
Manuelle Bearbeitung und erneutes Anwenden: Erfassen,
migrate.jsonbearbeiten (Services umbenennen, LCN ändern,service_typekorrigieren) und erneut anwendenDry-Run-Review: jeder HTTP-POST, der gesendet würde, wird ausgegeben, ohne PSS zu beeinflussen
Schnellstart¶
# Захват из live-потока и применение к локальному PSS за один запуск
mpts_migrate udp://239.1.1.1:1234
# Захват, сохранение в migrate.json и применение
mpts_migrate -s udp://239.1.1.1:1234
# Только захват — запись в файл, без применения
mpts_migrate -o backup.json udp://239.1.1.1:1234
# Применение ранее сохранённого JSON
mpts_migrate -i backup.json
# Без аргументов — загрузка ./migrate.json и применение
mpts_migrate
# Просмотр того, что сделает apply, без изменений
mpts_migrate -i backup.json --dry-run
Arbeitsablauf¶
Erfassung — das Tool öffnet den Stream, parst PAT / PMT / SDT / NIT / EIT für
-tSekunden (Standard 30) und erstellt das Inventar; die Gesamtbitrate wird gemessen.(Optional) Speichern — mit
-soder-owird das Inventar zur späteren Wiederverwendung als JSON gespeichert.PSS-Suche — findet ein laufendes PSS per
/proc-Scan und liestpss.jsonzur Ermittlung des Admin-Ports (Standard43971);--pss-base http://host:portumgeht die Auto-Discovery.Mapping-Bestätigung — ein interaktiver Dialog fragt, wie jeder erfasste Service einem vorhandenen SPTS-Feeder zuzuordnen ist;
--non-interactiveakzeptiert die Vorschläge und bricht bei Konflikt ab;--target-mpts <id>überspringt die MPTS-Auswahl.Auto-Unpause der Feeder — für jeden zugeordneten SPTS/muxer-output sendet das Tool
{"pause":false}, falls der Feeder pausiert war, damit der Multiplexer nach dem Apply tatsächlich Daten empfängt.Auto-Bitrate-Anpassung — wenn
captured_bitrate × (1 + headroom%)mpegts-output-bitratedes Ziel-MPTS übersteigt, hebt das Tool diese Grenze auf dem PSS per einzelnem POST an (aufgerundet auf das nächste Vielfache von 1000 kbps). Deaktivierbar über--no-bitrate-adjust.Planung — vergleicht das Inventar mit dem aktuellen Baum
/config/streamauf dem PSS und bereitet HTTP-POSTs nur für die abweichenden Felder vor. Das ES-PID-Remap wird als Identity-Paare (mpegts-pid-old≡mpegts-pid-new) erzeugt, sodass die multiplexte Ausgabe jedes Quell-PID unverändert beibehält — einschließlich PCR, video, audio, teletext, SCTE-35, DSM-CC.Apply — sendet die geplanten POSTs und schaltet anschließend MPTS pause/unpause um, damit PSS die Konfiguration neu liest; bei
--dry-runwird der Plan nur gedruckt.Verify (standardmäßig aktiv, auch wenn der Plan leer ist) — erfasst das resultierende MPTS über einen der UDP-Outputs des PSS und vergleicht mit dem Ziel; kritische Abweichungen (TSID, ONID, service_id, name, type, LCN) → exit 5.
Eine erneute Ausführung der gesamten Pipeline ist idempotent: Beim zweiten Lauf wird no changes needed gemeldet, wenn PSS dem Inventar bereits entspricht; verify bestätigt das durch erneute Erfassung.
CLI-Optionen¶
Modusauswahl¶
Option |
Beschreibung |
Standard |
|---|---|---|
|
Pfad zur Migrations-JSON (Standardimport ohne |
|
|
Erfasstes Inventar in eine Migrations-Datei speichern (kombinierbar mit Stream-Input; Apply wird trotzdem ausgeführt) |
— |
|
Nur Erfassung: in Datei schreiben, ohne Apply |
— |
|
Nur Apply: Datei laden, ohne Erfassung |
— |
Erfassung¶
Option |
Beschreibung |
Standard |
|---|---|---|
|
Maximale Erfassungsdauer |
|
|
TS-Bitrate-Hinweis für das Pacing im Dateimodus |
|
Apply / Verify¶
Option |
Beschreibung |
Standard |
|---|---|---|
|
MPTS-Auswahl überspringen; auf diese Stream-ID am PSS anwenden |
— |
|
Dialogvorschläge automatisch akzeptieren; bei Konflikt abbrechen |
— |
|
POST-Plan ausgeben, nichts senden |
— |
|
PSS-Auto-Discovery überschreiben (z. B. |
automatisch |
|
Post-Apply-Erfassung und Diff überspringen |
verify aktiviert |
|
Erfassungsfenster für die Verifikation |
|
|
|
Anhebung aktiviert |
|
Bitrate-Sicherheitsreserve über dem gemessenen Wert beim Anpassen |
|
Sonstiges¶
Option |
Beschreibung |
|---|---|
|
Detailliertes Log (jeder HTTP-POST und Dialogzweig) |
|
Hilfe anzeigen und beenden |
Migrations-Datei (migrate.json)¶
Menschenlesbares JSON mit format_version: 1. Standardpfad ./migrate.json; mit -f überschreibbar. Beispielstruktur:
{
"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,
"free_ca_mode": false,
"elementary_streams": [
{ "pid": 256, "stream_type": 27, "language": "rus" }
]
}
]
}
Die Datei lässt sich vor einem erneuten Apply bearbeiten: Services umbenennen, LCN ändern, service_type umschalten, network_name anpassen — mpts_migrate -i migrate.json sendet nur die geänderten Felder.
Verbindung zu PSS¶
Auto-Discovery:
/proc/<pid>/commnachpssdurchsuchen, dessen--config-Datei lesen undweb-server.bind-port(Standard43971) übernehmen.Manuell:
--pss-base http://host:portumgeht die Auto-Discovery vollständig. Nützlich für ein entferntes PSS oder wenn--dry-runohne lebendes PSS einen Plan erstellen soll.Die Admin-REST-API erfordert keine Authentifizierung auf
localhost.
Verifikation¶
Wenn --no-verify nicht gesetzt ist (Standard), führt die Utility nach Anwendung des Plans Folgendes aus:
Sucht einen UDP-Localhost-Ausgang am Ziel-MPTS oder fügt vorübergehend einen unter
127.0.0.1:<auto>mit Markeradded by mpts_migrate for verificationhinzu.Erfasst den Live-MPTS über diesen Ausgang für
--verify-timeSekunden (Standard 10).Vergleicht das erfasste Inventar mit dem Ziel: - Kritische Abweichung (TSID, ONID, service_id, name, type, LCN) → Exit-Code 5. - Weiche Abweichung (PMT PID, PCR PID, ES PID) → wird als Warning ausgegeben, Exit-Code 0.
Wenn der Ziel-MPTS überlastet ist (Output-Bitrate ≥ konfigurierter
mpegts-output-bitrate), wirdWARNING: target MPTS is overloadedausgegeben — siehe Bitrate adjust unten.
Dry-run¶
--dry-run gibt jede HTTP-Anfrage aus, die das Tool senden würde (Pfad, JSON-Body), schickt aber keine. Nützlich für:
Plan-Review mit dem Bediener vor dem Commit.
Erzeugung reproduzierbarer Änderungsmengen in CI / Change-Management.
Arbeit bei nicht erreichbarem PSS (mit
--pss-base http://host:portkombinieren).
Dry-Run führt keine Verifikation aus.
Bitrate adjust¶
Wenn captured_bitrate × (1 + headroom%) mpegts-output-bitrate des Ziel-MPTS übersteigt, hebt das Tool standardmäßig diese Grenze auf dem PSS an, bevor SI/PSI-Änderungen angewendet werden. Ohne ausreichende Reserve verliert ein überlasteter MPTS Daten niedriger Priorität — typische Symptome: Audio-Verlust bei Radio-Services, gelegentliche EIT-CRC-Fehler. Deaktivierbar über --no-bitrate-adjust; die Reserve wird über --bitrate-headroom <pct> gesteuert (Standard 15).
Exit-Codes¶
Code |
Wert |
|---|---|
|
Erfolg — Apply und (falls aktiviert) Verifikation liefen sauber durch. Auch ein erfolgreicher |
|
Argument-, Datei- oder Erkennungsfehler |
|
In der Quelle wurde keine PAT gefunden — Eingabe ist kein gültiger MPEG-TS oder das Erfassungsfenster ist zu kurz |
|
Ein oder mehrere HTTP-POSTs des Apply schlugen fehl |
|
Apply lief, aber der Ziel-MPTS ist nicht in den Zustand Running zurückgekehrt |
|
Verifikation fehlgeschlagen — der erfasste Stream weicht in kritischen Feldern vom Ziel ab |
Einschränkungen und Stolperfallen¶
Das PSS muss das Ziel-MPTS und die Feeder bereits halten: das Tool legt keine neuen Streams an. Das Ziel-MPTS sowie mindestens so viele SPTS-Feeder, wie das Inventar Services hat, müssen vorab existieren; Services ohne verfügbaren Feeder werden im Dialog übersprungen.
Die MPTS-Quelle muss bei der Erfassung erreichbar sein (Modi 1, 2, save+apply): die als Positionsargument
<input>übergebene URL muss einen MPEG-TS-Stream liefern; bei UDP multicast müssen IGMP / Firewall den Empfang erlauben.Das ES-PID-Remap wird automatisch angewendet: das Per-Service-Identity-Remap (
mpegts-pid-old≡mpegts-pid-new) wird für jedes PCR/video/audio/teletext/data PID erzeugt, damit die multiplexte Ausgabe die Quell-PIDs byte-exact beibehält. Das PMT-Layout bleibt über Migrationen hinweg stabil — selbst Legacy-Empfänger (STBs vor 2015, Samsung vor H-Serie, LG vor WebOS 3.0), die PIDs cachen, brauchen keinen erneuten Suchlauf.Der Delivery-Descriptor muss zur tatsächlichen Trägerstrecke passen für Empfänger, die sich über NIT (DVB-T/T2/C/S) neu abstimmen. Ein nicht passender
delivery-Block kann den Empfänger auf eine falsche Frequenz leiten.LCN-Konsistenz zwischen Haupt- und Backup-MPTS ist beim Failover entscheidend — bei Abweichungen verschieben sich Kanalpositionen in der Empfängerliste nach dem Umschalten.
Provider name am PSS — mux-weit gemeinsam (ein einziger
sdt-provider-nameam muxer-input MPTS). Das Tool wendet ihn automatisch an, wenn alle erfassten Services denselben Wert haben; haben verschiedene Services unterschiedlicheprovider_name-Werte, wird ein Warning ausgegeben und das Feld bleibt unverändert — die Entscheidung trifft der Operator.Kein Konfigurationstool für PSS selbst:
mpts_migrateberührt nur die SI/PSI-Identitätsfelder, daspause-Flag pro Feeder und (optional)mpegts-output-bitrate. Encoder, Inputs, Verschlüsselung, Scheduling etc. konfiguriert es nicht.
Diagnose¶
Symptom |
Wahrscheinliche Ursache / Lösung |
|---|---|
|
Quelle ist kein MPEG-TS, IGMP/Firewall blockiert Multicast oder |
|
|
Apply lief, aber das MPTS bleibt pausiert |
PSS-Log prüfen; mit |
Verifikation meldet kritische Abweichung |
goal mit capture im JSON vergleichen; meist ist ein Feeder im Dialog versehentlich dem falschen Service zugeordnet |
|
|