Fluxo de transporte MPEG
MPEG Transport Stream | |
---|---|
Extensão do arquivo | .ts, .tsv, .tsa, .m2t[1]
|
MIME | video/MP2T[2]
|
Desenvolvido por | MPEG |
Lançamento | 10 julho 1995[3] |
Última versão | ISO/IEC 13818-1:2022 (setembro de 2022 | )
Tipo de formato | Formato de contêiner |
Arquivador de | Audio, video, data |
Arquivado por | MPEG-ES |
Padronização | ISO/IEC 13818-1, ITU-T Recommendation H.222.0[3] |
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).[4] É 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.[3]
Visão geral
[editar | editar código-fonte]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.[a]
Elementos
[editar | editar código-fonte]Pacote
[editar | editar código-fonte]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.[b] O tamanho do pacote de 188 bytes foi originalmente escolhido para compatibilidade com sistemas de Modo de Transferência Assíncrona (ATM).[6][7]
Nome | Número de bits | Bitmask (big-endian) | Descrição |
---|---|---|---|
Cabeçalho de fluxo de transporte de 4 bytes | |||
Sync byte | 8 | 0xff000000
|
Padrão de bits de 0x47 (caractere ASCII 'G') |
Indicador de erro de transporte (Transport error indicator, TEI) | 1 | 0x800000
|
Definido quando um demodulator não consegue corrigir erros de dados FEC; indicando que o pacote está corrompido.[8] |
Indicador de início da unidade de carga útil (Payload unit start indicator, PUSI) | 1 | 0x400000
|
Define 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.[9]
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) | 1 | 0x200000
|
Definido quando o pacote atual tem uma prioridade maior que outros pacotes com o mesmo PID. |
PID | 13 | 0x1fff00
|
Identificador de pacote, descrevendo os dados da carga útil. |
Controle de embaralhamento de transporte (Transport scrambling control, TSC) | 2 | 0xc0
|
'00' = Não embaralhado.
Somente para DVB-CSA e ATSC DES:[10] |
Controle de campo de adaptação (Adaptation field control) | 2 | 0x30
|
01 – sem campo de adaptação, somente carga útil, 10 – campo de adaptação apenas, sem carga útil, |
Contador de continuidade (Continuity counter) | 4 | 0xf
|
Nú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 opcionais | |||
Campo de adaptação (Adaptation field) | variável | Presente se o 'controle do campo de adaptação for 10 ou 11. Veja abaixo o formato. | |
Dados de carga útil (Payload data) | variável | Presente 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. |
Nome | Número de bits | Bitmask | Descrição |
---|---|---|---|
Comprimento do campo de adaptação (Adaptation field length) | 8 | Número de bytes no campo de adaptação imediatamente após este byte | |
Indicador de descontinuidade (Discontinuity indicator) | 1 | 0x80
|
Definido 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 programa |
Indicador de acesso aleatório (Random access indicator) | 1 | 0x40
|
Defina quando o fluxo pode ser decodificado sem erros a partir deste ponto |
Indicador de prioridade de fluxo elementar (Elementary stream priority indicator) | 1 | 0x20
|
Defina quando este fluxo deve ser considerado "alta prioridade" |
Bandeira PCR (PCR flag) | 1 | 0x10
|
Definido quando o campo PCR estiver presente |
Bandeira OPCR (OPCR flag) | 1 | 0x08
|
Definido quando o campo OPCR estiver presente |
Bandeira do ponto de emenda (Splicing point flag) | 1 | 0x04
|
Definido quando o campo de contagem regressiva de emenda estiver presente |
Bandeira de dados privados de transporte (Transport private data flag) | 1 | 0x02
|
Definir quando os dados privados de transporte estão presentes |
Bandeira de extensão do campo de adaptação (Adaptation field extension flag) | 1 | 0x01
|
Definido quando os dados de extensão de adaptação estão presentes |
Campos opcionais | |||
PCR | 48 | 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. | |
OPCR | 48 | Referência de relógio do programa original. Ajuda quando um TS é copiado para outro | |
Contagem 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 seguir | |
Transporte de dados privados (Transport private data) | variável | Dados privados | |
Extensão de adaptação (Adaptation extension) | variável | Veja abaixo | |
Bytes de enchimento (Stuffing bytes) | variável | Sempre 0xFF
|
Nome | Número de bits | Bitmask | Descrição |
---|---|---|---|
Comprimento de extensão de adaptação (Adaptation extension length) | 8 | 0xff00
|
O comprimento do cabeçalho |
Bandeira da janela de tempo legal (LTW) (Legal time window (LTW) flag) | 1 | 0x0080
|
|
Bandeira de taxa por partes (Piecewise rate flag) | 1 | 0x0040
|
|
Bandeira de taxa por partes (Seamless splice flag) | 1 | 0x0020
|
|
Reservado | 5 | 0x001f
|
|
Campos opcionais | |||
Conjunto de sinalizadores LTW (LTW flag set) (2 bytes) | |||
Bandeira válida LTW (LTW valid flag) | 1 | 0x8000
|
|
Compensação LTW (LTW offset) | 15 | 0x7fff
|
Informações extras para retransmissores determinarem o estado dos buffers quando pacotes podem estar faltando. |
Conjunto de sinalizadores em partes (Piecewise flag set) (3 bytes) | |||
Reservado | 2 | 0xc00000
|
|
Taxa por partes (Piecewise rate) | 22 | 0x3fffff
|
A 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) | 4 | 0xf000000000
|
Indica os parâmetros da emenda H.262. |
Unidade de acesso seguinte DTS (DTS next access unit) | 36 | 0x0efffefffe
|
O 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. |
Nome | Número de bits | Bitmask | Descrição |
---|---|---|---|
Ponteiro de carga útil (Payload Pointer) (opcional) | 8 | 0xff | Presente 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ável | O conteúdo da carga útil. |
Packet identifier (PID)
[editar | editar código-fonte]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.
Decimal | Hexadecimal | Descrição |
---|---|---|
0 | 0x0000 | A tabela de associação de programas (PAT) contém uma listagem de diretórios de todas as tabelas de mapas de programas |
1 | 0x0001 | A 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 programas |
2 | 0x0002 | A tabela de descrição do fluxo de transporte (TSDT) contém descritores relacionados ao fluxo de transporte geral |
3 | 0x0003 | A 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 programas |
4–15 | 0x0004-0x000F | Reservado para uso futuro |
16–31 | 0x0010-0x001F | Usado por metadados DVB[12]
|
32-8186 | 0x0020-0x1FFA | Pode ser atribuído conforme necessário para programar tabelas de mapas, fluxos elementares e outras tabelas de dados |
8187 | 0x1FFB | Usado por metadados DigiCipher 2/ATSC MGT |
8188–8190 | 0x1FFC-0x1FFE | Pode ser atribuído conforme necessário para programar tabelas de mapas, fluxos elementares e outras tabelas de dados |
8191 | 0x1FFF | Pacote nulo (usado para preenchimento de largura de banda fixa) |
Programs
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]Para permitir que um decodificador apresente conteúdo sincronizado, como faixas de áudio correspondentes ao vídeo associado, pelo menos uma vez a cada 100 ms, uma referência de relógio de programa (PCR) é transmitida no campo de adaptação de um pacote de fluxo de transporte MPEG-2. O PID com o PCR para um programa MPEG-2 é identificado pelo valor pcr_pid no PMT associado. O valor do PCR, quando usado corretamente, é empregado para gerar um system_timing_clock no decodificador. O decodificador de relógio de tempo do sistema (STC), quando implementado corretamente, fornece uma base de tempo altamente precisa que é usada para sincronizar fluxos elementares de áudio e vídeo. O tempo no MPEG-2 faz referência a esse relógio. Por exemplo, o carimbo de tempo de apresentação (PTS) deve ser relativo ao PCR. Os primeiros 33 bits são baseados em um relógio de 90 kHz. Os últimos 9 bits são baseados em um relógio de 27 MHz. O jitter máximo permitido para o PCR é de +/- 500 ns.
Null packets
[editar | editar código-fonte]Alguns esquemas de transmissão, como os do ATSC e DVB, impõem requisitos rigorosos de taxa de bits constante no fluxo de transporte. Para garantir que o fluxo mantenha uma taxa de bits constante, um multiplexador pode precisar inserir alguns pacotes adicionais. O PID 0x1FFF é reservado para esse propósito. Os pacotes nulos têm uma carga útil que é preenchida com 0xFF, e espera-se que o receptor ignore seu conteúdo.[13]
Uso em câmeras de vídeo digitais
[editar | editar código-fonte]O Transport Stream foi originalmente projetado para transmissão. Mais tarde, foi adaptado para uso com câmeras de vídeo digitais, gravadores e reprodutores, adicionando um campo de código de tempo (TC) de 4 bytes aos pacotes padrão de 188 bytes, resultando em um pacote de 192 bytes.[14][15] Isso é o que é informalmente chamado de fluxo M2TS, comumente encontrado em câmeras HDV. A Blu-ray Disc Association o chama de "fluxo de transporte BDAV MPEG-2".[14] A JVC o chamou de TOD[c] quando usado em filmadoras baseadas em HDD como a GZ-HD7.[16][17] O código de tempo permite acesso rápido a qualquer parte do fluxo de um reprodutor de mídia ou de um sistema de edição de vídeo não linear.[18] Ele também é usado para sincronizar fluxos de vídeo de várias câmeras em uma configuração de várias câmeras.
Usos em Blu-ray
[editar | editar código-fonte]Os títulos de vídeo Blu-ray Disc criados com suporte a menu estão no formato Blu-ray Disc Movie (BDMV) e contêm áudio, vídeo e outros fluxos em um contêiner BDAV, que é baseado no formato de fluxo de transporte MPEG-2.[19][20] O vídeo Blu-ray Disc usa esses fluxos de transporte MPEG-2 modificados, em comparação com os fluxos de programa de DVD que não têm a sobrecarga de transporte extra.
Há também o formato BDAV (Blu-ray Disc Audio/Visual), a alternativa orientada ao consumidor para o formato BDMV usado para lançamentos de filmes. O formato BDAV é usado em Blu-ray Disc gravável para gravação de áudio/vídeo.[20][d] O Blu-ray Disc emprega o método de gravação de fluxo de transporte MPEG-2. Isso permite que os fluxos de transporte de uma transmissão digital convertida em BDAV sejam gravados como estão, com alteração mínima dos pacotes.[15] Ele também permite a edição simples no estilo de corte de fluxo de uma transmissão digital convertida em BDAV que é gravada como está e onde os dados podem ser editados apenas descartando pacotes indesejados do fluxo. Embora seja bastante natural, uma função para recuperação de alta velocidade e fácil de usar é incorporada.[15][22]
Ver também
[editar | editar código-fonte]Notas
- ↑ O formato Blu-ray não requer CBR.
- ↑ A correção de erros de encaminhamento é adicionada por ISDB e DVB (16 bytes) e ATSC (20 bytes),[5] enquanto o formato M2TS prefixa os pacotes com uma tag de copyright e timestamp de 4 bytes.
- ↑ Possivelmente uma abreviação de "Transport stream on disc".
- ↑ A extensão de nome de arquivo .m2ts é usada em arquivos de vídeo Blu-ray Disc que contêm um fluxo de transporte BDAV MPEG-2 incompatível devido aos quatro octetos adicionais adicionados a cada pacote.[14][21]
Referências
- ↑ «TVNT.net - Le forum de la TNT • [Topic Unique] Akira DHB-B31HDR - Double tuner enregistreur TNT HD - MKV - DIVX - DTS : Les adaptateurs pour recevoir la TNT gratuite en SD ou HD». www.tvnt.net
- ↑ MIME Type Registration of RTP Payload Formats. Junho de 2003. doi:10.17487/RFC3555. Solicitação de comentários (S.D.C.) 3555
- ↑ a b c ITU-T (Outubro 2014). «Recommendation H.222.0 (10/14)». Cópia arquivada em 23 de janeiro de 2015
- ↑ «MPEG-2 Transport Stream». AfterDawn.com. Consultado em 3 de setembro de 2024
- ↑ «ATSC transmission». Broadcastengineering.com. 20 de junho de 2005. Consultado em 17 de maio de 2012
- ↑ «MPEG Systems FAQ». Mpeg.chiariglione.org. Consultado em 3 de setembro de 2024. Cópia arquivada em 9 de maio de 2012
- ↑ «ATSC MPEG Transport Stream Monitor». Tek.com. Consultado em 3 de setembro de 2024. Cópia arquivada em 3 de dezembro de 2012
- ↑ «TSReader». Coolstf.com. 7 de abril de 2008. Consultado em 3 de setembro de 2024. Arquivado do original em 27 de março de 2010
- ↑ «Information technology – Generic coding of moving pictures and associated audio information: systems». Fevereiro de 2000
- ↑ «Standards – DVB» (PDF). Dvb.org. Consultado em 3 de setembro de 2024. Arquivado do original (PDF) em 13 de março de 2011
- ↑ Fairhurst, Gorry. «MPEG-2 Transmission». Consultado em 3 de setembro de 2024. Arquivado do original em 13 de agosto de 2017
- ↑ Digital Video Broadcasting (DVB); Specification for Service Information (SI) in DVB systems (PDF). Etsi.org. Col: EN. 300 468 v1.13.1 ed. [S.l.: s.n.] 2012. p. 20. Consultado em 3 de setembro de 2024
- ↑ A Guide to MPEG Fundamentals and Protocol Analysis (PDF), Tektronix, p. 37, consultado em 3 de setembro de 2024
- ↑ a b c BD ROM – Audio Visual Application Format Specifications (PDF), Blu-ray Disc Association, Março de 2005, pp. 15–16, consultado em 3 de setembro de 2024, arquivado do original (PDF) em 7 de abril de 2014
- ↑ a b c BD-RE – Audiovisual Application Format Specification for BD-RE 2.1 (PDF), Blu-ray Disc Association, Março de 2008, arquivado do original (PDF) em 6 de fevereiro de 2009
- ↑ «Steve Mullen, M2TS primer». Dvinfo.net. Cópia arquivada em 23 de outubro de 2007
- ↑ «Working with JVC Everio MOD & TOD files». Cópia arquivada em 23 de outubro de 2008
- ↑ «How MPEG-TS works». Forum.videohelp.com. Consultado em 3 de setembro de 2024
- ↑ Afterdawn.com Glossary – BD-MV (Blu-ray Movie) and BDAV container Arquivado em 2009-02-18 no Wayback Machine, Retrieved on 26 July 2009
- ↑ a b Afterdawn.com Glossary – BDAV container, Retrieved on 26 July 2009
- ↑ Videohelp.com What is Blu-ray Disc and HD DVD? Arquivado em 2009-12-24 no Wayback Machine, Retrieved on 26 July 2009
- ↑ Blu-ray Disc Association (August 2004) Blu-ray Disc Format, White paper (PDF) Page 22, Retrieved on 28 July 2009 Arquivado em 2012-02-14 no Wayback Machine
Ligações externas
[editar | editar código-fonte]- ITU-T H.222.0 | ISO/IEC 13818-1 Systems Spec Documents
- Latest free copy of the spec, August 2018
- TSDuck – Free open-source tool to manipulate MPEG transport streams.