O fluxo de transporte MPEG (MPEG-TS, MTS) ou simplesmente fluxo de transporte (TS) é um formato de contêiner digital padrão para transmissão e armazenamento de dados de áudio, vídeo e Program and System Information Protocol (PSIP). É usado em sistemas de transmissão como DVB, ATSC e IPTV.

O fluxo de transporte especifica um formato de contêiner que encapsula fluxos elementares empacotados, com recursos de correção de erros e padrão de sincronização para manter a integridade da transmissão quando o canal de comunicação que transporta o fluxo é degradado.

Os fluxos de transporte diferem do fluxo de programa MPEG de nome semelhante em várias maneiras importantes: os fluxos de programa são projetados para mídia razoavelmente confiável, como discos (como DVDs), enquanto os fluxos de transporte são projetados para transmissão menos confiável, ou seja, transmissão terrestre ou via satélite. Além disso, um fluxo de transporte pode carregar vários programas.

O fluxo de transporte é especificado no MPEG-2 Parte 1, Sistemas, formalmente conhecido como padrão ISO/IEC 13818-1 ou ITU-T Rec. H.222.0.

Visão geral

Um fluxo de transporte encapsula vários outros subfluxos, frequentemente fluxos elementares empacotados (PESs) que, por sua vez, envolvem o fluxo de dados principal usando o codec MPEG ou qualquer número de codecs não MPEG (como áudio AC3 ou DTS e vídeo MJPEG ou JPEG 2000), texto e imagens para legendas, tabelas que identificam os fluxos e até mesmo informações específicas da emissora, como um guia de programação eletrônico. Muitos fluxos são frequentemente misturados, como vários canais de televisão diferentes ou vários ângulos de um filme.

Cada fluxo é cortado em seções de (no máximo) 188 bytes e intercalados juntos. Devido ao tamanho minúsculo do pacote, os fluxos podem ser intercalados com menos latência e maior resiliência a erros em comparação com fluxos de programa e outros contêineres comuns, como AVI, MOV/MP4 e MKV, que geralmente envolvem cada quadro em um pacote. Isso é particularmente importante para videoconferência, onde quadros grandes podem introduzir atraso de áudio inaceitável.

Os fluxos de transporte tendem a ser transmitidos como taxa de bits constante (CBR) e preenchidos com bytes de preenchimento quando não há dados suficientes.

Elementos Pacote Um pacote de rede é a unidade básica de dados em um fluxo de transporte, e um fluxo de transporte é meramente uma sequência de pacotes. Cada pacote começa com um byte de sincronização e um cabeçalho, que pode ser seguido por cabeçalhos adicionais opcionais; o restante do pacote consiste em payload. Todos os campos de cabeçalho são lidos como big-endian. Os pacotes têm 188 bytes de comprimento, mas o meio de comunicação pode adicionar informações adicionais. O tamanho do pacote de 188 bytes foi originalmente escolhido para compatibilidade com sistemas de Modo de Transferência Assíncrona (ATM).

+ Formato de pacote de fluxo de transporte parcialNomeNúmero de bitsBitmask (big-endian)DescriçãoCabeçalho de fluxo de transporte de 4 bytesSync byte80xff000000Padrão de bits de 0x47 (caractere ASCII 'G')Indicador de erro de transporte (Transport error indicator, TEI)10x800000Definido quando um demodulator não consegue corrigir erros de dados FEC; indicando que o pacote está corrompido.Indicador de início da unidade de carga útil (Payload unit start indicator, PUSI)10x400000Define quando este pacote contém o primeiro byte de uma nova unidade de carga útil. Para dados de pacote PSI, o primeiro byte da carga útil indicará onde esta nova unidade de carga útil começa. Para dados de pacote PES, o novo pacote PES deve começar no início da carga útil. Este campo permite que um receptor que começou a ler no meio da transmissão saiba quando pode começar a extrair dados.Prioridade de transporte (Transport priority)10x200000Definido quando o pacote atual tem uma prioridade maior que outros pacotes com o mesmo PID.PID130x1fff00Identificador de pacote, descrevendo os dados da carga útil.Controle de embaralhamento de transporte (Transport scrambling control, TSC)20xc0 '00' = Não embaralhado. Somente para DVB-CSA e ATSC DES:'01' (0x40) = Reservado para uso futuro'10' (0x80) = Embaralhado com chave par'11' (0xC0) = Embaralhado com chave ímparControle de campo de adaptação (Adaptation field control)20x3001 – sem campo de adaptação, somente carga útil, 10 – campo de adaptação apenas, sem carga útil, 11 – campo de adaptação seguido de carga útil, 00 – RESERVADO para uso futuro Contador de continuidade (Continuity counter)40xfNúmero de sequência de pacotes de carga útil (0x00 to 0x0F) dentro de cada fluxo (exceto PID 8191)Incrementado por PID, somente quando um sinalizador de carga útil é definido.Campos opcionaisCampo de adaptação (Adaptation field)variávelPresente se o 'controle do campo de adaptação for 10 ou 11. Veja abaixo o formato. Dados de carga útil (Payload data)variávelPresente se o 'controle do campo de adaptação for 01 ou 11. A carga útil pode ser pacotes PES, informações específicas do programa (abaixo) ou outros dados.

+ Formato do campo de adaptaçãoNomeNúmero de bitsBitmaskDescriçãoComprimento do campo de adaptação (Adaptation field length)8 Número de bytes no campo de adaptação imediatamente após este byteIndicador de descontinuidade (Discontinuity indicator)10x80Definido se o pacote TS atual estiver em um estado de descontinuidade em relação ao contador de continuidade ou à referência do relógio do programaIndicador de acesso aleatório (Random access indicator)10x40Defina quando o fluxo pode ser decodificado sem erros a partir deste pontoIndicador de prioridade de fluxo elementar (Elementary stream priority indicator)10x20Defina quando este fluxo deve ser considerado "alta prioridade"Bandeira PCR (PCR flag)10x10Definido quando o campo PCR estiver presenteBandeira OPCR (OPCR flag)10x08Definido quando o campo OPCR estiver presenteBandeira do ponto de emenda (Splicing point flag)10x04Definido quando o campo de contagem regressiva de emenda estiver presenteBandeira de dados privados de transporte (Transport private data flag)10x02Definir quando os dados privados de transporte estão presentesBandeira de extensão do campo de adaptação (Adaptation field extension flag)10x01Definido quando os dados de extensão de adaptação estão presentesCampos opcionaisPCR48 Referência de clock de programa, armazenada como base de 33 bits, 6 bits reservados, extensão de 9 bits.O valor é calculado como base * 300 + extensão.OPCR48 Referência de relógio do programa original. Ajuda quando um TS é copiado para outroContagem regressiva de emenda (Splice countdown)8 Indica quantos pacotes TS deste ponto de emenda ocorrem (Complemento para dois assinado; pode ser negativo)Comprimento de dados privados de transporte (Transport private data length)8 O comprimento do campo a seguirTransporte de dados privados (Transport private data)variável Dados privadosExtensão de adaptação (Adaptation extension)variável Veja abaixoBytes de enchimento (Stuffing bytes)variávelSempre 0xFF

+ Formato de extensão de adaptaçãoNomeNúmero de bitsBitmaskDescriçãoComprimento de extensão de adaptação (Adaptation extension length)80xff00O comprimento do cabeçalhoBandeira da janela de tempo legal (LTW) (Legal time window (LTW) flag)10x0080Bandeira de taxa por partes (Piecewise rate flag)10x0040Bandeira de taxa por partes (Seamless splice flag)10x0020Reservado50x001fCampos opcionaisConjunto de sinalizadores LTW (LTW flag set) (2 bytes)Bandeira válida LTW (LTW valid flag)10x8000Compensação LTW (LTW offset)150x7fffInformações extras para retransmissores determinarem o estado dos buffers quando pacotes podem estar faltando.Conjunto de sinalizadores em partes (Piecewise flag set) (3 bytes)Reservado20xc00000Taxa por partes (Piecewise rate)220x3fffffA taxa do fluxo, medida em pacotes de 188 bytes, para definir o tempo de término do LTW.Conjunto de sinalizadores de emenda contínua (Seamless splice flag set) (5 bytes)Tipo de emenda (Splice type)40xf000000000Indica os parâmetros da emenda H.262.Unidade de acesso seguinte DTS (DTS next access unit)360x0efffefffeO PES DTS do ponto de emenda. Dividido como campos múltiplos, 1 bit de marcador (0x1), 15 bits, 1 bit de marcador, 15 bits e 1 bit de marcador, para um total de 33 bits de dados. +Formato de carga útilNomeNúmero de bitsBitmaskDescriçãoPonteiro de carga útil (Payload Pointer) (opcional)80xffPresente somente se o sinalizador PUSI (Indicador de Início da Unidade de Carga Útil) estiver definido e o tipo de dados do pacote for PSI (não PES). Ele fornece o índice após esse byte no qual a nova unidade de payload começa. Qualquer byte de payload antes do índice é parte da unidade de payload anterior.Carga útil real (Actual Payload)variávelO conteúdo da carga útil.

Packet identifier (PID) Cada tabela ou fluxo elementar em um fluxo de transporte é identificado por um identificador de pacote (PID) de 13 bits. Um demultiplexador extrai fluxos elementares do fluxo de transporte em parte procurando por pacotes identificados pelo mesmo PID. Na maioria das aplicações, a multiplexação por divisão de tempo será usada para decidir com que frequência um PID específico aparece no fluxo de transporte.

+ Identificadores de pacotes em uso Decimal Hexadecimal Descrição00x0000A tabela de associação de programas (PAT) contém uma listagem de diretórios de todas as tabelas de mapas de programas10x0001A tabela de acesso condicional (CAT) contém uma listagem de diretório de todos os fluxos de mensagens de gerenciamento de direitos ITU-T Rec. H.222 usados ​​por tabelas de mapas de programas20x0002A tabela de descrição do fluxo de transporte (TSDT) contém descritores relacionados ao fluxo de transporte geral30x0003A tabela de informações de controle IPMP contém uma listagem de diretório de todos os fluxos de controle ISO/IEC 14496-13 usados ​​pelas tabelas de mapas de programas4–150x0004-0x000FReservado para uso futuro16–310x0010-0x001FUsado por metadados DVB 0x0010: NIT, ST 0x0011: SDT, BAT, ST 0x0012: EIT, ST, CIT 0x0013: RST, ST 0x0014: TDT, TOT, ST 0x0015: sincronização de rede (network synchronization) 0x0016: RNT 0x0017-0x001B: reservado para uso futuro 0x001C: sinalização em banda (inband signalling) 0x001D: medição 0x001E: DIT 0x001F: SIT32-81860x0020-0x1FFAPode ser atribuído conforme necessário para programar tabelas de mapas, fluxos elementares e outras tabelas de dados81870x1FFBUsado por metadados DigiCipher 2/ATSC MGT8188–81900x1FFC-0x1FFEPode ser atribuído conforme necessário para programar tabelas de mapas, fluxos elementares e outras tabelas de dados81910x1FFFPacote nulo (usado para preenchimento de largura de banda fixa)

Programs O fluxo de transporte tem um conceito de programas. Cada programa é descrito por uma tabela de mapa de programa (PMT). Os fluxos elementares associados a esse programa têm PIDs listados na PMT. Outro PID é associado à própria PMT. Por exemplo, um fluxo de transporte usado na televisão digital pode conter três programas, para representar três canais de televisão. Suponha que cada canal consiste em um fluxo de vídeo, um ou dois fluxos de áudio e quaisquer metadados necessários. Um receptor que deseja decodificar um dos três canais precisa apenas decodificar as cargas úteis de cada PID associado ao seu programa. Ele pode descartar o conteúdo de todos os outros PIDs. Um fluxo de transporte com mais de um programa é chamado de fluxo de transporte multiprograma (MPTS). Um fluxo de transporte de programa único é chamado de fluxo de transporte de programa único (SPTS).

Informações específicas do programa

Há 4 tabelas de informações específicas de programa (PSI): associação de programa (PAT), mapa de programa (PMT), acesso condicional (CAT) e informações de rede (NIT). A especificação MPEG-2 não especifica o formato do CAT e do NIT.

PCR