---
title: MPTS Migrate Perfect Streamer Toolkit v1.1 — migración de la identidad MPTS
url: https://doc2.pstreamer.tv/es/manual/toolkit/mpts_migrate.html
lang: es
product: Perfect Streamer
version: 2.0.2.362
---

# MPTS Migrate Perfect Streamer Toolkit v1.1 — migración de la identidad MPTS

Parte del **Perfect Streamer Toolkit** — [https://pstreamer.tv](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 busca `pss` en `/proc` y lee `pss.json` para obtener el puerto de administración (`43971` si 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-name` comú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/NIT
- **Por 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-schedule
- **Flujos elementales**: los PID (se aplica un `identity remap` — véase *Limitaciones*), tipos de flujo, etiquetas de idioma
- **Acceso 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, ajustar `service_type`) y nueva aplicación
- **Comprobación en dry-run**: impresión de cada HTTP POST que *se enviaría*, sin afectar a PSS

## Inicio rápido

```bash
# 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

1. **Captura** — la utilidad abre el flujo, analiza PAT / PMT / SDT / NIT / EIT durante `-t` segundos (30 por defecto) y construye el inventario; se mide la tasa de bits total del flujo.
2. **(Opcional) Guardado** — con `-s` o `-o` el inventario se escribe en JSON para su reutilización posterior.
3. **Búsqueda de PSS** — detecta el PSS en ejecución explorando `/proc` y lee `pss.json` para obtener el puerto de administración (`43971` si la configuración no lo contiene); `--pss-base http://host:port` omite la detección automática.
4. **Confirmación de la correspondencia** — un diálogo interactivo pregunta cómo asociar cada servicio capturado con un alimentador SPTS existente; `--non-interactive` acepta las propuestas y termina si hay conflicto; `--target-mpts <id>` omite la petición de selección del MPTS.
5. **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.
6. **Ajuste automático de la tasa de bits** — si `captured_bitrate × (1 + headroom%)` supera el `mpegts-output-bitrate` del 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`.
7. **Planificación** — compara el inventario con el árbol `/config/stream` actual 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*).
8. **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-run` el plan solo se imprime.
9. **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 |
| --- | --- | --- |
| `-f, --file <path>` | Ruta al JSON de migración (se usa como importación por defecto en ausencia de `-i` y como destino de guardado con `-s`) | `./migrate.json` |
| `-s, --save` | Guardar el inventario capturado en el archivo de migración (se combina con una entrada de flujo; la aplicación se realiza igualmente) | — |
| `-o, --output <file>` | Solo captura: escritura en archivo, sin aplicar | — |
| `-i, --input <file>` | Solo aplicación: carga del archivo, sin captura | — |

### Captura

| Opción | Descripción | Predeterminado |
| --- | --- | --- |
| `-t, --time <sec>` | Duración máxima de la captura | `30` |
| `-b, --bitrate <Mbps>` | Sugerencia de tasa de bits del TS para la regulación de ritmo en modo archivo | `38.8` |

### Apply / Verify

| Opción | Descripción | Predeterminado |
| --- | --- | --- |
| `--target-mpts <id>` | Omitir la petición de selección del MPTS; aplicar a este flujo id en PSS | — |
| `--non-interactive` | Aceptar automáticamente las propuestas del diálogo; terminar si hay conflicto | — |
| `--dry-run` | Imprimir el plan de POST sin enviar nada | — |
| `--pss-base <url>` | Anular la detección automática de PSS (por ejemplo, `http://host:8808`) | automático |
| `--no-verify` | Omitir la captura y el diff posteriores a la aplicación | verificación activada |
| `--verify-time <s>` | Ventana de captura para la verificación | `10` |
| `--no-bitrate-adjust` | No elevar `mpegts-output-bitrate` en el MPTS de destino | elevación activada |
| `--bitrate-headroom <pct>` | Margen de tasa de bits por encima del valor medido al ajustar | `15` |

### Varios

| Opción | Descripción |
| --- | --- |
| `-v, --verbose` | Registro detallado (cada HTTP POST y cada rama del diálogo) |
| `-h, --help` | 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:

```json
{
  "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>/comm` en busca de `pss`, lectura de su archivo `--config` y toma de `web-server.bind-port` (`43971` si la clave no está presente).
- **Manualmente**: `--pss-base http://host:port` omite por completo la detección automática. Resulta útil para un PSS remoto o cuando `--dry-run` debe 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:

1. Busca una salida UDP hacia localhost en el MPTS de destino o añade una temporalmente en `127.0.0.1:<auto>` (con la marca `added by mpts_migrate for verification`).
2. Captura el MPTS en vivo a través de esa salida durante `--verify-time` segundos (10 por defecto).
3. 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.
4. Si el MPTS de destino está sobrecargado (tasa de bits de salida ≥ el `mpegts-output-bitrate` configurado), se imprime `WARNING: 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 |
| --- | --- |
| `0` | Éxito — la aplicación y (si está activada) la verificación han finalizado sin incidencias. También lo devuelve un `--dry-run` correcto. |
| `1` | Error de argumentos / de archivo / de detección |
| `2` | 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) |
| `3` | Una o varias peticiones HTTP POST de la aplicación han fallado |
| `4` | La aplicación se ha completado, pero el MPTS de destino no ha vuelto al estado *Running* |
| `5` | 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 `delivery` que 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-name` por muxer-input del MPTS). La utilidad lo aplica automáticamente si todos los servicios capturados tienen el mismo valor; si distintos servicios llevan valores de `provider_name` diferentes, 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_migrate` solo toca los campos de identidad SI/PSI, el indicador `pause` de cada alimentador, (opcionalmente) `mpegts-output-bitrate` y, 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 |
| --- | --- |
| `Error: no PAT seen in stream` | el origen no es MPEG-TS, IGMP/el cortafuegos bloquea el multicast o `-t` es demasiado corto |
| `Error: cannot reach PSS` | utilizar `--pss-base http://host:port` para omitir la detección automática |
| La aplicación se ha completado, pero el MPTS sigue en pausa | revisar el registro de PSS; volver a ejecutar con `-v` para ver el plan completo de POST |
| 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 |
| `WARNING: target MPTS is overloaded` | elevar `mpegts-output-bitrate` en PSS o usar `--bitrate-headroom <higher %>`; sin margen se corrompen el audio de los servicios de radio y las tablas PSI |
