TV Digital uma introduo

April 1, 2010

[Warning: This post is a backup recovery from my previous Wordpress blog. All content was automatically converted accessing a MySQL database using a Python script (details). Mostly are in Portuguese but if you are interest I can translate to English. If you found any problem dont’t hesitate to contact me in comments.]

Esse post no ir falar do Ginga.

Atualmente estou dedicando um tempo no estudo da norma brasileira de TV Digital, vou tentar documentar estas "descobertas". Meu foco inicial nos mecanismos de transmisso, particularmente noTransport Stream. No sou um especialista muito menos vinculado a alguma instituio que faz pesquisa na rea, mas quero mostrar alguns conceitos e aplicaes prticas, por isso, importante o leitor buscar outras fontes que explicam melhor a teoria e se necessrio, por favor, me corrija.

Um breve histrio: O padro brasileiro de televiso digitial foi criado em conjunto com o Frum de TV Digital e a ABNT. As normas so referentes a:

  • Transmisso (ABNT NBR 15601)
  • Conpreso de Audio e Video (ABNT NBR 15602)
  • Multiplexao e Servios de Informao (SI) (ABNT NBR 15603)
  • Receptores (ABNT NBR 15604)
  • Segurana (ABNT NBR 15605)
  • Codificao de Dados (ABNT NBR 15606)
  • Canal de Interatividade (ABNT NBR 15607)
  • Diretivas de Operao (ABNT NBR 15608)
  • Suites de Testes para o Middleware (ABNT NBR 15609)
  • Certificao dos receptores (ABNT NBR 15610)

Como mencionado,a priori vamos focar noTransport Stream (TS) que um protocolo de comunicao para audio, video e dados. um tipo de "recipiente" que pode conter vrios formatos que so separados no mesmo arquivo.

Dois tipos de pacotes foram padronizados para os sinais gerados pelo MPEG: um chamadoProgram Stream que otimizado para um armazenamento eficiente e assume que o decodificador tem acesso aostream completo para fins de sincronizao; j o outro outro, oTransport Stream foi projetado para transmitir os dados em tempo real mesmo em um meio no-confivel (o ar) sendo que o receptor pode comear a "ler" os dados da fonte a partir de qualquer momento (e no necessariamente no comeo da transmisso), por isso usado na transmisso ISDB-Tb (incluindo tambm DVB e ATSC). Em linhas gerais, oProgram Stream usado, por exemplo, num CD ou DVD e oTransport Stream para uma transmisso de televiso. Para que este mecanismo funcione, adicionado regularmente aostream uma informao de tempo (timestamps) fazendo com que a sincronizao dos pacotes seja agrupada relativo aotimestamp mais recente ao invs de um ponto inicial apenas no comeo da transmisso. O TS est especificado na norma ISO/IEC 13818-1.

O TS utiliza o conceito de programas. Cada programa descrito numa tabela chamada PMT (Program Map Table) na qual possui um nico PID (Program ID) e oselementary streams associados a este PID. Por exemplo: um transport stream utilizado na televiso digital pode conter trs programas, para representar trs canais de televiso. Suponha que cada canal consista de um video diferente, um ou doisstreams de audio (ex.: o audio dublado e original) e qualquer meta-informao necessria (ex.: sinopse do filme). O teleespectador querendo assistir a um canal particular apenas tem que decodificar ospayloads de cada PID associado ao programa escolhido. Ele pode ignorar o contedo do resto. Um transport stream com mais de um programa chamado MPTS (Multi Program Transport Stream) e umtransport stream com um nico programa chamado SPTS (Single Program Transport Stream)

Nesta srie de posts vou me concentrar nas "meta-informaes" - qualquer informao que no opayload - dotransport stream, ou seja, aquilo que caracteriza o protocolo e no propriamente no contedo.Na prtica, se abrirmos um arquivo TS atravs de um editor hexadecimal (ex: hexdump) notaremos nos primeirosbytes alguma coisa do tipo:

00000000 47 40 00 10 00 00 b0 11 00 01 c1 00 00 00 00 e0
00000010 1f 00 01 e1 00 24 ac 48 84 ff ff ff ff ff ff ff

Contudo impossvel analisar um Transport Stream pelo dump do TS pois a construo dele dinmica. O primeiro erro que cometi foi pensar que era facil extrair o video de dentro do TS apenas "removendo" as informaes que no eram pertinentes. (Isso at possvel, mas meus testes foram restritos, espero fazer um post a parte sobre o tema) Deste comeo, a nica informao confiavel (que no muda) o primeiro byte 0x47 referente ao sincronismo. Estruturalmente podemos pensar o cabealho como algo:

structts_header{
uint8_t sync_byte;
uint16_t transport_error_indicator:1;
uint16_t payload_unit_start_indicator:1;
uint16_t transport_priority:1;
uint16_t pid:13;
uint8_t transport_scrambling_control:2;
uint8_t adaptation_field:2;
uint8_t continuity_counter:4;
}__attribute__((__packed__));

structadaptation_field{
uint8_t length;
uint8_t discontinuity_indicator:1;
}__attribute__((__packed__));

Existem diversas bibliotecas para a manipulao do TS. Uma delas alibdvbpsi que foi desenvolvida para decodificar e gerar tabelas do MPEG TS e DVB PSI. No site diz que roda nas plataformas GNU/Linux, Windows e Mac OS X.

Bom, isso foi apenas uma introduo, pretendo ir publicando meus avanos por aqui... Lembre-se no um tpico fcil, estou conversando com bastante gente e tirando dvidas bsicas, muitas delas referente a especificao na norma.

–tm