MPTS Migrate Perfect Streamer Toolkit v1.0 — migração de identidade MPTS¶
Parte do Perfect Streamer Toolkit — https://pstreamer.tv
Captura a identidade DVB SI/PSI de um fluxo MPEG-TS multiprograma (MPTS) em funcionamento e a reproduz em uma instância do Perfect Streamer (PSS) no mesmo host. Resultado: os receptores de usuários (STB / TV) continuam funcionando sem nova varredura de canais após a migração ou a comutação para reserva.
Pré-requisitos¶
Antes de executar a utilidade, certifique-se de que:
PSS está em execução no mesmo host (ou em host acessível via
--pss-base). A utilidade procurapssem/proce lêpss.jsonpara obter a porta de admin (padrão43971).Fonte MPTS acessível, se planejada a captura (modos 1, 2, save+apply): a URL passada como argumento posicional
<input>deve entregar um fluxo MPEG-TS. Para UDP multicast — IGMP / firewall devem permitir a recepção; para arquivos — o caminho deve existir.MPTS de destino já configurado no PSS: a utilidade não cria novos fluxos. Um objeto MPTS e ao menos tantos feeders SPTS quantos serviços houver no inventário devem existir previamente. Serviços sem feeder disponível são exibidos no diálogo e podem ser pulados.
A API HTTP admin está aberta no localhost para ler
/data/stream(usado pelo verify) e gravar em/config/stream(apply).
O que é migrado¶
Todos os identificadores visíveis para o receptor no nível do fluxo de transporte e dos serviços:
Transport stream: TSID, ONID, network ID, network name, provider name (aplicado como
sdt-provider-nameválido para todo o mux quando todos os serviços de origem compartilham o mesmo valor), descritor de delivery (parâmetros de transmissão terrestre/cabo/satélite), versões de PAT/SDT/NITPor serviço:
service_id,pmt_pid,pcr_pid,service_type, nome do serviço, LCN, free-CA, EIT-present / EIT-scheduleFluxos elementares: PIDs (identity remap aplicado — ver Limitações), tipos de fluxo, tags de idioma
Acesso condicional: descritores CA no nível do programa e do ES
Nomes de serviços/provedores em codificações DVB não ASCII (por exemplo, ISO-8859-5 para cirílico) são decodificados em UTF-8 automaticamente.
O ES PID remap por serviço é construído como pares de identidade (mpegts-pid-old ≡ mpegts-pid-new) para cada PCR / video / audio / teletext / data PID, de modo que a saída multiplexada resultante mantém os PIDs originais byte-exact. Receptores legados que cacheiam o PMT após a primeira varredura continuam funcionando sem reconfiguração.
Casos de uso¶
Failover: troca dos decoders do MPTS principal para o de backup mantendo os canais no receptor
Migração de hardware: mudança de um multiplex ativo de um host PSS para outro sem instruções para os espectadores
Snapshot pré/pós atualização: capturar o multiplex antes do upgrade do PSS e reaplicá-lo após, garantindo SI/PSI bit-idênticos
Edição manual e reaplicação: capturar, editar
migrate.json(renomear serviços, mudar LCN, ajustarservice_type) e aplicar de novoVerificação dry-run: imprime cada HTTP POST que seria enviado, sem afetar o PSS
Início rápido¶
# Захват из 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
Fluxo de trabalho¶
Captura — a utilidade abre o fluxo, faz o parse de PAT / PMT / SDT / NIT / EIT por
-tsegundos (padrão 30) e monta o inventário; o bitrate total é medido.(Opcional) Salvar — com
-sou-oo inventário é gravado em JSON para reutilização posterior.Descoberta do PSS — encontra um PSS em execução varrendo
/proce lêpss.jsonpara obter a porta de admin (padrão43971);--pss-base http://host:portignora o autodescobrimento.Confirmação do mapeamento — um diálogo interativo pergunta como mapear cada serviço capturado a um feeder SPTS existente;
--non-interactiveaceita as sugestões e encerra em caso de conflito;--target-mpts <id>pula a etapa de seleção do MPTS.Auto-despausar feeders — para cada SPTS/muxer-output mapeado, o utilitário envia
{"pause":false}se estava em pausa, para que o multiplexador realmente receba dados após o apply.Ajuste automático do bitrate — se
captured_bitrate × (1 + headroom%)excedermpegts-output-bitratedo MPTS de destino, a utilidade aumenta esse limite no PSS por um único POST (arredondado para cima até o múltiplo mais próximo de 1000 kbps). Desativável por--no-bitrate-adjust.Planejamento — compara o inventário com a árvore atual de
/config/streamno PSS e prepara HTTP POSTs apenas para os campos que diferem. O ES PID remap é gerado como pares de identidade (mpegts-pid-old≡mpegts-pid-new) para que a saída multiplexada mantenha cada PID de origem inalterado — incluindo PCR, video, audio, teletext, SCTE-35, DSM-CC.Apply — envia os POSTs planejados e em seguida alterna pause/unpause do MPTS para que o PSS releia a configuração; com
--dry-runo plano apenas é impresso.Verify (ativado por padrão, mesmo se o plano estiver vazio) — captura o MPTS resultante por uma das saídas UDP do PSS e compara com o objetivo; divergências críticas (TSID, ONID, service_id, name, type, LCN) → exit 5.
Reexecutar todo o pipeline é idempotente: a segunda execução reporta no changes needed se o PSS já corresponde ao inventário, e o verify confirma com nova captura.
Opções CLI¶
Seleção de modo¶
Opção |
Descrição |
Padrão |
|---|---|---|
|
Caminho do JSON de migração (importação padrão sem |
|
|
Salvar o inventário capturado no arquivo de migração (combina com entrada por fluxo; o apply é executado mesmo assim) |
— |
|
Apenas captura: escrever em arquivo, sem apply |
— |
|
Apenas apply: carregar arquivo, sem captura |
— |
Captura¶
Opção |
Descrição |
Padrão |
|---|---|---|
|
Duração máxima de captura |
|
|
Dica de bitrate TS para o pacing no modo de arquivo |
|
Apply / Verify¶
Opção |
Descrição |
Padrão |
|---|---|---|
|
Pular a seleção do MPTS; aplicar a este stream id no PSS |
— |
|
Aceitar automaticamente as sugestões do diálogo; abortar em caso de conflito |
— |
|
Imprimir o plano de POSTs, sem enviar nada |
— |
|
Sobrescrever o autodescobrimento do PSS (ex. |
auto |
|
Pular a captura pós-apply e o diff |
verify habilitado |
|
Janela de captura para verificação |
|
|
Não elevar |
ajuste habilitado |
|
Margem de bitrate acima do valor medido ao ajustar |
|
Outros¶
Opção |
Descrição |
|---|---|
|
Log detalhado (cada HTTP POST e ramo do diálogo) |
|
Mostrar ajuda e sair |
Arquivo de migração (migrate.json)¶
JSON legível por humanos com format_version: 1. Localização padrão ./migrate.json; substituída via -f. Exemplo de estrutura:
{
"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" }
]
}
]
}
O arquivo pode ser editado antes de novo apply: renomear serviços, alterar LCN, inverter service_type, ajustar network_name — mpts_migrate -i migrate.json enviará apenas os campos alterados.
Conexão ao PSS¶
Autodescobrimento: varrer
/proc/<pid>/commporpss, ler seu arquivo--confige usarweb-server.bind-port(padrão43971).Manual:
--pss-base http://host:portignora totalmente o autodescobrimento. Útil para PSS remoto ou quando--dry-runprecisa gerar um plano sem PSS ativo.A API REST de admin não requer autenticação em
localhost.
Verificação¶
Se --no-verify não for indicado (padrão), após aplicar o plano a utilidade:
Procura uma saída UDP em localhost no MPTS de destino ou adiciona temporariamente uma em
127.0.0.1:<auto>com a marcaadded by mpts_migrate for verification.Captura o MPTS ao vivo por essa saída durante
--verify-timesegundos (padrão 10).Compara o inventário capturado com o objetivo: - Divergência crítica (TSID, ONID, service_id, name, type, LCN) → código de saída 5. - Divergência branda (PMT PID, PCR PID, ES PID) → impressa como warning, código de saída 0.
Se o MPTS de destino estiver sobrecarregado (bitrate de saída ≥
mpegts-output-bitrateconfigurado), é impressoWARNING: target MPTS is overloaded— veja Bitrate adjust abaixo.
Dry-run¶
--dry-run imprime cada requisição HTTP que a utilidade enviaria (path, corpo JSON), sem enviar nenhuma. Útil para:
Revisão do plano com o operador antes do commit.
Geração de conjuntos de mudanças reproduzíveis em CI / change-management.
Trabalho com PSS indisponível (combinar com
--pss-base http://host:port).
O dry-run não executa a verificação.
Bitrate adjust¶
Por padrão, se captured_bitrate × (1 + headroom%) exceder mpegts-output-bitrate do MPTS de destino, a utilidade aumenta esse limite no PSS antes de aplicar as alterações de SI/PSI. Sem reserva suficiente, um MPTS sobrecarregado descarta dados de baixa prioridade — sintomas típicos: perda de áudio em serviços de rádio, erros intermitentes de CRC do EIT. Desativável por --no-bitrate-adjust; a reserva é regulada por --bitrate-headroom <pct> (padrão 15).
Códigos de saída¶
Código |
Valor |
|---|---|
|
Sucesso — apply e (se habilitada) verificação correram bem. Também retornado por um |
|
Erro de argumentos / arquivo / detecção |
|
Nenhuma PAT encontrada na fonte — a entrada não é um MPEG-TS válido ou a janela de captura é muito curta |
|
Um ou mais HTTP POSTs do apply falharam |
|
Apply foi bem-sucedido, mas o MPTS de destino não voltou ao estado Running |
|
Verificação falhou — o fluxo capturado difere da meta em campos críticos |
Limitações e armadilhas¶
O PSS deve já hospedar o MPTS de destino e os feeders: a utilidade não cria novos fluxos. O MPTS de destino e ao menos tantos feeders SPTS quantos serviços houver no inventário devem existir previamente; serviços sem feeder disponível são pulados no diálogo.
A fonte MPTS deve estar acessível durante a captura (modos 1, 2, save+apply): a URL passada como argumento posicional
<input>deve entregar um fluxo MPEG-TS; para UDP multicast, IGMP / firewall devem permitir a recepção.O ES PID remap é aplicado automaticamente: o remap de identidade por serviço (
mpegts-pid-old≡mpegts-pid-new) é gerado para cada PCR/video/audio/teletext/data PID para que a saída multiplexada preserve os PIDs originais byte-exact. O layout PMT permanece estável entre migrações — mesmo receptores legados (STBs anteriores a 2015, Samsung anteriores à série H, LG anteriores ao WebOS 3.0) que cacheiam PIDs não exigem nova varredura.O descritor de delivery deve corresponder à portadora real para receptores que se reconfiguram via NIT (DVB-T/T2/C/S). Um bloco
deliveryincompatível pode levar o receptor a uma frequência incorreta.Consistência de LCN entre o MPTS principal e o de backup é crítica para failover — se diferirem, as posições de canais no receptor mudarão após a comutação.
Provider name no PSS é comum a todo o multiplex (um único
sdt-provider-nameno muxer-input MPTS). A utilidade o aplica automaticamente quando todos os serviços capturados compartilham o mesmo valor; se serviços diferentes tiverem valoresprovider_namedistintos, é impresso um warning e o campo permanece intocado — a decisão fica a cargo do operador.Não é uma ferramenta de configuração do PSS:
mpts_migratetoca apenas nos campos de identidade SI/PSI, na flagpauseem cada feeder e (opcionalmente) emmpegts-output-bitrate. Encoders, inputs, criptografia, agendamento etc. ele não configura.
Diagnóstico¶
Sintoma |
Causa provável / solução |
|---|---|
|
a origem não é MPEG-TS, IGMP/firewall bloqueia o multicast ou |
|
usar |
Apply foi bem-sucedido, mas o MPTS permanece em pausa |
verificar o log do PSS; reiniciar com |
A verificação mostra divergência crítica |
comparar goal vs capture no JSON; normalmente um feeder está mapeado por engano para o serviço errado no diálogo |
|
aumentar |