MPTS Migrate Perfect Streamer Toolkit v1.1 — migración de la identidad MPTS¶
Parte del Perfect Streamer Toolkit — https://pstreamer.tv
Captura la identidad DVB SI/PSI de un flujo MPEG-TS multiprograma (MPTS) en funcionamiento y la reproduce en una instancia de Perfect Streamer (PSS) del mismo host. Como resultado, los receptores de los abonados (STB / TV) siguen funcionando sin volver a explorar los canales después de una migración o de una conmutación al equipo de reserva.
La herramienta forma parte del paquete pstreamer y, tras la instalación, se encuentra en /opt/pss/tools/mpts_migrate — no es necesario instalar nada por separado.
Requisitos previos¶
Antes de ejecutar la utilidad, compruebe que:
PSS está en ejecución en el mismo host (o en un host accesible mediante
--pss-base). La utilidad buscapssen/procy leepss.jsonpara obtener el puerto de administración (43971si la configuración no lo contiene).El MPTS de origen está accesible si se prevé una captura (modos 1, 2, save+apply): la URL indicada como argumento posicional
<input>debe entregar un flujo MPEG-TS. Para multicast UDP, IGMP / el cortafuegos deben permitir la recepción; para los archivos, la ruta debe existir.El MPTS de destino ya está configurado en PSS: la utilidad no crea flujos nuevos. El objeto MPTS y al menos tantos alimentadores SPTS como servicios haya en el inventario deben existir de antemano. Los servicios sin alimentador libre se muestran en el diálogo y pueden omitirse.
La API HTTP de administración está disponible en localhost para leer
/data/stream(se utiliza durante la verificación) y escribir/config/stream(aplicación).
Qué se migra¶
Todos los identificadores visibles para el receptor, a nivel de flujo de transporte y de servicio:
Flujo de transporte: TSID, ONID, network ID, network name, provider name (se aplica como
sdt-provider-namecomún a todo el múltiplex si todos los servicios de origen tienen el mismo valor), descriptor de entrega (parámetros de emisión terrestre / por cable / por satélite), versiones de PAT/SDT/NITPor servicio:
service_id,pmt_pid,pcr_pid,service_type, nombre del servicio, número lógico de canal (LCN), indicador free-CA, indicadores EIT-present / EIT-scheduleFlujos elementales: los PID (se aplica un
identity remap— véase Limitaciones), tipos de flujo, etiquetas de idiomaAcceso condicional: descriptores CA a nivel de programa y de ES
Los nombres de servicio / proveedor en codificaciones DVB distintas de ASCII (por ejemplo, ISO-8859-5 para el cirílico) se decodifican a UTF-8 automáticamente.
Para cada servicio, el remapeo de PID de ES se construye como pares de identidad (mpegts-pid-old ≡ mpegts-pid-new) para cada PID de PCR / vídeo / audio / teletexto / datos, por lo que la salida multiplexada resultante conserva los PID originales byte-exact. Los receptores antiguos que almacenan en caché la PMT tras la primera exploración siguen funcionando sin reconfiguración.
En PSS 2.0.0.193 y posteriores, el plan habilita además, en la entrada del multiplexor del MPTS de destino, el modo nativo de conservación de los PID originales (Automatic PID mapping desactivado) y fija para cada servicio el número de orden de programa capturado en la PAT (program order) — el orden de programas en antena sobrevive a la migración. La compatibilidad se detecta automáticamente a partir de la configuración del streamer de destino; en versiones anteriores estas claves no se envían (la utilidad imprime una advertencia), los pares de identidad son el único mecanismo que fija los PID y el orden de programas en la PAT no se conserva.
Casos de uso¶
Failover: conmutación de los decodificadores del MPTS principal al de reserva conservando los canales en el lado del receptor
Migración de hardware: traslado de un múltiplex en funcionamiento de un host PSS a otro sin instrucciones para los espectadores
Instantánea antes / después de la actualización: captura del múltiplex antes de actualizar PSS y nueva aplicación posterior para garantizar un SI/PSI idéntico bit a bit
Edición manual y nueva aplicación: captura, edición de
migrate.json(renombrar servicios, cambiar los LCN, ajustarservice_type) y nueva aplicaciónComprobación en dry-run: impresión de cada HTTP POST que se enviaría, sin afectar a PSS
Inicio rápido¶
# 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
Flujo de trabajo¶
Captura — la utilidad abre el flujo, analiza PAT / PMT / SDT / NIT / EIT durante
-tsegundos (30 por defecto) y construye el inventario; se mide la tasa de bits total del flujo.(Opcional) Guardado — con
-so-oel inventario se escribe en JSON para su reutilización posterior.Búsqueda de PSS — detecta el PSS en ejecución explorando
/procy leepss.jsonpara obtener el puerto de administración (43971si la configuración no lo contiene);--pss-base http://host:portomite la detección automática.Confirmación de la correspondencia — un diálogo interactivo pregunta cómo asociar cada servicio capturado con un alimentador SPTS existente;
--non-interactiveacepta las propuestas y termina si hay conflicto;--target-mpts <id>omite la petición de selección del MPTS.Reanudación automática de los alimentadores — para cada SPTS / muxer-output asociado, la utilidad envía
{"pause":false}si el alimentador estaba en pausa, de modo que el multiplexor reciba datos realmente tras la aplicación.Ajuste automático de la tasa de bits — si
captured_bitrate × (1 + headroom%)supera elmpegts-output-bitratedel MPTS de destino, la utilidad eleva ese límite en PSS con un único POST (con redondeo al alza al múltiplo de 1000 kbps más próximo). Se desactiva con--no-bitrate-adjust.Planificación — compara el inventario con el árbol
/config/streamactual de PSS y prepara peticiones HTTP POST solo para los campos que difieren. El remapeo de PID de ES se genera como pares de identidad (mpegts-pid-old≡mpegts-pid-new) para que la salida multiplexada conserve sin cambios cada PID original — incluidos PCR, vídeo, audio, teletexto, SCTE-35 y DSM-CC. En PSS 2.0.0.193 y posteriores, el plan habilita además el modo de conservación de los PID originales en la entrada del multiplexor de destino y fija el orden de programas en la PAT (véase Qué se migra).Aplicación — envía las peticiones POST planificadas y a continuación conmuta el MPTS pause/unpause para que PSS relea la configuración; con
--dry-runel plan solo se imprime.Verificación (activada por defecto, incluso si el plan está vacío) — captura el MPTS resultante a través de una de las salidas UDP de PSS y lo compara con el destino; las discrepancias críticas (TSID, ONID, service_id, name, type, LCN) → código de salida 5.
Volver a ejecutar toda la cadena es idempotente: la segunda pasada informa no changes needed si PSS ya coincide con el inventario, y la verificación lo confirma con una captura nueva.
Opciones de la CLI¶
Selección de modo¶
Opción |
Descripción |
Predeterminado |
|---|---|---|
|
Ruta al JSON de migración (se usa como importación por defecto en ausencia de |
|
|
Guardar el inventario capturado en el archivo de migración (se combina con una entrada de flujo; la aplicación se realiza igualmente) |
— |
|
Solo captura: escritura en archivo, sin aplicar |
— |
|
Solo aplicación: carga del archivo, sin captura |
— |
Captura¶
Opción |
Descripción |
Predeterminado |
|---|---|---|
|
Duración máxima de la captura |
|
|
Sugerencia de tasa de bits del TS para la regulación de ritmo en modo archivo |
|
Apply / Verify¶
Opción |
Descripción |
Predeterminado |
|---|---|---|
|
Omitir la petición de selección del MPTS; aplicar a este flujo id en PSS |
— |
|
Aceptar automáticamente las propuestas del diálogo; terminar si hay conflicto |
— |
|
Imprimir el plan de POST sin enviar nada |
— |
|
Anular la detección automática de PSS (por ejemplo, |
automático |
|
Omitir la captura y el diff posteriores a la aplicación |
verificación activada |
|
Ventana de captura para la verificación |
|
|
No elevar |
elevación activada |
|
Margen de tasa de bits por encima del valor medido al ajustar |
|
Varios¶
Opción |
Descripción |
|---|---|
|
Registro detallado (cada HTTP POST y cada rama del diálogo) |
|
Mostrar la ayuda y salir |
Archivo de migración (migrate.json)¶
JSON legible por humanos con format_version: 1. La ubicación por defecto es ./migrate.json; se anula con -f. Ejemplo de estructura:
{
"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" }
]
}
]
}
El archivo puede editarse antes de una nueva aplicación: renombrar servicios, cambiar los LCN, cambiar service_type, ajustar network_name — mpts_migrate -i migrate.json envía solo los campos modificados.
Conexión con PSS¶
Detección automática: exploración de
/proc/<pid>/commen busca depss, lectura de su archivo--configy toma deweb-server.bind-port(43971si la clave no está presente).Manualmente:
--pss-base http://host:portomite por completo la detección automática. Resulta útil para un PSS remoto o cuando--dry-rundebe generar el plan sin un PSS activo.La API REST de administración no requiere autenticación en
localhost.
Verificación¶
Si --no-verify no se especifica (comportamiento por defecto), tras aplicar el plan la utilidad:
Busca una salida UDP hacia localhost en el MPTS de destino o añade una temporalmente en
127.0.0.1:<auto>(con la marcaadded by mpts_migrate for verification).Captura el MPTS en vivo a través de esa salida durante
--verify-timesegundos (10 por defecto).Compara el inventario capturado con el destino:
Discrepancia crítica (TSID, ONID, network name, service_id, name, type, LCN) → código de salida 5.
Discrepancia leve (PMT PID, número de ES, nombre del proveedor, orden de programas en la PAT) → se muestra como advertencia, código de salida 0.
Si el MPTS de destino está sobrecargado (tasa de bits de salida ≥ el
mpegts-output-bitrateconfigurado), se imprimeWARNING: target MPTS is overloaded— véase Bitrate adjust más abajo.
Dry-run¶
--dry-run imprime cada petición HTTP que la utilidad enviaría (ruta y cuerpo JSON), pero no envía ninguna. Resulta útil para:
Revisar el plan con el operador antes de confirmarlo.
Generar conjuntos de cambios reproducibles en CI / gestión de cambios.
Trabajar cuando PSS no está accesible (combinar con
--pss-base http://host:port).
El dry-run no ejecuta la verificación.
Bitrate adjust¶
Por defecto, si captured_bitrate × (1 + headroom%) supera el mpegts-output-bitrate del MPTS de destino, la utilidad eleva ese límite en PSS antes de aplicar los cambios de SI/PSI. Sin un margen suficiente, un MPTS sobrecargado pierde los datos de baja prioridad — los síntomas típicos son cortes de audio en los servicios de radio y errores CRC intermitentes en la EIT. Se desactiva con --no-bitrate-adjust; el margen se regula con --bitrate-headroom <pct> (15 por defecto).
Códigos de salida¶
Código |
Significado |
|---|---|
|
Éxito — la aplicación y (si está activada) la verificación han finalizado sin incidencias. También lo devuelve un |
|
Error de argumentos / de archivo / de detección |
|
No se ha encontrado ninguna PAT en el origen — la entrada no es un MPEG-TS válido o la ventana de captura es demasiado corta; también se devuelve cuando el operador ha rechazado la confirmación de la correspondencia o ha salido del diálogo (aplicación abortada) |
|
Una o varias peticiones HTTP POST de la aplicación han fallado |
|
La aplicación se ha completado, pero el MPTS de destino no ha vuelto al estado Running |
|
La verificación ha fallado — el flujo capturado difiere del destino en campos críticos |
Limitaciones y escollos¶
PSS debe disponer de antemano del MPTS de destino y de los alimentadores: la utilidad no crea flujos nuevos. El MPTS de destino y al menos tantos alimentadores SPTS como servicios haya en el inventario deben existir de antemano; los servicios sin alimentador libre se omiten en el diálogo.
El MPTS de origen debe estar accesible durante la captura (modos 1, 2, save+apply): la URL indicada como argumento posicional
<input>debe entregar un flujo MPEG-TS; para multicast UDP, IGMP / el cortafuegos deben permitirlo.El remapeo de PID de ES se aplica automáticamente: para cada servicio se genera un remapeo de identidad (
mpegts-pid-old≡mpegts-pid-new) para cada PID de PCR/vídeo/audio/teletexto/datos, de modo que la salida multiplexada conserve los PID originales byte-exact. La disposición de la PMT permanece estable de una migración a otra — incluso los receptores antiguos (STB anteriores a 2015, Samsung anteriores a la serie H, LG anteriores a WebOS 3.0) que almacenan los PID en caché no requieren una nueva exploración.El descriptor de entrega debe corresponder al portador real para los receptores que se resintonizan mediante la NIT (DVB-T/T2/C/S). Un bloque
deliveryque no coincida puede llevar al receptor a una frecuencia incorrecta.La coherencia de los LCN entre el MPTS principal y el de reserva es crítica para el failover — si difieren, las posiciones de los canales en la lista del receptor se desplazarán tras la conmutación.
El provider name en PSS es común a todo el múltiplex (un único
sdt-provider-namepor muxer-input del MPTS). La utilidad lo aplica automáticamente si todos los servicios capturados tienen el mismo valor; si distintos servicios llevan valores deprovider_namediferentes, se imprime una advertencia y el campo queda intacto — la decisión corresponde al operador.No es una herramienta de configuración de PSS:
mpts_migratesolo toca los campos de identidad SI/PSI, el indicadorpausede cada alimentador, (opcionalmente)mpegts-output-bitratey, en PSS 2.0.0.193 y posteriores, las claves del modo de conservación de PID y del orden de programas. No configura codificadores, entradas, cifrado, programaciones ni similares.En PSS anteriores a 2.0.0.193 no se admiten el modo de conservación de los PID originales del multiplexor ni el orden de programas en la PAT: la utilidad imprime una advertencia, los PID se fijan únicamente mediante los pares de identidad y el orden de programas tras la migración puede diferir del original.
Diagnóstico¶
Síntoma |
Causa probable / solución |
|---|---|
|
el origen no es MPEG-TS, IGMP/el cortafuegos bloquea el multicast o |
|
utilizar |
La aplicación se ha completado, pero el MPTS sigue en pausa |
revisar el registro de PSS; volver a ejecutar con |
La verificación indica una discrepancia crítica |
comparar el destino y el flujo capturado en JSON; normalmente un alimentador se ha asociado por error al servicio equivocado en el diálogo |
|
elevar |