---
title: TS Analyze Perfect Streamer Toolkit v2.3 — TR 101 290
url: https://doc2.pstreamer.tv/pt/manual/toolkit/ts_analyze.html
lang: pt-BR
product: Perfect Streamer
version: 2.0.2.362
---

# TS Analyze Perfect Streamer Toolkit v2.3 — TR 101 290

Parte do **Perfect Streamer Toolkit** — [https://pstreamer.tv](https://pstreamer.tv)

**Analisador de fluxo de transporte MPEG-TS** de linha de comando, com verificação de conformidade com **ETSI TR 101 290 V1.4.1** e validação do modelo de buffers T-STD da **ISO/IEC 13818-1**.

Lê **UDP multicast/unicast** ou **arquivos TS**, detecta automaticamente os PCR PID por meio de PAT/PMT e imprime um relatório detalhado ou resumido em stdout.

A ferramenta faz parte do pacote **pstreamer** e, após a instalação, encontra-se em `/opt/pss/tools/ts_analyze` — não é necessário instalar nada separadamente.

## O que é verificado

O analisador percorre cada pacote TS e informa as violações:

- **Priority 1** (decodificabilidade do TS): sincronismo TS, perda de sincronismo, presença e CRC de PAT/PMT, contador de continuidade, presença de PID
- **Priority 2** (monitoramento recomendado): indicador de erro de transporte, erros de CRC, repetição / precisão / descontinuidades do PCR, intervalo de PTS, presença de CAT
- **Priority 3** (monitoramento estendido): intervalos de NIT/SDT/EIT/TDT, PID não referenciados, transbordamento / esvaziamento dos buffers T-STD

Adicionalmente, informa:

- **Precisão do PCR** até ±500 ns — regressão sobre as posições de byte
- **Deriva do PCR** em ppm (somente no modo live)
- **Modelo de buffers T-STD** para cada fluxo elementar (modo live)
- Validação dos **tamanhos das seções SI** em relação aos limites ISO/EN, com avisos de compatibilidade EIT-on-STB (>1024 B)
- **UDP IAT** (inter-arrival time) — estatísticas de jitter no nível dos datagramas (somente no modo live)

## Utilização

```
ts_analyze [options] <input>
```

### Entradas

| Forma | Descrição |
| --- | --- |
| `udp://239.1.1.1:1234` | UDP multicast |
| `udp://eth0@239.1.1.1:1234` | UDP multicast na interface especificada |
| `udp://192.168.1.100:1234` | UDP unicast |
| `udp://lo@127.0.0.1:12655` | UDP unicast em loopback (fonte de teste) |
| `/path/to/file.ts` | Arquivo TS local |

O encapsulamento RTP sobre UDP é detectado e desempacotado automaticamente.

### Opções

| Opção | Descrição | Padrão |
| --- | --- | --- |
| `-t, --time <sec>` | Duração da análise em segundos | `30` |
| `-s, --short` | Relatório-resumo final | – |
| `-f, --full` | Relatório completo detalhado | sim |
| `-b, --bitrate <Mbps>` | Sugestão de taxa de bits do TS para o modo de arquivo | `38.8` |
| `-p, --pcr-pid <pid>` | Analisar somente o PCR PID indicado (decimal ou `0xHHHH`) | automático |
| `-l, --pcr-limit <ms>` | Limite de erro de repetição do PCR em ms | `40` |
| `--no-eit` | Ignorar a análise de EIT — P3.7..P3.10 são exibidos como `N/A`, a contribuição do EIT para P2.2 / para o total dos tamanhos das seções é excluída | EIT ativado |
| `--no-nit` | Ignorar a análise de NIT — P3.1, P3.2 são exibidos como `N/A`, a contribuição do NIT para P2.2 / para o total dos tamanhos das seções é excluída | NIT ativado |
| `--no-color` | Desativar as cores ANSI na saída | cores ativadas |
| `--xml` | XML estruturado em stdout (sem stderr) | texto |
| `-h, --help` | Exibir a ajuda | – |

### Exemplos

```bash
# 30-second TR 101 290 check on a multicast stream
ts_analyze -t 30 udp://239.10.10.1:1234

# short summary, save to log (no color)
ts_analyze -s --no-color -t 60 udp://239.10.10.1:1234 > report.txt

# analyze a TS file
ts_analyze -t 30 recording.ts

# analyze only a single PCR PID
ts_analyze -p 0x0100 -t 30 udp://239.10.10.1:1234

# machine-readable XML for CI / monitoring
ts_analyze --xml -t 30 udp://239.10.10.1:1234 > result.xml

# skip EIT/NIT analysis (e.g. for streams where they are intentionally absent)
ts_analyze --no-eit --no-nit -t 30 udp://239.10.10.1:1234
```

### Desativação da análise de EIT ou NIT

Em alguns fluxos, o EIT ou o NIT estão ausentes de forma intencional (redes fechadas, fontes laboratoriais, entrega exclusivamente OTT etc.). As verificações P3 correspondentes da TR 101 290 resultarão sempre em FAIL no critério final OVERALL — o que é apenas ruído.

Utilize `--no-eit` e/ou `--no-nit` para excluir essas verificações:

| Sinalizador | Verificações ignoradas | Efeitos colaterais |
| --- | --- | --- |
| `--no-eit` | P3.7 (EIT actual P/F), P3.8 (EIT other P/F), P3.9 (EIT actual schedule), P3.10 (EIT other schedule) | As seções EIT não são coletadas, portanto a sua contribuição para P2.2 (CRC) e para o resumo dos tamanhos das seções SI é nula. O aviso de compatibilidade EIT-on-STB é suprimido. |
| `--no-nit` | P3.1 (NIT actual), P3.2 (NIT other) | As seções NIT não são coletadas, portanto a sua contribuição para P2.2 (CRC) e para o resumo dos tamanhos das seções SI é nula. |

As verificações ignoradas aparecem no relatório como `N/A` com a marcação `disabled (--no-eit)` / `disabled (--no-nit)` e, no XML, como `applicable="false" result="N/A"`. No relatório resumido, em vez do contador de erros, é exibido `NIT=off` / `EIT=off`.

Os sinalizadores afetam apenas o processamento de EIT (PID `0x0012`) e NIT (PID `0x0010`) — todas as demais verificações da TR 101 290 (P1.x, P2.x, SDT, TDT, CAT, T-STD, deriva do PCR, IAT) são executadas normalmente.

### Modo de saída XML (`--xml`)

`--xml` faz o analisador emitir um único documento XML UTF-8 autocontido em **stdout**. Todas as informações auxiliares (o banner, `Stream locked`, `PCR PIDs discovered`, o progresso a cada segundo, o resumo da captura, os avisos de duração curta) são suprimidas; o **stderr permanece vazio**, a menos que ocorra uma falha real (não foi possível abrir a entrada, ausência de dados de PCR, fluxo demasiado curto, interrupção por sinal). As cores ANSI são desativadas de forma forçada.

O código de saída é o mesmo do modo texto: `0` para OVERALL=PASS, `65` para OVERALL=FAIL, além dos códigos padrão de erro / sinal (1, 2, 3, 130, 143).

Estrutura XML de nível superior:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<ts_analyze version="2.3">
  <source>udp://239.1.1.1:5000</source>
  <timestamp>2026-04-30T12:00:00+0300</timestamp>
  <duration_s>30.00</duration_s>
  <packets total="..." null="..."/>
  <ts_bitrate_mbps>20.012</ts_bitrate_mbps>

  <programs>
    <program number="1" pmt_pid="0x0100" pcr_pid="0x0101">
      <es pid="0x0101" stream_type="0x1b" name="H.264/AVC"/>
      <es pid="0x0102" stream_type="0x03" name="MPEG-2 Audio"/>
    </program>
  </programs>

  <tr101290>
    <check id="1.1" name="TS Sync Byte Error" applicable="true" errors="0" result="PASS"/>
    ...
    <check id="2.3" name="PCR Repetition Error"
           applicable="true" errors="0" result="PASS" soft_violations="3"/>
    ...
    <check id="3.4" name="Unreferenced PIDs" applicable="true" count="2" result="INFO"/>
    ...
  </tr101290>

  <si_section_size oversize_total="0" eit_stb_warn_total="12">
    <table name="EIT_actual_pf" max_bytes="1380" std_limit="4096"
           oversize="0" eit_stb_warn="12" result="WARN_STB"/>
    ...
  </si_section_size>

  <iat datagrams="33252" intervals="33251" min_ms="0.002" max_ms="5.009"
       avg_ms="0.150" stddev_ms="0.295" p95_ms="0.872" p99_ms="1.076"
       max_jitter_ms="4.272" gap_threshold_ms="100.0" gaps_over_threshold="0"/>

  <pcr_pids>
    <pcr_pid value="0x0101" sid="1" pcr_count="1500" discontinuities="0"
             estimated_bitrate_mbps="18.750">
      <interval samples="1499" min_ms="19.812" max_ms="20.195"
                avg_ms="20.001" p95_ms="20.102"
                iso_hard_violations="0" tr_soft_violations="0"
                rec_violations="0" result="PASS"/>
      <accuracy samples="1499" min_ns="-148.3" max_ns="201.7" abs_max_ns="201.7"
                avg_ns="2.1" stddev_ns="45.6" p95_ns="102.3"
                violations="0" result="PASS"/>
      <drift measured="true" ppm="0.618" limit_ppm="30"
             verdict_mode="informational" result="PASS"/>
      <tstd overflows="0" underflows="0" max_fill_bytes="34218" result="PASS">
        <es_buffer es_pid="0x0101" stream_type="0x1b"
                   capacity_bytes="3000000" measuring="true"
                   es_bitrate_mbps="15.200" max_fill_bytes="34218"
                   overflows="0" underflows="0"/>
      </tstd>
    </pcr_pid>
  </pcr_pids>

  <unreferenced_pids count="2">
    <pid value="0x01ff"/>
    <pid value="0x0200"/>
  </unreferenced_pids>

  <overall result="PASS"/>
</ts_analyze>
```

Convenções principais:

- Todos os PID são formatados como `0xHHHH` (hex de 4 dígitos com o prefixo `0x`).
- O atributo `result` assume os valores `PASS` / `FAIL` / `WARN` / `N/A` / `INFO` / `SKIP` / `ok` / `WARN_STB`.
- Para as verificações não aplicáveis (modo de arquivo, ausência de embaralhamento etc.), o elemento continua presente, com `applicable="false"` e `result="N/A"`, para que os consumidores do esquema vejam uma forma estável.
- `<drift>` traz `verdict_mode="informational"` para `30 s ≤ T < 300 s` e `verdict_mode="hard"` para `T ≥ 300 s`; `result="SKIP"` para execuções com menos de 30 s.
- `<iat>` está ausente nas execuções em modo de arquivo.
- `<overall>` reflete o mesmo critério final que a linha OVERALL do relatório em texto e coincide com o código de saída do processo.

A saída é um XML bem formado (well-formed), validado por `xmllint --noout`; envie-a diretamente a XSLT, ao `lxml` do Python etc., sem adaptações de parsing.

## Leitura do relatório

### Cores dos estados

| Estado | Cor | Significado |
| --- | --- | --- |
| `PASS` / `ok` | verde | A verificação está em conformidade com a norma |
| `WARN` / `WARNING` / `WARN(STB)` | amarelo | Violação leve, não afeta o OVERALL |
| `FAIL` / `ERROR` | vermelho | Violação da norma, afeta o OVERALL |
| `INFO` / `NOTE` / `N/A` | padrão | Apenas informativo |

Utilize `--no-color` ao redirecionar para arquivos de log ou para terminais não ANSI.

### Duração mínima da análise

| Duração | Cobertura | Código de saída |
| --- | --- | --- |
| **< 2 s** | Insuficiente — a análise é rejeitada | **3** (erro) |
| **2–10 s** | P1 + P2 são confiáveis; algumas verificações P3 podem não dispor de dados suficientes | 0 + WARN |
| **10–30 s** | P1 + P2 + a maior parte de P3; o TDT (30 s) pode não ser concluído a tempo | 0 + NOTE |
| **≥ 30 s** | Cobertura completa de todas as verificações da TR 101 290 | 0 |

A duração padrão é de **30 segundos**, suficiente para a cobertura completa da TR 101 290. Utilize `-t <sec>` para aumentá-la (por exemplo, em testes de aceitação da deriva do PCR) ou para reduzi-la (verificações rápidas de smoke).

Durante a execução, o analisador atualiza a cada segundo um indicador de progresso de uma única linha em stderr:

```
Progress: 47.3%  (14.2s / 30.0s, 330614 packets)
```

A linha utiliza carriage return (`\r`) para permanecer em uma única linha no terminal; redirecione o stderr (`2>/dev/null`) para suprimi-la.

### Veredito da deriva do PCR — janela de dois níveis

A tolerância do relógio do PCR conforme a **ISO/IEC 13818-1 §2.4.2.1** e a **ETSI TR 101 290** é de **±30 ppm**. O valor da deriva apresentado no relatório é obtido por regressão linear dos segundos acumulados do PCR em relação ao instante de chegada medido pelo relógio da bancada; o erro estatístico decresce como 1 / T^(3/2), portanto a janela de análise deve ser longa o suficiente para que o ruído de medição fique abaixo do limite de ±30 ppm.

Por isso, o analisador condiciona o veredito da deriva à duração da análise:

| Janela | Veredito quando a deriva excede a tolerância | Efeito sobre o OVERALL |
| --- | --- | --- |
| `T < 30 s` | **skipped** (o ruído domina em relação ao limite de ±30 ppm) | nenhum |
| `30 s ≤ T < 300 s` | **WARN** — apenas informativo | nenhum |
| `T ≥ 300 s` | **FAIL** | OVERALL = FAIL, exit 65 |

`300 s` é a janela de aceitação (valor definido pelo produto; a norma **ETSI TR 101 290** não normatiza os intervalos de medição) — longa o suficiente para que mesmo um caminho de entrega em rajadas/loopback seja promediado abaixo de 1 ppm de ruído de medição, de modo que um resultado fora da tolerância reflita o relógio do codificador e não a rede. O relatório completo mostra o nível atual na linha `Verdict mode` do bloco PCR DRIFT.

Para obter um veredito rígido PASS/FAIL sobre a deriva, execute com `-t 300` ou mais.

Recomendações quanto à qualidade da fonte (informativas; não alteram os níveis de veredito):

| Fonte | Janela mínima para ±5 ppm | Para ±2 ppm | Aceitação |
| --- | --- | --- | --- |
| Multicast de radiodifusão (rede CBR, jitter < 100 µs) | **30 s** | 60 s | 5 min |
| Rede IP estável (jitter < 200 µs) | **30 s** | 2 min | 5–10 min |
| Loopback / emissor em rajadas (UDP unicast em `lo`) | **5 min** | 15 min | 30 min |
| Calibração / medição laboratorial | — | 30 min | 1+ hora |

Exemplos:

```bash
# Quick PCR drift check on a real broadcast multicast (30 s)
ts_analyze -t 30 -s udp://239.1.1.1:5000

# Reliable check on a loopback source (5 min)
ts_analyze -t 300 -s udp://lo@127.0.0.1:12655

# Lab acceptance (30 min, full report to file)
ts_analyze -t 1800 -f --no-color udp://239.1.1.1:5000 > acceptance.txt
```

Se o mesmo fluxo for analisado em várias janelas curtas e o valor da deriva oscilar mais do que alguns ppm entre elas, o gargalo é o jitter de entrega (o ritmo de envio do emissor ou a rede), e não o relógio do codificador — aumente a janela.

### Códigos de saída

| Código | Significado |
| --- | --- |
| `0` | Análise concluída, **OVERALL = PASS** |
| `1` | Erro de argumentos ou da entrada |
| `2` | Não há dados de PCR no fluxo |
| `3` | A duração do fluxo é inferior ao mínimo de 2 s, ou nenhum dado foi recebido (a fonte não está transmitindo, endereço incorreto, associação multicast não efetuada, firewall ou interface incorreta — o analisador imprime uma indicação) |
| `65` | Análise concluída, **OVERALL = FAIL** — violação da TR 101 290 / ISO 13818-1 |
| `130` | Interrompido por **SIGINT** (Ctrl+C) — a análise é cancelada, nenhum relatório é gerado |
| `143` | Interrompido por **SIGTERM** — a análise é cancelada, nenhum relatório é gerado |

`65` é o `EX_DATAERR` do POSIX `<sysexits.h>`: «os dados de entrada estão incorretos». Utilize-o em CI / monitoramento para condicionar a aprovação à conformidade do fluxo:

```bash
ts_analyze -s -t 60 udp://239.1.1.1:5000 || {
    case $? in
        65)  echo "stream does not conform — see report" >&2 ;;
        130) echo "interrupted by user" >&2 ;;
        *)   echo "tool error" >&2 ;;
    esac
}
```

Os códigos 130/143 seguem a convenção do shell POSIX `128 + signal_number`, portanto `$?` após `Ctrl+C` coincide com o que o bash retorna para qualquer processo encerrado por SIGINT/SIGTERM. Ao ser interrompido, o analisador imprime uma única linha em stderr (`Analysis interrupted by signal N — no report produced.`) e ignora por completo a geração do relatório.

## Exemplo de saída

### Relatório completo (trecho)

```
========================================================================
  MPEG-TS ANALYZER v2.3 — TR 101 290 FULL REPORT
  Perfect Streamer Toolkit https://pstreamer.tv
========================================================================
  Source     : udp://239.1.1.1:5000
  Timestamp  : 2026-04-30 12:00:00
  Duration   : 30.00 s
  Packets    : 398936 total, 12045 null
  TS bitrate : 20.012 Mbit/s
------------------------------------------------------------------------

========================================================================
  TR 101 290 — PRIORITY 1 (TS decodability)
========================================================================
  |  1.1   TS Sync Byte                  :        0           PASS
  |  1.4   Continuity Count              :        0           PASS
  |  1.6   PID Absence (5s)              :        0           PASS
  ...

========================================================================
  TR 101 290 — PRIORITY 2 (recommended monitoring)
========================================================================
  |  2.3   PCR Repetition                :        0           PASS
  |  2.5   PCR Accuracy                  :        0           PASS
  ...

========================================================================
  OVERALL COMPLIANCE: PASS  — stream is TR 101 290 compliant
========================================================================
```

### Relatório resumido

```
MPEG-TS Analyzer v2.3 | Perfect Streamer Toolkit https://pstreamer.tv
TR 101 290 Summary | udp://239.1.1.1:5000 | 30.0s | 2026-04-30 12:00:00
----------------------------------------------------------------------------------------------------
  P1: sync=0 CC=0 PAT=0 PMT=0 PID=0  P2: TEI=0 CRC=0 PTS=0  P3: NIT=0 SDT=0 EIT=0 TDT=0 unref=2
  IAT: dgrams=33252 avg=0.150 ms max=5.009 ms stddev=0.295 ms p99=1.076 ms gaps>100.000 ms=0
----------------------------------------------------------------------------------------------------
PCR PID       SID     Count     Intv max      Jitter max    Drift     Interval  Accuracy  T-STD
----------------------------------------------------------------------------------------------------
0x0101        1       1500      20.195 ms     76.4 ns       0ppm      PASS      PASS      PASS
----------------------------------------------------------------------------------------------------
OVERALL: PASS
```

## Notas

- **Modo de arquivo**: a deriva do PCR, o modelo de buffers T-STD e o UDP IAT não são medidos — eles exigem uma referência de tempo real. As demais verificações funcionam em ambos os modos.
- **Fluxo de transporte único**: é analisado um MPTS ou SPTS por vez.
