Streaming e MPEG

29.1 STREAMING

Tecnologia que permite receber áudio, vídeo e multimídia de uma forma continua pela Internet. Os dados são transmitidos por um servidor aplicacional e recebidos por aplicações cliente em tempo real. Estas aplicações cliente possibilitam a visualização do vídeo e áudio assim que os dados em buffer sejam suficientes para reproduzir o streaming.

A transmissão em streaming pode ser “ao vivo” (live) ou não. Transmissões live são como as Rádios e TVs normais, porém, através da Internet. É um broadcast, ou seja, todas as pessoas escutam ou assistem o mesmo conteúdo, ao mesmo tempo. Se um programa foi apresentado às 16h e você não assistiu, não verá novamente, a menos que façam uma reprise. As transmissões sob demanda que é uma novidade proporcionam uma interatividade que só passou a existir com a chegada da Internet. Trata-se de arquivos gravados que você pode acessar, via streaming, a hora que quiser e quantas vezes quiserem desde que esteja disponível no site desejado. É o mesmo que utilizar um aparelho de DVD, você pode ver, rever, voltar, ver novamente mais tarde e etc.

Se não utilizamos streaming, para mostrar um conteúdo multimídia na rede, temos que descarregar primeiro o arquivo inteiro em nosso computador e mais tarde executá-lo, para finalmente ver e ouvir o conteúdo do arquivo. Entretanto, o streaming permite que esta tarefa se realize de uma maneira mais rápida e que possamos ver e escutar seu conteúdo durante o download.

O streaming funciona da seguinte maneira: Primeiro o cliente se conecta com o servidor e este, começa a lhe mandar o arquivo. O cliente começa a receber o arquivo e constrói um buffer onde começa a salvar a informação. Quando se enche o buffer com uma pequena parte do arquivo, o cliente começa a visualizar e ao mesmo tempo continua o download. O sistema está sincronizado para que o arquivo possa ser visto enquanto se baixa o arquivo.
Se em algum momento a conexão sofre decréscimos de velocidade se utiliza a informação que existe no buffer, de modo que se pode aguentar um pouco esse decréscimo. Se a comunicação se corta durante muito tempo, o buffer se esvazia e a execução do arquivo se corta também até que se restaurasse o sinal.

Figura 100 - Aplicação cliente servidor

Figura 29.1 – Aplicação cliente servidor

Fonte: adaptado de Microsoft

Em termos mais simples, o processo de streaming de mídia é composto por quatro etapas: capturar, codificar, distribuição e reprodução, como mostrada na figura 29.1.

02

Figura 29.1 – Processo de streaming

Fonte: adaptado de Microsoft

  • Captura: Imagens e / ou de som são digitalizadas e armazenadas em um arquivo de computador.
  • Codificação: O arquivo de áudio ou vídeo é codificado em um formato que pode ser transmitido por um codificador.
  • Distribuição: O arquivo codificado é colocado em um servidor de streaming media.
  • Playback: Um cliente “media player ou um player” efetua a solicitação do arquivo, o arquivo codificado é processado e o dado é transmitido em áudio ou vídeo.

29.1.1 MPEG-2 TRANSPORT STREAM

Fluxo de Transporte MPEG-2 TS[86] é um protocolo de multiplexação e transmissão de áudio e vídeo especificado pela norma ISO/IEC 13818-1. O MPEG-2 TS[86] oferece características para a correção de erro e é usado em aplicações da transmissão tais como DVB, ATSC[4] e streaming.

A tecnologia de streaming de vídeo, diferente do download, é uma sequência de imagens, que de forma comprimida e contínua são transmitidas em tempo real. Uma vez que o vídeo é enviado em um stream contínuo, ele é reproduzido à medida que chega ao destino. À medida que o vídeo é recebido vai sendo criado um pequeno buffer. Quando há informação suficiente no buffer, o decodificador começa a reproduzir o vídeo. O MPEG-2 TS[86] tem como objetivo multiplexar o fluxo de vídeo, de áudio(s), encapsulados num formato típico e garantir a sincronização entre áudio e vídeo. Ele tem ainda a função de sincronizar a saída. Como foi visto nas sessões anteriores, os codificadores de áudio e vídeo são responsáveis pela compressão e codificação dos sinais de áudio e vídeo. Esse fluxo codificado recebe o nome de fluxo elementar ES. Esses são multiplexados a fim de se produzir um programa. Um programa consiste em um ou mais fluxos elementares, mas tipicamente para IPTV[72], ele constituirá de um vídeo, um ou mais ES de áudio, um ES de dados, e zero ou mais ESs de legendas como a seguir:

  • Stream de dados: informações específicas do programa (Tabelas PSI [120]);
  • Stream de vídeo: MPEG[86]-2, H.264, ou VC-1;
  • Stream de áudio: MPEG, Dolby AC-3;
  • Stream de legenda: DVB bitmap (zero (0) ou mais).

29.2 CODIFICAÇÃO DE AUDIO E VÍDEO

A qualidade de codificação é o grande diferencial para que a tecnologia IPTV[72] obtenha êxito, no mundo televisivo é imperativo o fornecimento de serviço audiovisual com qualidades igualadas, ou melhor, a da televisão analógica e digital presentes no mercado. Com isso codificadores e decodificadores denominados como codecs de vídeo e áudio são à base de todo o serviço.

Para que um sinal de áudio e vídeo possa ser transmitido em uma rede, é necessário que ele seja codificado. Existem muitos esquemas de codificação tanto para áudio quanto para vídeo, com diferentes características de desempenho, complexidade e tempo de processamento. Comparando-se com os fluxos de texto e gráficos, o fluxo de um sinal de vídeo gerado por uma aplicação típica pode ser considerado de grande volume e, por isso, a compressão de dados, especialmente de áudio e vídeo, são necessários para se aperfeiçoar a utilização da largura de banda existente nas redes atuais e limitar a demanda por maior capacidade de armazenamento e transferência.

Os padrões mais importantes para compressão de vídeo são a família MPEG[86], estabelecida pela ITU-T. Os codificadores MPEG[86] oferecem três (3) grandes vantagens sobre os demais esquemas existentes:

  • Compatibilidade universal.
  • Grandes taxas de compressão.
  • Perda aceitável de qualidade na imagem final exibida.

O padrão MPEG trata separadamente vídeo e áudio, especificando como esses sinais são associados e sincronizados.

29.3 COMPRENSSÃO DE VÍDEO

29.3.1 MPEG-2

O grupo de experts em transporte de imagem (MPEG[86]) iniciou seus trabalhos em 1988 como um grupo de trabalho ISO[66] com o objetivo de definir padrões para compressão digital de sinais de áudio e vídeo. O grupo tomou como base o padrão para videoconferência JPEG[77] , hoje conhecido como H.261, o qual foi inicialmente desenvolvido para comprimir imagens estáticas tais como aquelas usadas em fotografia eletrônica.

Um sistema de compressão de vídeo visa reduzir a taxa de transmissão removendo a redundância e informações de menor importância do sinal antes da transmissão. Tal sistema é implementado pelo codificador de fonte de um transmissor digital. No receptor, o decodificador de fonte reconstrói uma aproximação da imagem a partir da informação remanescente após o processo de compressão. Uma sequência de vídeo digital é um conjunto de quadros ordenados temporalmente. Cada quadro é uma matriz cujos elementos contêm informações de cor e representam uma imagem. Os pontos dessa matriz são chamados de pixels. No padrão MPEG-2 as cores são representadas através de uma combinação de três (3) componentes: uma de luminância[1] (Y), e duas de crominância[2], Cr e Cb. A luminância representa a intensidade, ou seja, a imagem em preto-e-branco “brilho da cena”. As componentes de crominância contêm a informação de cor, associada a matiz e saturação em sistemas convencionais, nesse caso, fase e módulo do sinal de crominância modulado em quadratura. Em HDTV[59], têm-se os dois sinais diferenças de cores Cr e Cb que podem ser associados ao sinal de crominância. Devido às características psícos-visuais humanas, é possível sub-amostrar os sinais de crominância sem perda de qualidade perceptível. Isso ocorre porque o sistema visual humano é menos sensível às altas freqüências dos sinais de crominância do que às altas freqüências do sinal de luminância. Por isso, os padrões HDTV[59] utilizam o formato (4:2:0), em que os sinais de crominância são sub-amostrados por um fator nas duas direções (horizontal e vertical).

A sub-amostragem deve ser precedida de uma pré-filtragem, pois caso contrário ocorrerá uma distorção do sinal devido ao aliasing[3], que é uma sobreposição de componentes espectrais. Assim, da mesma forma que nos sistemas convencionais, os detalhes da imagem são reproduzidos pelo sinal de luminância.

A Figura 29.3.1 apresenta a disposição espacial das amostras de luminância e crominância para o formato (4:2:0). Observa-se que as amostras de crominância estão posicionadas no sentido vertical, entre as amostras de luminância e, por isso, é necessário que as amostras de crominância sejam obtidas através de interpolação.

Figura 100 - Localização espacial das amostras de luminância e crominância para o formato 4_2_0

Figura 29.3.1 – Localização espacial das amostras de luminância e crominância para o formato 4:2:0.

Fonte: adaptado de FFMPEG – Decoder and encoder utility

Os componentes destacados na figura 29.3.1 referem-se ao campo inferior, no caso de sinal de vídeo entrelaçado.

Tipicamente, as sequências de vídeo apresentam uma alta correlação, tanto temporal quanto espacial. Dessa forma, o padrão MPEG-2[86] comprime seqüências de vídeo digitalizadas, basicamente explorando os três tipos de redundância presentes nessas seqüências:

  • Redundância temporal e espacial: valores de pixels não são independentes, mas podem ser correlacionados com seus vizinhos, tanto dentro do mesmo quadro (redundância espacial) através da transformada DCT[153]  quanto entre quadros consecutivos (redundância temporal) através da codificação preditiva entre quadros. Assim, dentro de alguns limites, o valor de um pixel pode ser predito a partir dos valores dos pixels vizinhos, assim como regiões de um quadro futuro podem ser preditas a partir do quadro atual.
  • Redundância em entropia: para qualquer sinal digitalizado não-aleatório alguns valores codificados ocorrem com mais freqüência do que outros. Essa característica pode ser explorada através da codificação dos valores que ocorrem mais frequentemente com códigos menores, enquanto que códigos maiores podem ser usados para valores mais raros em ocorrência (codificação por entropia – código de Huffman[4]).
  • Redundância psico-visual: Essa forma de remoção de redundância resulta do princípio de funcionamento do olho e do cérebro humano (sistema visual humano) através de sub-amostragem da crominância. Tanto os limites de definição fina de detalhes que o olho pode resolver (limites de resolução espacial) quanto os limites na habilidade de acompanhar imagens que se movem rapidamente (limites de resolução temporal) são utilizados como limiares para que seja descartado aquele subconjunto do fluxo de informações de vídeo que ultrapassa esses limites. Visto que o sistema visual humano não é capaz de perceber esse tipo de informação, não há razão para que ela seja transmitida, resultando, assim, em compressão.

O diagrama geral de um codificador MPEG-2[86] é apresentado na figura 29.3.2. (Cada etapa desse processo será brevemente discutida; entretanto, primeiro é apresentada a estrutura adotada para a seqüência de vídeo, ou seja, a forma como os dados são divididos, a fim de serem codificados. Cada um dos quadros da seqüência é dividido em unidades utilizadas no processo de codificação. A menor unidade de codificação no algoritmo MPEG[86] é o bloco. Ele é utilizado na aplicação da transformada DCT[153] , e tem tamanho 8×8 pixels. O bloco pode ser de luminância (Y), ou de crominância (Cr ou Cb). A DCT[153]  é similar à DFT[33]  e tem como propósito usar essa transformação ortogonal para ajudar a remover redundância espacial por meio da concentração de energia do sinal em relativamente poucos coeficientes. O macro-bloco é a unidade básica de codificação no algoritmo MPEG[86]. Ele consiste de segmentos de 16 x 16 pixels, e é a unidade utilizada nas etapas de estimação e compensação de movimento. Na Figura 29.3.2 – é apresentado um exemplo de macro bloco de formato 4:2:0, composto de quatro (4) blocos de luminância e dois de crominância. O formato 4:2:0 refere-se à forma como sub-amostra a crominância do sinal, nesse caso, a crominância é sub-amostrada por um fator de dois nas duas direções, horizontal e vertical. Outros dois formatos são também possíveis: 4:2:2 em que a crominância é sub-amostrada por um fator de dois somente na horizontal, e o 4:4:4, em que a crominância não é sub-amostrada, também vistos na Figura 29.3.2:

Figura 100 - Diagrama geral de um codificador MPEG.

Figura 29.3.2 – Diagrama geral de um codificador MPEG.

Fonte: adaptado de FFMPEG – Decoder and encoder utility

A figura 29.3.3 ilustra os elementos de sub-amostragem de crominância do MPEG-2[86]:

03

Figura 29.3.3 – Sub-amostragem de crominância MPEG-2
Fonte: adaptado de FFMPEG – Decoder and encoder utility

O slice é uma fatia horizontal de macro blocos e serve como unidade de re-sincronismo. Uma fatia horizontal de macro blocos de um quadro pode conter mais de um slice. Além disso, podem existir áreas do quadro onde não há fatias e que, portanto, não são codificadas. Entretanto, todos os perfis do padrão utilizam uma estrutura de slice restrita (restricted slice structure), em que todo o quadro é segmentado em slices, ilustramos na figura 29.3.4 a estrutura de um quadro não-entrelaçado de formato 4:2:0:

Figura 100 - Estrutura de um quadro não entrelaçado de formato

Figura 29.3.4 – Estrutura de um quadro não entrelaçado de formato

Fonte: adaptado de FFMPEG – Decoder and encoder utility

Os quadros também são divididos em grupos chamados GOP[54]  ele é um conjunto de quadros que possibilita acesso randômico.

No padrão MPEG[86]-2, o conceito de GOP[54]  é um pouco diferente do padrão MPEG[86] No primeiro caso sua utilização é opcional, enquanto no segundo, é obrigatória. Tipicamente, 6 a 15 quadros são agrupados em um GOP[54]  e é estabelecida uma ordem de tipos de quadros que se repete ao longo da sequência.

Os quadros podem ser divididos em três tipos, de acordo com a codificação preditiva utilizada:

  • Quadro I (intracodificado): esse quadro é codificado de maneira independente dos outros quadros de forma semelhante à utilizada pelo JPEG[77] , isto é, codificado espacialmente e sem nenhuma referência a outro quadro. Dessa forma, o quadro do tipo I pode ser decodificado sem conhecer nenhum outro quadro. Por causa disso, em uma sequência de quadros, o primeiro quadro é sempre o I, também conhecido com quadro âncora.
  • Quadro P (predito): esse quadro é codificado em modo preditivo usando como referência quadros passados (quadros anteriores do tipo I ou P). O residual é transformado usando a DCT[153] . Dessa forma, para decodificar esse quadro, necessita-se de informação de outros quadros. Os quadros Ps têm cerca de 50-30% do tamanho de um quadro I.
  • Quadro B (interpolado): esse quadro é codificado em modo preditivo tanto com referência a quadros passados como a quadros futuros (quadros Is ou Ps). Como contém muito pouca informação, o quadro B nunca é usado como referência para os demais. Ele tem aproximadamente 50% do tamanho do quadro P.

Cada um dos quadros Ps ou Bs é codificado tomando-se a diferença entre os quadros originais e uma estimativa desse quadro. Para o cálculo dessa estimativa, no caso de quadros Ps, o quadro de referência anterior é utilizado em um processo que envolve estimação e compensação de movimento (EM/CM). Para os quadros Bs, o processo é semelhante, só que, nesse caso, são utilizados dois quadros de referência (um anterior e outro posterior) que, após o processo de EM/CM, são interpolados para formarem o quadro estimado. Os quadros de referência são os quadros Ps ou Is temporalmente mais próximos do quadro atual, um anterior e outro posterior. Esses quadros são recuperados no codificador e armazenados na memória de quadros para serem utilizados no processo de EM/CM. Os quadros do tipo B nunca são usados como referência. A Figura 29.3.5 ilustra o exemplo de estrutura temporal de sequência, na qual apresenta um exemplo de uma sequência de quadros ordenados, temporalmente. Nesse exemplo, para cada quadro, é dado o tipo de predição e os quadros de referência relacionados.

Figura 29.3.5 – Exemplo de estrutura temporal de sequência (m = distância entre ancoras; n = distância entre quadros tipoI).

Fonte: adaptado de FFMPEG – Decoder and encoder utility

Os quadros a serem codificados geralmente estão dispostos em ordem temporal, ou seja, de acordo com a ordem de apresentação na tela quando a seqüência é reproduzida. Quando os quadros são codificados, eles são incluídos no fluxo de bits de acordo com a ordem em que são decodificados, sendo esse ordenamento chamado de ordem de codificação. No decodificador é feito um novo re-ordenamento, sendo que os quadros são novamente dispostos em ordem temporal. Quando a sequência não contém quadros do tipo B, a ordem de codificação é igual à ordem temporal. Entretanto, se existem quadros B na sequência, a ordem de codificação é diferente da ordem temporal, pois se devem codificar as duas referências de um quadro B antes de codificá-lo. O seguinte exemplo ilustra esta situação:

Na entrada do codificador tem-se:

I1 B2 B3 P4 B5 B6 P7 P8 B9 I10 P11

Tabela 29.3.1 – Valores relativos à entrada do codificador

Fonte: adaptado de FFMPEG – Decoder and encoder utility

Na saída do codificador e na entrada do decodificador tem-se:

I1 P4 B2 B3 P7 B5 B6 P8 I10 B9 P11

Tabela 29.3.2 Valores relativos à saída e entrada do codificador

Fonte: adaptado de FFMPEG – Decoder and encoder utility

Na saída do decodificador tem-se:

I1 B2 B3 P4 B5 B6 P7 P8 B9 I10 P11

Tabela  29.3.3 – Valores relativos à saída do codificador

Fonte: adaptado de FFMPEG – Decoder and encoder utility

Para se explorar a correlação temporal existente na seqüência, utiliza-se uma técnica DPCM[114][24] . Basicamente, essa técnica consiste em se codificar a diferença entre o sinal e sua predição ao invés de se codificar o próprio sinal. No caso do padrão MPEG-2 [86] essa diferença é calculada entre o macro bloco atual e sua predição, que pode ser uma região de um quadro anterior ou uma média entre regiões de um quadro anterior e outro posterior.

O modo mais simples de se calcular uma predição para um macro bloco é utilizar macro blocos de um ou dois quadros da mesma região espacial, conforme ilustramos na figura 29.3.6 a codificação espacial:

Figura 100 - Codificação espacial

Figura 29.3.6 – Codificação Espacial

Fonte: adaptado de FFMPEG – Decoder and encoder utility

Essa técnica é eficiente em regiões da cena em que não há movimento. Entretanto, em áreas onde há movimento, a correlação entre pixels de mesma posição espacial, geralmente é pequena. Por isso, são utilizadas técnicas de estimação e compensação de movimento para tornar mais eficiente esse processo de predição, conforme ilustramos na figura 29.3.7 exemplos de codificação temporal:

Figura 100 - Codificação temporal

Figura 29.3.7 – Codificação Temporal

Fonte: adaptado de FFMPEG – Decoder and encoder utility

As técnicas de estimação de movimento utilizadas pelo padrão MPEG-2[86] são baseadas em casamento de blocos. Para cada bloco é realizada uma busca do vetor de deslocamento dentro de uma região do quadro de referência chamada janela de busca. Essa busca consiste em minimizar uma medida de disparidade, por exemplo, o erro quadrático médio MSE[80], conforme ilustramos na figura 29.3.8 relativos à equação:

Figura 29.3.8 – Erro quadrático médio

Fonte: adaptado de IP Streaming of MPEG-4: Native RTP vs MPEG-2

A Figura 29.3.9 ilustra o processo de estimação de movimento, na qual são apresentados exemplo de estimação de movimento em que o deslocamento do bloco atual em relação à mesma posição espacial no quadro de referência é representado pelo vetor d (vetor de deslocamento).

Quanto à forma de predição utilizada, basicamente, um macro bloco pode ser codificado de quatro modos:

  • Intracodificado;
  • Preditor utilizando-se o quadro de referência anterior;
  • Preditor utilizando-se o quadro de referência posterior;
  • Ou interpolado (utiliza os dois quadros de referência para formar a predição).

Figura 100 - Estimação de movimento

Figura 29.3.9 – Estimação de movimento

Fonte: adaptado de IP Streaming of MPEG-4: Native RTP  vs MPEG-2

O padrão MPEG-2[86] contempla algumas variações desses quatro modos básicos, por exemplo, o dual-prime e o 16×8. Nesse último, o macro bloco é dividido em dois e o processo de EM/CM é realizado para cada uma das partes de tamanho 16×8 pixels. Esse modo só é utilizado quando os campos do quadro são codificados individualmente. Os processos de predição e interpolação envolvem estimação e compensação de movimento. Se o macro bloco atual é predito, seja em relação ao quadro de referência anterior ou posterior, o macro bloco do quadro de referência que apresentou melhor casamento é utilizado como predição. No caso de macro blocos interpolados, a predição é formada tomando-se a média entre os macros blocos de melhor casamento de cada um dos quadros de referência.

Os dados a serem codificados e que são referentes a um macro bloco predito ou interpolado, resultam da diferença entre esse macro bloco e a sua predição. Tem-se então um macro bloco-diferença que é codificado de maneira semelhante a um macro bloco intracodificado, utilizando-se transformada DCT[153]  e codificação de entropia (código de Huffman e run-length). Os vetores de deslocamento resultantes do processo de EM/CM são codificados e incluídos no fluxo de bits (bitstream).

Todos os macros blocos de um quadro I são intracodificados. Nos quadros Ps pode-se ter macro blocos preditos em relação ao quadro de referência anterior, ou macro blocos intracodificados, o que equivale a utilizar um macro bloco nulo todos os elementos iguais a zero como predição. Finalmente, nos quadros Bs pode-se ter macro blocos interpolados, macro blocos preditos em relação ao quadro de referência anterior ou posterior, ou macro blocos intracodificados. A escolha de como é formada a predição para um macro bloco fica a cargo do projetista do codificador e, geralmente, depende da correlação entre o macro bloco atual e o macro bloco de melhor casamento de cada quadro de referência. Nos quadros B e P, existe a possibilidade de não se codificar determinado macro bloco. Nesse caso, o macro bloco é reconstruído no decodificador utilizando-se somente os quadros de referência e considerando nulos os vetores de movimento, se o quadro atual é do tipo P, ou tomando-se os vetores de movimento do último macro bloco codificado, se o quadro atual é do tipo B.

Os dados, resultantes desse processo, sejam eles correspondente a uma macro bloco original ou a um macro bloco-diferença, são divididos em blocos de tamanho 8×8. A cada bloco é aplicada uma transformação DCT[153]  bidimensional. A transformação DCT[153]  não resulta em compressão, entretanto descorrelaciona os coeficientes tornando mais eficiente o processo de compressão através de outras técnicas. Após a transformação DCT[153] , os coeficientes resultantes são quantizados. O padrão MPEG-2[86] só define o processo de quantização inversa, permitindo flexibilidade no projeto do quantizador.

Após a quantização, os blocos de 8×8 coeficientes quantizados são varridos em um padrão zig-zag para transformar os 64 coeficientes do bloco em uma seqüência serial de coeficientes quantizados. A varredura alternada é utilizada quando a seqüência de vídeo é entrelaçada e o bloco codificado contém informação dos campos par e ímpar, conforme ilustramos na figura 29.3.10:

Figura 100 - Modos de varreduras dos coeficientes do bloco transformado

Figura 29.3.10 – Modos de varreduras dos coeficientes do bloco transformado

Fonte: adaptado de IP Streaming of MPEG-4: Native RTP vs MPEG-2

Note que, resultante da quantização, ocorrerão longas seqüências de coeficientes nulos. As seqüências de coeficientes produzidas pela varredura zig-zag são codificadas pela contagem do numero r0 de coeficientes zeros que precedem um coeficiente c* não-zero, processo denominado codificação RLE[132] . A cada valor r0 há um respectivo valor c* associado. Cada par {r0, c*} é então codificado usando-se um código de comprimento variável VLC[162]  basicamente similar ao código de Huffman.

Quando se utiliza uma codificação diferencial, um dos problemas que podem ocorrer é a propagação de erros. Por exemplo, se ocorre erro na decodificação de um macro bloco que é utilizado como referência para se codificar outros macros blocos, o erro vai propagar até que esse macro bloco de referência seja substituído por outro decodificado sem erros. Por isso, o padrão MPEG[86]-2 recomenda que cada macro bloco que ocupa uma determinada posição espacial deve ser intracodificado, no máximo a cada 132 quadros.

Para os sistemas digitais recomenda-se que a atualização de quadros, ou seja, a codificação de quadros intracodificados (quadros Is), ocorra em intervalos de no máximo 0,5 segundo. Além disso, recomenda-se que seja enviado o cabeçalho de seqüência antes de cada quadro intracodificado. Esses procedimentos são necessários, pois quando um usuário sintoniza um determinado canal, essas informações (cabeçalho de seqüência e quadro I) serão necessárias para o início do processo de decodificação e reprodução do sinal de vídeo. O desempenho da qualidade de mudança (troca) de canal pelo usuário pode ser bastante afetado caso esses procedimentos não sejam observados.

A utilização de códigos de comprimento variável (VLC[162]) e codificação preditiva no processo de compressão fazem com que a taxa de bits seja variável ao longo do tempo em função da estatística do sinal de vídeo original. Como vários sistemas, incluindo o IPTV[72], utilizam taxas de bits constantes, é necessário um procedimento para controle de taxa. Esse controle é realizado através da utilização de um buffer na saída do codificador que simula o buffer da entrada do decodificador. O tamanho desse buffer deve ser tal que os atrasos de transmissão decorrentes da inserção desse buffer sejam toleráveis pelo sistema. Mecanismos de realimentação são utilizados para alterar parâmetros dos algoritmos de compressão de forma a evitar que o buffer do codificador não seja sobrecarregado (overflow), nem esvaziado abaixo de um determinado limiar (underflow). Os parâmetros mais utilizados para esse controle são os relacionados com os passos de quantização dos coeficientes.

A qualidade da imagem de um codificador/decodificador depende fortemente do conteúdo da imagem. Os conteúdos mais difíceis de codificar/decodificar são os que contêm cenas de ação como um filme ou jogo de basquete, uma imagem muito escura, ou muito clara, com relâmpagos, imagens com movimento de água (mar ou chuva). Entretanto, devido aos avanços dos algoritmos de compressão/descompressão, tem-se obtido excelentes resultados, com uma taxa de bits relativamente baixa, mesmo para esses conteúdos.

29.3.2 H.264/MPEG-4 AVC

H.264, MPEG-4 parte 10, ou MPEG-4 AVC  é o mais recente padrão de compressão e desenvolvido em conjunto pelo ITU-T VCEG[165] e pelo ISO/IEC MPEG[86]. A idéia do H.264/AVC[5]  foi a de criar um padrão capaz de proporcionar uma boa qualidade com taxas binárias notavelmente inferiores aos padrões anteriores, além de não incrementar a complexidade do seu projeto. O aumento na taxa de compressão pode chegar a 50% se comparado ao padrão MPEG-2 uns dos padrões mais utilizados atualmente.

O H.264/MPEG-4 AVC  representa alguns avanços na tecnologia de codificação de vídeo em termos de melhoras na eficiência da codificação e flexibilidade para o uso eficaz sobre vários tipos de redes e de aplicações. Sua codificação de vídeo é baseada nos conceitos de codificação de vídeo convencional de compensação de movimento baseado em blocos, mas com algumas importantes diferenças em relação ao padrão anterior. Os principais blocos de um codificador H.264 são: estimação de movimento, compensação de movimento, predição intra, transformadas diretas (T) e inversas (T-1), quantização direta (Q) e inversa (Q-1), filtro e codificação de entropia. A figura 29.3.2 ilustra o diagrama geral de um codificador H.264.

Figura 100 - Diagrama geral de um codificador H.264

Figura 29.3.2 – Diagrama geral de um codificador H.264

Fonte: adaptado de IP Streaming of MPEG-4: Native RTP  vs MPEG-2

O H.264/MPEG-4 AVC[5] [86]  contém algumas características que lhe permitem comprimir vídeo de uma maneira muito mais eficiente do que padrões mais antigos, e traz mais flexibilidade para aplicações em diversos ambientes de rede, como citado nos tópicos a seguir:

  • Compensação de movimento com amostra precisa. A maioria dos padrões prévios permite calcular com exatidão o vetor do movimento. O novo padrão continua calculando esse vetor com exatidão, mas reduz a complexidade do processo de interpolação quando comparado ao MPEG-2[86].
  • Compensação de movimento multi-imagem usando imagens codificadas anteriormente como referência, permitindo usar 32 imagens de referência contra as 1 ou 2 imagens usadas em padrões anteriores. Essa característica em particular permite melhorias consideráveis na taxa binária e na qualidade de imagem.
  • Compensação de movimento de bloco de tamanho variável com blocos 16×16 e 4×4 permitindo uma segmentação precisa de regiões de movimento. Esse padrão suporta mais flexibilidade na seleção de tamanhos e de formas de bloco da compensação do movimento quando comparado com o padrão precedente.
  • Vetores de movimentos além dos limites do quadro. Enquanto que os vetores de movimento do MPEG-2[86] e de seus predecessores eram requeridos para apontar somente às áreas dentro do quadro de referência previamente decodificado, a técnica de extrapolação dos limites encontrada primeiramente como uma característica opcional no H.263 é incluída no H.264/AVC[5] .
  • Precisão de 1/4 de pixel para compensação de movimento, permitindo uma descrição muito precisa de deslocamentos de áreas de movimento. Para a crominância a resolução é tipicamente reduzida à metade e, portanto a precisão de compensação de movimento se reduz para 1/8 de pixel.
  • Precisão ponderada que permite ao codificador especificar o escalonamento quando executa compensação de movimento. Isso pode melhorar drasticamente a eficiência da codificação para cenas que contêm fades (fade-to-black, fade-in, e cross-fade).
  • Codificação aritmética binária adaptável segundo o contexto CABAC[18] , que é uma técnica inteligente para comprimir, sem perdas, elementos de sintaxe no fluxo de vídeo sabendo as probabilidades de elementos de sintaxe num dado contexto.
  • Codificação de comprimento variável adaptável segundo o contexto CAVLC[19], que é uma alternativa de baixa complexidade ao CABAC[18]  para a codificação de valores de coeficientes quantificados. Embora tenha uma complexidade mais baixa do que CABAC[18] , CAVLC[19] é mais elaborada e mais eficiente do que os métodos usados tipicamente para codificar coeficientes em outros projetos prévios.
  • Ordenação de macro blocos flexível (FMO[50]) e ordenação arbitrária de fatias (ASO[8]) são técnicas para reestruturar a maneira como se representa a ordenação das regiões fundamentais (chamadas macro blocos) nas imagens. Tais ordenações FMO[50]  e ASO[8], consideradas tipicamente como fazendo parte de uma característica de robustez de erros/perdas, também podem ser usadas para outras finalidades. O ASO[8] pode melhorar o atraso em aplicações de tempo real, particularmente quando usada em rede que tem comportamento de entrega fora de ordem, como redes IP.
  • Partição de dados DP, uma característica que permite separar elementos mais importantes e menos importantes da sintaxe em diferentes pacotes de dados, possibilitando a aplicação da proteção de erro desigual UEP[157], e outros tipos de melhoria da robustez de erros/perdas.
  • Fatias redundantes RS, uma característica de robustez de erros/perda que permite que um codificador emita uma representação extra de uma região da imagem tipicamente de baixa fidelidade para poder ser usada quando a representação preliminar estiver corrompida ou perdida.
  • Um processo automático simples para impedir a emulação acidental dos códigos iniciais, que são seqüências especiais de bits nos dados codificados que permitem o acesso aleatório no fluxo de bits e a recuperação do alinhamento de bytes em sistemas que podem perder a sincronização de bytes.
  • Contagem da ordem da imagem, uma característica que serve para manter a ordem das imagens e dos valores das amostras das imagens decodificadas e isoladas da informação de sincronismo (permitindo que a informação de sincronismo seja transportada e controlada/modificada separadamente por um sistema sem afetar o conteúdo decodificado da imagem).

Todas às supracitadas técnicas ajudam o H.264 a ter um desempenho significativamente melhor do que qualquer outro padrão anterior. O H.264 pode ter um desempenho radicalmente melhor do que MPEG-2[86] vídeo (tipicamente obtém a mesma qualidade, mas com metade, ou menos de metade, do débito binário).

29.3.3 VC-1

O VC-1 é uma especificação de compressão de vídeo padronizada pela SMPTE[135]  421M em 2006 e implementada pela Microsoft como Microsoft® Windows Media® (WMV9).

O VC-1 foi projetado para alcançar o estado da arte da compressão de vídeo com largura de banda bem baixa ou bem alta, dependendo da resolução.

A funcionalidade básica do VC-1 envolve a compensação de movimentos baseada em blocos e o esquema da transformada espacial similar ao usado pelos outros padrões de compressão. Entretanto, VC-1 inclui um número de inovações e otimizações que o diferem dos outros esquemas de compressão, resultando em uma excelente qualidade e eficiência.

A seguir apresenta-se uma breve descrição de algumas dessas inovações:

  • Transformada de tamanho do bloco adaptativo: Tradicionalmente, as transformadas 8×8 têm sido usadas para a codificação de imagens e vídeos. Entretanto, existe uma evidência que sugere que transformadas 4×4 podem reduzir artefatos nas bordas e descontinuidades. VC-1 é capaz de codificar um bloco 8×8 usando uma transformada 8×8, duas transformadas 8×4, duas transformadas 4×8, ou quatro transformadas 4×4. Essa característica permite que a codificação tire proveito dos diferentes tamanhos de transformada para uma melhor qualidade de imagem;
  • De forma a minimizar a complexidade computacional do decodificador, VC-1 usa transformadas de 16-bits. Isso também tem a vantagem de facilitar a implementação do hardware do decodificador fazendo com que ele seja tão eficiente quanto possível;
  • A compensação de movimento é o processo de gerar a predição do quadro de vídeo a partir do quadro de referência. Tipicamente, a predição é formada por blocos de dados de 8×8 ou macro blocos de 16×16. O deslocamento dos dados devido ao movimento é definido por um vetor de movimento, que captura o deslocamento ao longo dos eixos X e Y;
  • A eficiência do codificador é afetada pelo tamanho do bloco predito, pela granularidade dos dados que podem ser capturados, e pelo tipo de filtro usado para gerar a predição. VC-1 usa blocos de 16×16 para a predição, com a habilidade de gerar vários quadros de blocos de 16×16 e 8×8. A granularidade mais fina suportada pelo VC-1 é de 1/4 de pixel;
  • VC-1 combina os ajustes do vetor do movimento definidos pelo tamanho de bloco, pela granularidade e pelo tipo do filtro. O resultado é quatro modalidades de compensação de movimento que servem para diversas situações.
  • Loop Filtering: VC-1 usa filtro de desbloqueio in-loop que tenta remover descontinuidades das bordas introduzidas por erros de quantização nos quadros interpolados. Essas descontinuidades podem causar artefatos visíveis nos quadros decodificados sendo que elas podem impactar a qualidade do quadro como um preditor para um quadro interpolado futuro;
  • O filtro in-loop leva em consideração a transformada de tamanho de bloco de forma adaptativa. O filtro é também otimizado para reduzir o número das operações requeridas;
  • Codificação entrelaçada (interlace coding): o conteúdo de vídeo entrelaçado é usado extensamente na transmissão de TV. Ao codificar o conteúdo entrelaçado, o codificador VC-1 pode tirar vantagem das características de quadros entrelaçados para melhorar a compressão. Isto é alcançado usando dados de ambos os campos para predizer a compensação de movimento nos quadros interpolados.
  • Codificação avançada do quadro B: O VC-1 inclui diversas otimizações que fazem os quadros tipo B mais eficientes.
  • Devido à natureza da compressão que usa a compensação do movimento, a codificação dos quadros de vídeo que contêm efeito de desvanecimento (fade) para ou do preto é muito ineficiente. O VC-1 inclui a compensação desvanecimento (fading) e quando detecta esse efeito, faz uso de métodos alternados para ajustar a luminância. Essa característica melhora a eficiência da compressão para seqüências com desvanecimento e outras mudanças globais de iluminação.
  • As taxas de compressão vídeo para MPEG-2[86], H.264, e VC-1 para canais de definição padrão e alta definição, são mostradas na tabela 29.3.3:
MODELO SDTV HDTV
MPEG-2 2 2 – 4 Mbps 16 – 19 Mbps
H.264 1,5 – 2 Mbps 6 – 8 Mbps
WM9 (VC-1) 1,5 – 2 Mbps 6 – 8 Mbps

Tabela 29.3.3 – Taxas de compreensão de vídeo.

Fonte: adaptado de IP Streaming of MPEG-4: Native RTP vs MPEG-2

Algumas das mais importantes funcionalidades das normas abordadas são comparadas na figura 29.3.3:

Figura 100 - Principais funcionalidades do MPEG-2 e VC-1

Figura 29.3.3 – Principais funcionalidades do MPEG-2 e VC-1

Fonte: adaptado de IP Streaming of MPEG-4: Native RTP vs MPEG-2

29.4 COMPRESSÃO DE ÁUDIO

29.4.1 MPEG ÁUDIO

O MPEG-2[86] Áudio foi desenvolvido com base no MPEG-1[86], fazendo com que os benefícios deste proporcionassem maior qualidade e maior eficiência, propiciando um padrão de qualidade para satisfazer os requisitos necessários para as redes digitais.

Além dos canais mono e estéreo que o MPEG-1[86] suporta, foi adicionado suporte para múltiplos canais. Assim, o MPEG-2[86] tem a possibilidade de suportar até cinco canais de som (esquerdo, direito, centro e dois canais de surround e mais um canal de graves), ou, em extensão, sete canais mais um canal de graves. Isso possibilita ter em casa o som com o mesmo desempenho de algumas salas de cinema, permitindo a reprodução de som estereofônico mais realista. As figuras 29.4.1 e 29.4.2 mostram a estrutura de MPEG[86] Áudio.

Figura 100 - Codificador MPEG Áudio

Figura 29.4.1 Codificador MPEG Áudio

Fonte: adaptado de IPTV Guide – Delivering audio and video over broadband

Figura 100 - Decodificador MPEG Áudio

Figura 29.4.2 – Decodificador MPEG Áudio

Fonte: adaptado de IPTV Guide – Delivering audio and video over broadband

O MPEG-2[86] possui outras funções, como a característica multilíngue, que permite, por exemplo, que um filme possa ser ouvido em diferentes linguagens, de acordo com a escolha do telespectador.

Existem duas formas para efetuar a compressão de áudio:

  1. Consiste em reduzir a frequência de amostragem;
  2. Reduzir a resolução da amostra para um valor inferior.

O MPEG[86] áudio leva em conta o modelo psico-acústico humano para realizar uma compressão “perceptualmente sem perdas”, não se pode fazer grandes alterações na freqüência de amostragem para se obter uma boa qualidade, pois o ouvido humano escuta até 20 kHz. Por isso o modelo divide o domínio de freqüência audível (entre 20 Hz e 20 kHz) em 32 bandas, cada uma delas chamada de banda crítica. O sistema de audição tem uma resolução limitada e dependente da freqüência. A medida perceptualmente uniforme de freqüências pode ser expressa em termos das larguras das bandas críticas.

O modelo leva em conta o mascaramento de freqüências, característica do ouvido humano que quando submetido a um sinal de certa amplitude em uma dada freqüência, mascara as outras freqüências ao redor, que possuam uma amplitude abaixo de certo limite. Conforme ilustrado na figura 29.4.3

Figura 100 - Mascaramento de freqüências.

Figura 29.4.3 –  Mascaramento de freqüências.

Fonte: adaptado de IPTV Guide – Delivering audio and video over broadband

MPEG[86] áudio transforma o sinal para o domínio da freqüência e aplica o mascaramento de freqüências, codificando apenas aqueles componentes de frequência que não são mascaradas, conforme ilustramos na figura 29.4.4.

Figura 100 - Mascaramento de freqüências nas bandas críticas MPEG.

Figura 29.4.4 – Mascaramento de frequências nas bandas críticas MPEG[86].

Fonte: adaptado de IPTV[72] Guide – Delivering audio and video over broadband

29.4.1.1 DOLBY DIGITAL (AC-3)

O AC-3 é o antigo nome do Dolby Digital. Trata-se de um sistema de compressão de áudio mais avançado do que o MPEG[86] desenvolvido em 1992. Essa codificação é proprietária da empresa Dolby, mas vem sendo utilizada em DVDs e em vários sistemas de transmissão digital. Elas utilizam seis canais discretos de áudio, sendo cinco com qualidade de CD (20 Hz a 20 kHz) e um apenas para as baixas freqüências (20 a 120 Hz). A taxa dessa codificação é de cerca de 380 Kbps. A Figura 29.4.1 ilustra a distribuição sugerida de alto-falantes para os seis canais de áudio:

MTS-TV-Surround-Diagram

Figura 31.1.2 – Áudio multicanal.

Fonte: adaptado de Dolby Digital

Dolby Digital divide o espectro de áudio em bandas de freqüências estreitas usando modelos matemáticos derivados das características do ouvido humano e analisa cada banda separadamente. Para maximizar a eficiência de dados, os maiores números de bits representam os sinais mais audíveis e menos bits representam os sinais menos audíveis. Para determinar a audibilidade dos sinais, o sistema realiza o mascaramento, fenômeno já explicado anteriormente.

Anúncios
%d blogueiros gostam disto: