O que é MPEG-TS?
MPEG-TS (fluxo de transporte MPEG-2) é um contêiner organizado em pacotes que multiplexa os fluxos de vídeo, áudio e dados de um ou mais programas junto com as tabelas que os descrevem; os arquivos que o contêm costumam usar a extensão .ts. Ele foi projetado para ambientes propensos a erros, como a radiodifusão.
Como o MPEG-TS funciona
Um fluxo de transporte MPEG divide fluxos elementares e tabelas de sinalização em pacotes de tamanho fixo de 188 bytes, cada um marcado com um identificador de pacote (PID) de 13 bits. Um receptor lê a tabela de associação de programas no PID 0, segue suas referências até a tabela de mapa de programa de cada programa e descobre nela quais PIDs contêm o vídeo, o áudio e os dados do programa. Um contador de continuidade em cada PID, exceto o PID de pacotes nulos, ajuda a detectar pacotes perdidos, e um bit indicador de erro de transporte no cabeçalho de cada pacote, quando ativado, sinaliza pelo menos um erro de bit incorrigível nesse pacote. As referências de relógio do programa são as marcas de tempo das quais se deriva a temporização do decodificador. Um fluxo multiplexado pode conter vários programas com bases de tempo independentes. Como um receptor pode começar a receber um fluxo no meio, as tabelas normalmente são retransmitidas periodicamente; a norma recomenda isso sem fixar uma frequência.
Informações essenciais
- Um pacote de fluxo de transporte sempre tem 188 bytes e começa com o byte de sincronização
0x47; 4 desses bytes compõem o cabeçalho, portanto a estruturação em pacotes tem um custo de pelo menos 2,1%, antes dos campos de adaptação, cabeçalhos PES ou preenchimento. Alguns sistemas encapsulam cada pacote em bytes extras: a transmissão DVB por satélite acrescenta 16 bytes de paridade Reed-Solomon ao pacote, totalizando 204, e o demultiplexador do FFmpeg também tenta detectar uma variante de 192 bytes, portanto um analisador que pressupõe um intervalo fixo de 188 bytes perde a sincronização nessas capturas. - A tabela de associação de programas no PID
0x0000lista cada programa e o PID de sua tabela de mapa de programa, que, por sua vez, lista os PIDs dos fluxos elementares desse programa. O HLS restringe isso: cada segmento de fluxo de transporte precisa conter um único programa e incluir uma PAT e uma PMT, que deveriam ser seus dois primeiros pacotes, a menos que umEXT-X-MAPas forneça. As marcas de tempo e os contadores de continuidade também precisam manter a continuidade de um segmento para o seguinte, a menos que a playlist indique uma descontinuidade. Portanto, uma captura de radiodifusão com vários programas precisa ser reduzida a um programa antes de poder servir como segmentos HLS. - O contador de continuidade é um valor de 4 bits por PID que avança em um, retornando a zero após 15, a cada pacote que contém carga útil. Ele se repete legitimamente em pacotes que contêm apenas um campo de adaptação e em uma única duplicata repetida imediatamente, pode saltar onde o fluxo ativa o indicador de descontinuidade e é indefinido em pacotes nulos. Qualquer outro valor é um erro de continuidade, cujas causas a RFC 6990 lista como um pacote perdido, ordem incorreta dos pacotes ou um pacote que ocorre mais de duas vezes. Quando a causa é a perda, o tamanho do salto informa o número de pacotes ausentes com carga útil apenas em módulo 16, portanto perder exatamente 16, ou qualquer múltiplo de 16, não deixa lacuna.
- A remultiplexação pode extrair um único programa de um fluxo com vários programas e inserir ou excluir pacotes nulos para alterar a taxa de bits de transporte, sem recomprimir o áudio ou o vídeo. O remultiplexador pode precisar corrigir os valores das referências de relógio do programa, pois suas posições no fluxo mudam. A extração por si só não deixa um programa pronto para HLS: a RFC 8216 recomenda que cada segmento H.264 contenha um quadro IDR, e a especificação de autoria HLS da Apple aceita apenas vídeo H.264, HEVC, Dolby Vision ou AV1, exige fMP4 em vez de fluxos de transporte para HEVC, exige que cada segmento de vídeo comece com um quadro IDR e exige que todo conteúdo de origem entrelaçado seja desentrelaçado. Um programa de radiodifusão cujo codec não é aceito pelos reprodutores de destino, ou cujos quadros-chave não coincidem com limites de segmento utilizáveis, precisa ser recodificado, assim como o vídeo de radiodifusão entrelaçado que precisa atender à especificação da Apple.
Quando o MPEG-TS é importante
Escolha MPEG-TS para radiodifusão, IPTV, fluxos de contribuição ou distribuição tradicional de segmentos HLS. Sua resiliência e seu suporte à multiplexação acrescentam sobrecarga em comparação com contêineres otimizados para armazenamento confiável de arquivos.
Como a Transloadit ajuda com MPEG-TS
Os Robots da Transloadit baseados em FFmpeg listam MPEG-TS entre os formatos que podem ler e gravar. /video/encode tem uma opção segment que divide sua saída em partes para HTTP Live Streaming, nomeadas por segment_prefix (o prefixo segment_ gera segment_0.ts, segment_1.ts e assim por diante), e /video/adaptive empacota variantes para HLS, MPEG-DASH ou CMAF e grava a playlist ou o manifesto.
- Formatos de áudio e vídeo por stack do FFmpeg
- Robot de codificação de vídeo: opções de segmentação
- Robot de vídeo adaptativo
Explore os formatos de arquivo e os recursos de compressão da Transloadit
Fontes
- ITU-T H.222.0 | ISO/IEC 13818-1: codificação genérica de imagens em movimento e informações de áudio associadas: sistemas
- RFC 8216: HTTP Live Streaming, seção 3 (segmentos de mídia) e seção 3.2 (fluxos de transporte MPEG-2)
- Apple: especificação de autoria HLS para dispositivos Apple
- RFC 6990: bloco de relatório estendido (XR) do protocolo de controle RTP (RTCP) para relatar métricas estatísticas de decodificabilidade independente das informações específicas de programa (PSI) de fluxos de transporte (TS) MPEG-2, seção 3
- ETSI EN 300 421: estrutura de quadros, codificação de canal e modulação DVB para serviços via satélite
- FFmpeg n8.0: libavformat/mpegts.h (constantes de tamanho de pacote)