MPTS Migrate Perfect Streamer Toolkit v1.1 — migration de l’identité MPTS¶
Composant de Perfect Streamer Toolkit — https://pstreamer.tv
Capture l’identité DVB SI/PSI d’un flux MPEG-TS multiprogramme (MPTS) en exploitation et la reproduit sur une instance Perfect Streamer (PSS) située sur le même hôte. Résultat : les récepteurs des abonnés (STB / TV) continuent de fonctionner sans nouvelle recherche des chaînes après une migration ou une bascule vers le secours.
L’outil fait partie du paquet pstreamer et se trouve, après installation, dans /opt/pss/tools/mpts_migrate — aucune installation séparée n’est nécessaire.
Prérequis¶
Avant de lancer l’utilitaire, vérifiez que :
PSS est en fonctionnement sur le même hôte (ou sur un hôte accessible via
--pss-base). L’utilitaire recherchepssdans/procet litpss.jsonafin d’obtenir le port d’administration (s’il est absent de la configuration —43971).La source MPTS est accessible si une capture est prévue (modes 1, 2, save+apply) : l’URL passée en argument positionnel
<input>doit délivrer un flux MPEG-TS. Pour l’UDP multicast, IGMP / le pare-feu doivent autoriser la réception ; pour les fichiers, le chemin doit exister.Le MPTS cible est déjà configuré dans PSS : l’utilitaire ne crée pas de nouveaux flux. L’objet MPTS et au moins autant d’alimentations SPTS qu’il y a de services dans l’inventaire doivent exister au préalable. Les services sans alimentation libre sont affichés dans le dialogue et peuvent être ignorés.
L’API d’administration HTTP est ouverte sur localhost pour la lecture de
/data/stream(utilisée lors du verify) et l’écriture de/config/stream(apply).
Éléments migrés¶
Tous les identifiants visibles par le récepteur, au niveau du flux de transport et des services :
Flux de transport : TSID, ONID, network ID, network name, provider name (appliqué comme
sdt-provider-namecommun au multiplex si tous les services source ont la même valeur), descripteur de diffusion (paramètres de diffusion terrestre / câble / satellite), versions PAT/SDT/NITPar service :
service_id,pmt_pid,pcr_pid,service_type, nom du service, numéro logique de chaîne (LCN), indicateur free-CA, indicateurs EIT-present / EIT-scheduleFlux élémentaires : PID (un
identity remapest appliqué — voir Limitations), types de flux, étiquettes de langueAccès conditionnel : descripteurs CA au niveau du programme et de l’ES
Les noms de services / de fournisseurs codés dans des jeux de caractères DVB non ASCII (par exemple ISO-8859-5 pour le cyrillique) sont décodés en UTF-8 automatiquement.
Pour chaque service, le remap des PID ES est construit sous forme de paires d’identité (mpegts-pid-old ≡ mpegts-pid-new) pour chaque PID PCR / video / audio / teletext / data ; dans le flux multiplexé résultant, les PID d’origine sont donc conservés à l’octet près. Les récepteurs anciens qui mettent la PMT en cache après la première recherche continuent de fonctionner sans reconfiguration.
Sur PSS 2.0.0.193 et versions ultérieures, le plan active en outre, sur l’entrée du multiplexeur du MPTS cible, le mode natif de conservation des PID d’origine (Automatic PID mapping désactivé) et définit pour chaque service le numéro d’ordre de programme capturé dans la PAT (program order) — l’ordre des programmes à l’antenne survit à la migration. La prise en charge est détectée automatiquement d’après la configuration du streamer cible ; sur les versions antérieures, ces clés ne sont pas envoyées (l’utilitaire affiche un avertissement), les paires d’identité restent alors le seul mécanisme de verrouillage des PID et l’ordre des programmes dans la PAT n’est pas conservé.
Cas d’usage¶
Failover : bascule des décodeurs du MPTS principal vers le MPTS de secours en conservant les chaînes du côté récepteur
Migration matérielle : déplacement d’un multiplex en exploitation d’un hôte PSS vers un autre sans aucune instruction aux téléspectateurs
Instantané avant / après mise à jour : capture du multiplex avant la mise à niveau de PSS, réapplication ensuite, afin de garantir un SI/PSI identique au bit près
Modification manuelle et réapplication : capture, modification de
migrate.json(renommage des services, changement des LCN, ajustement deservice_type), réapplicationContrôle en dry-run : affichage de chaque HTTP POST qui serait envoyé, sans agir sur PSS
Démarrage rapide¶
# 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
Déroulement¶
Capture — l’utilitaire ouvre le flux, analyse les tables PAT / PMT / SDT / NIT / EIT pendant
-tsecondes (30 par défaut) et construit l’inventaire ; le débit total du flux est mesuré.(Facultatif) Sauvegarde — avec
-sou-o, l’inventaire est écrit au format JSON en vue d’une réutilisation.Détection de PSS — détecte le PSS en fonctionnement par un balayage de
/procet litpss.jsonpour obtenir le port d’administration (s’il est absent de la configuration —43971) ;--pss-base http://host:portcontourne la détection automatique.Confirmation de l’appariement — un dialogue interactif demande comment associer chaque service capturé à une alimentation SPTS existante ;
--non-interactiveaccepte les propositions et s’arrête en cas de conflit ;--target-mpts <id>supprime l’invite de sélection du MPTS.Reprise automatique des alimentations — pour chaque SPTS / muxer-output apparié, l’utilitaire envoie
{"pause":false}si l’alimentation était en pause, afin que le multiplexeur reçoive effectivement les données après l’apply.Ajustement automatique du débit — si
captured_bitrate × (1 + headroom%)dépasse lempegts-output-bitratedu MPTS cible, l’utilitaire relève cette limite sur PSS au moyen d’un seul POST (avec arrondi au millier de kbps supérieur). Désactivé par--no-bitrate-adjust.Planification — compare l’inventaire avec l’arborescence
/config/streamcourante sur PSS et prépare des requêtes HTTP POST uniquement pour les champs qui diffèrent. Le remap des PID ES est généré sous forme de paires d’identité (mpegts-pid-old≡mpegts-pid-new) afin que le flux multiplexé conserve chaque PID d’origine sans modification — y compris PCR, video, audio, teletext, SCTE-35, DSM-CC. Sur PSS 2.0.0.193 et versions ultérieures, le plan active en outre le mode de conservation des PID d’origine sur l’entrée du multiplexeur cible et définit l’ordre des programmes dans la PAT (voir Éléments migrés).Application — envoie les requêtes POST planifiées, puis bascule le MPTS pause/unpause afin que PSS relise la configuration ; avec
--dry-run, le plan est seulement affiché.Verify (activé par défaut, même si le plan est vide) — capture le MPTS résultant via l’une des sorties UDP de PSS et le compare à la cible ; écarts critiques (TSID, ONID, service_id, name, type, LCN) → code de sortie 5.
Relancer l’ensemble de la chaîne est idempotent : la deuxième exécution signale no changes needed si PSS correspond déjà à l’inventaire, et le verify le confirme par une nouvelle capture.
Options CLI¶
Sélection du mode¶
Option |
Description |
Par défaut |
|---|---|---|
|
Chemin du JSON de migration (utilisé comme import par défaut en l’absence de |
|
|
Enregistrer l’inventaire capturé dans le fichier de migration (se combine avec une entrée flux ; l’apply est tout de même exécuté) |
— |
|
Capture seule : écriture dans un fichier, sans apply |
— |
|
Apply seul : chargement du fichier, sans capture |
— |
Capture¶
Option |
Description |
Par défaut |
|---|---|---|
|
Durée maximale de la capture |
|
|
Indication du débit TS pour le cadencement en mode fichier |
|
Apply / Verify¶
Option |
Description |
Par défaut |
|---|---|---|
|
Supprimer l’invite de sélection du MPTS ; appliquer à ce stream id sur PSS |
— |
|
Accepter automatiquement les propositions du dialogue ; s’arrêter en cas de conflit |
— |
|
Afficher le plan des POST, n’envoyer aucune requête |
— |
|
Remplacer la détection automatique de PSS (par exemple, |
auto |
|
Ignorer la capture post-apply et le diff |
verify activé |
|
Fenêtre de capture pour la vérification |
|
|
Ne pas relever |
relèvement activé |
|
Marge de débit au-dessus de la valeur mesurée lors de l’ajustement |
|
Divers¶
Option |
Description |
|---|---|
|
Journal détaillé (chaque HTTP POST et chaque branche du dialogue) |
|
Afficher l’aide et quitter |
Fichier de migration (migrate.json)¶
JSON lisible par un opérateur, avec format_version: 1. L’emplacement par défaut est ./migrate.json ; il se redéfinit avec -f. Exemple de structure :
{
"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" }
]
}
]
}
Le fichier peut être modifié avant une réapplication : renommer des services, changer les LCN, modifier service_type, ajuster network_name — mpts_migrate -i migrate.json n’enverra que les champs modifiés.
Connexion à PSS¶
Détection automatique : balayage de
/proc/<pid>/commà la recherche depss, lecture de son fichier--config, sélection deweb-server.bind-port(si la clé est absente —43971).Manuellement :
--pss-base http://host:portcontourne entièrement la détection automatique. Utile pour un PSS distant ou lorsque--dry-rundoit produire un plan sans PSS actif.L’API REST d’administration n’exige aucune authentification sur
localhost.
Vérification¶
Si --no-verify n’est pas indiqué (comportement par défaut), après application du plan l’utilitaire :
Recherche une sortie UDP sur localhost du MPTS cible ou en ajoute temporairement une sur
127.0.0.1:<auto>(portant la mentionadded by mpts_migrate for verification).Capture le MPTS en direct par cette sortie pendant
--verify-timesecondes (10 par défaut).Compare l’inventaire capturé à la cible :
Écart critique (TSID, ONID, network name, service_id, name, type, LCN) → code de sortie 5.
Écart mineur (PMT PID, nombre d’ES, nom du fournisseur, ordre des programmes dans la PAT) → signalé sous forme d’avertissement, code de sortie 0.
Si le MPTS cible est surchargé (débit de sortie ≥
mpegts-output-bitrateconfiguré), le messageWARNING: target MPTS is overloadedest affiché — voir Bitrate adjust ci-dessous.
Dry-run¶
--dry-run affiche chaque requête HTTP que l’utilitaire enverrait (chemin, corps JSON), mais n’en envoie aucune. Utile pour :
Examiner le plan avec l’opérateur avant de le valider.
Générer des ensembles de modifications reproductibles en CI / gestion des changements.
Travailler lorsque PSS est inaccessible (à combiner avec
--pss-base http://host:port).
Le dry-run ne lance pas la vérification.
Bitrate adjust¶
Par défaut, si captured_bitrate × (1 + headroom%) dépasse le mpegts-output-bitrate du MPTS cible, l’utilitaire relève cette limite sur PSS avant d’appliquer les modifications SI/PSI. Sans marge suffisante, un MPTS surchargé perd les données de faible priorité — les symptômes typiques sont des coupures de son sur les services radio et des erreurs CRC EIT intermittentes. Désactivé par --no-bitrate-adjust ; la marge se règle avec --bitrate-headroom <pct> (15 par défaut).
Codes de sortie¶
Code |
Signification |
|---|---|
|
Succès — l’apply et (si elle est activée) la vérification se sont déroulés sans erreur. Également renvoyé par un |
|
Erreur d’argument / de fichier / de détection |
|
Aucune PAT trouvée dans la source — l’entrée n’est pas un MPEG-TS valide ou la fenêtre de capture est trop courte ; également renvoyé lorsque l’opérateur a refusé la confirmation de l’appariement ou a quitté le dialogue (apply interrompu) |
|
Une ou plusieurs requêtes HTTP POST de l’apply ont échoué |
|
L’apply a réussi, mais le MPTS cible n’est pas revenu à l’état Running |
|
La vérification a échoué — le flux capturé diffère de la cible sur des champs critiques |
Limitations et pièges¶
PSS doit disposer au préalable du MPTS cible et des alimentations : l’utilitaire ne crée pas de nouveaux flux. Le MPTS cible et au moins autant d’alimentations SPTS qu’il y a de services dans l’inventaire doivent exister au préalable ; les services sans alimentation libre sont ignorés dans le dialogue.
La source MPTS doit être accessible lors de la capture (modes 1, 2, save+apply) : l’URL passée en argument positionnel
<input>doit délivrer un flux MPEG-TS ; pour l’UDP multicast, IGMP / le pare-feu doivent l’autoriser.Le remap des PID ES est appliqué automatiquement : pour chaque service, un remap d’identité (
mpegts-pid-old≡mpegts-pid-new) est généré pour chaque PID PCR/video/audio/teletext/data, afin que le flux multiplexé conserve les PID d’origine à l’octet près. La composition de la PMT reste stable d’une migration à l’autre — même les récepteurs anciens (STB antérieurs à 2015, Samsung antérieurs à la série H, LG antérieurs à WebOS 3.0) qui mettent les PID en cache n’exigent pas de nouvelle recherche.Le descripteur de diffusion doit correspondre au support réel pour les récepteurs qui se reconfigurent via la NIT (DVB-T/T2/C/S). Un bloc
deliverynon conforme peut orienter le récepteur vers une fréquence erronée.La cohérence des LCN entre le MPTS principal et le MPTS de secours est critique pour le failover — s’ils diffèrent, les positions des chaînes dans la liste du récepteur se décaleront après la bascule.
Le provider name sur PSS est commun à tout le multiplex (un seul
sdt-provider-namepar muxer-input MPTS). L’utilitaire l’applique automatiquement si tous les services capturés ont la même valeur ; si les services portent desprovider_namedifférents, un avertissement est affiché et le champ reste inchangé — le choix revient à l’opérateur.Ce n’est pas un outil de configuration de PSS :
mpts_migratene touche qu’aux champs d’identité SI/PSI, à l’indicateurpausede chaque alimentation, (facultativement) àmpegts-output-bitrateet, sur PSS 2.0.0.193 et versions ultérieures, aux clés du mode de conservation des PID et de l’ordre des programmes. Il ne configure ni les encodeurs, ni les entrées, ni le chiffrement, ni les programmations, etc.Sur les versions de PSS antérieures à 2.0.0.193, le mode de conservation des PID d’origine du multiplexeur et l’ordre des programmes dans la PAT ne sont pas pris en charge : l’utilitaire affiche un avertissement, les PID ne sont verrouillés que par les paires d’identité et l’ordre des programmes après la migration peut différer de l’ordre initial.
Diagnostic¶
Symptôme |
Cause probable / solution |
|---|---|
|
la source n’est pas un MPEG-TS, IGMP/le pare-feu bloque le multicast ou |
|
utiliser |
L’apply a réussi, mais le MPTS reste en pause |
consulter le journal de PSS ; relancer avec |
La vérification signale un écart critique |
comparer la cible et le flux capturé au format JSON ; en général, une alimentation a été associée par erreur au mauvais service dans le dialogue |
|
relever |