Partilhar via


Media Foundation: Conceitos Essenciais

Se você é novo em mídia digital, este tópico apresenta alguns conceitos que você precisará entender antes de escrever um aplicativo Media Foundation.

Fluxos

Um fluxo é uma sequência de dados de mídia com um tipo uniforme. Os tipos mais comuns são áudio e vídeo, mas um fluxo pode conter praticamente qualquer tipo de dados, incluindo texto, comandos de script e imagens estáticas. O termo stream nesta documentação não significa a entrega através de uma rede. Um arquivo de mídia destinado à reprodução local também contém fluxos.

Normalmente, um arquivo de mídia contém um único fluxo de áudio ou exatamente um fluxo de vídeo e um fluxo de áudio. No entanto, um arquivo de mídia pode conter vários fluxos do mesmo tipo. Por exemplo, um arquivo de vídeo pode conter fluxos de áudio em vários idiomas diferentes. Em tempo de execução, o aplicativo selecionaria qual fluxo usar.

Compressão

Compressão refere-se a qualquer processo que diminui o tamanho de um fluxo de dados ao remover informações redundantes. Os algoritmos de compressão dividem-se em duas grandes categorias:

  • Compressão de sem perdas. Usando um algoritmo sem perdas, os dados reconstruídos são idênticos ao original.
  • Compressão com perdas. Usando um algoritmo com perdas, os dados reconstruídos são uma aproximação do original, mas não são uma correspondência exata.

Na maioria dos outros domínios, a compressão com perdas não é aceitável. (Imagina receber de volta uma "aproximação" de uma folha de cálculo!) Mas os esquemas de compressão com perdas são adequados para áudio e vídeo, por várias razões.

A primeira razão tem a ver com a física da perceção humana. Quando ouvimos um som complexo, como uma gravação de música, algumas das informações contidas nesse som não são percetíveis ao ouvido. Com a ajuda da teoria de processamento de sinais, é possível analisar e separar as frequências que não podem ser percebidas. Estas frequências podem ser removidas sem efeito percetivo. Embora o áudio reconstruído não corresponda exatamente ao original, ele soará o mesmo para o ouvinte. Princípios semelhantes se aplicam ao vídeo.

Em segundo lugar, alguma degradação na qualidade do som ou da imagem pode ser aceitável, dependendo da finalidade pretendida. Na telefonia, por exemplo, o áudio é muitas vezes altamente comprimido. O resultado é bom o suficiente para uma conversa por telefone, mas você não gostaria de ouvir uma orquestra sinfônica por telefone.

A compactação também é chamada de codificação , e um dispositivo que codifica é chamado de codificador de . O processo inverso é descodificação, e o dispositivo é naturalmente chamado de decodificador de . O termo geral para codificadores e decodificadores é codec. Codecs podem ser implementados em hardware ou software.

A tecnologia de compressão mudou rapidamente desde o advento da mídia digital, e um grande número de esquemas de compressão estão em uso hoje. Este fato é um dos principais desafios para a programação de mídia digital.

Contentores de multimédia

É raro armazenar um fluxo de áudio ou vídeo bruto como um arquivo de computador, ou enviar um diretamente pela rede. Por um lado, seria impossível decodificar tal fluxo, sem saber de antemão qual codec usar. Portanto, os arquivos de mídia geralmente contêm pelo menos alguns dos seguintes elementos:

  • Cabeçalhos de arquivo que descrevem o número de fluxos, o formato de cada fluxo e assim por diante.
  • Um índice que permite o acesso aleatório ao conteúdo.
  • Metadados que descrevem o conteúdo (por exemplo, o artista ou o título).
  • Cabeçalhos de pacote, para permitir a transmissão de rede ou acesso aleatório.

Esta documentação usa o termo contêiner para descrever todo o pacote de fluxos, cabeçalhos, índices, metadados e assim por diante. A razão para usar o termo contentor em vez de ficheiro é que alguns formatos de contentores são projetados para transmissão em direto. Um aplicativo pode gerar o contêiner em tempo real, nunca armazenando-o em um arquivo.

Um exemplo inicial de um contêiner de mídia é o formato de arquivo AVI. Outros exemplos incluem MP4 e Advanced Systems Format (ASF). Os contêineres podem ser identificados por extensão de nome de arquivo (por exemplo, .mp4) ou por tipo MIME.

O diagrama a seguir mostra uma estrutura típica para um contêiner de mídia. O diagrama não representa nenhum formato específico; Os detalhes de cada formato variam muito.

diagrama mostrando um contêiner de mídia típico

Observe que a estrutura mostrada no diagrama é hierárquica, com informações de cabeçalho aparecendo no início do contêiner. Essa estrutura é típica de muitos (mas não todos) formatos de contêiner. Observe também que a seção de dados contém pacotes de áudio e vídeo intercalados. Este tipo de intercalação é comum em contentores multimédia.

O termo multiplexação refere-se ao processo de empacotar os fluxos de áudio e vídeo e intercalar os pacotes no contentor. O processo inverso, reagregando os fluxos a partir dos dados empacotados, é chamado de desmultiplexação.

Formatos

Nos meios digitais, o termo formato é ambíguo. Um formato pode referir-se ao tipo de codificação , como vídeo H.264, ou ao contentor , como MP4. Esta distinção é muitas vezes confusa para os utilizadores comuns. Os nomes dados aos formatos de mídia nem sempre ajudam. Por exemplo, MP3 refere-se a um formato de codificação (MPEG-1 Audio Layer 3) e a um formato de arquivo.

A distinção é importante, no entanto, porque a leitura de um arquivo de mídia na verdade envolve duas etapas:

  1. Primeiro, o recipiente deve ser analisado. Na maioria dos casos, o número de fluxos e o formato de cada fluxo não podem ser conhecidos até que esta etapa seja concluída.
  2. Em seguida, caso os fluxos estejam compactados, devem ser decodificados utilizando os decodificadores apropriados.

Este fato leva muito naturalmente a um projeto de software onde componentes separados são usados para analisar contêineres e decodificar fluxos. Além disso, essa abordagem se presta a um modelo de plug-in, para que terceiros possam fornecer seus próprios analisadores e codecs. No Windows, o COM (Component Object Model) fornece uma maneira padrão de separar uma API de sua implementação, que é um requisito para qualquer modelo de plug-in. Por esta razão (entre outras), Media Foundation usa interfaces COM.

O diagrama a seguir mostra os componentes usados para ler um arquivo de mídia:

diagrama mostrando os componentes para ler um arquivo de mídia

Escrever um arquivo de mídia também requer duas etapas:

  1. Codificação dos dados de áudio/vídeo não comprimidos.
  2. Colocar os dados compactados em um formato de contêiner específico.

O diagrama a seguir mostra os componentes usados para gravar um arquivo de mídia:

diagrama mostrando os componentes para escrever um arquivo de mídia.

Guia de Programação da Media Foundation