Streaming A / V: quem é multiplexado e codificado, onde e quando?

1

Eu estava lendo atentamente a lista dos formatos de vídeo / áudio suportados pelo VLC e percebi que realmente sei muito pouco sobre streaming de mídia.

Quando um fluxo de mídia contém áudio e vídeo, como esses sinais separados são mesclados / integrados em um? Em algum momento, suponho que um quadro de vídeo (de uma câmera) e um quadro de som (de um microfone) se multiplexem juntos no mesmo sinal?

Eu diria que que, a partir daí, o sinal A / V integrado fica codificado?

Ou os dois são codificados separadamente e depois integrados / multiplexados juntos?

E é multiplexação até mesmo a palavra / processo certo para descrever como eles são integrados?

Obrigado antecipadamente.

    
por pnongrata 07.12.2012 / 20:46

1 resposta

1

Primeiro de tudo, você tem que diferenciar entre um codec de vídeo / áudio , e um recipiente multimídia . Eu falei de maneira mais detalhada sobre a diferença entre codecs e containers em outra resposta de superusuário . Resumidamente, há um contêiner para armazenar vários fluxos de bits de áudio e vídeo (e legendas, dados, imagens, ...).

Esseprocessodemesclarfluxosdebitsemumcontêineré,defato,conhecidocomo"multiplexação". Você poderia chamar o processo de intercalar áudio / vídeo para uma multiplexação de contêiner, mas falando estritamente este termo se aplica à multiplexação do Fluxo de Transporte MPEG-2. Nós vamos chegar a isso mais tarde.

Agora, existem vários formatos de contêineres, mas todos eles servem para os mesmos propósitos: Lidar com a sincronização dos fluxos internos. Você quer ter certeza de que partes pertencentes juntas sejam tocadas ao mesmo tempo. O contêiner contém informações meta que informam especificamente a um dispositivo de reprodução onde procurar e o que tocar, digamos 00: 02: 01.250.

Outras coisas que os contêineres permitem que você faça incluem informações sobre o próprio fluxo. Por exemplo, em muitos contextos de streaming, o player precisa saber o tamanho do vídeo, sua taxa de quadros, várias outras coisas. Quando você faz stream de um arquivo MP4 (o MPEG-4 Parte 14 é um contêiner, não um codec), você quer o MOOV átomo para ser colocado no início do arquivo, para que o jogador possa analisá-lo imediatamente. Normalmente, esse "átomo" de dados ficava no final do arquivo, onde não é realmente útil, porque você teria que baixar o arquivo inteiro antes de fazer o streaming. É por isso que existem ferramentas para movê-lo para o início, como o qt-faststart .

O que importa é que em qualquer aplicativo multimídia que multiplexe contêineres de fluxos de bits individuais, esses fluxos serão codificados primeiro. Não há "sinal A / V integrado" codificado - o contêiner simplesmente envolve o que está lá e não toca nos dados reais de áudio e vídeo. Então, seu vídeo é alimentado para um codificador de vídeo, seu áudio é alimentado para um codificador de áudio. O resultado de ambas as tarefas é mesclado / intercalado no contêiner. O contêiner cuidará da montagem do fluxo de bits final que pode ser transmitido em um contexto de fluxo ou salvo como um arquivo.

Agora, existem muitos contêineres adequados para diferentes aplicativos. Fluxos de transporte MPEG-2 são comumente usados na transmissão de TV. Aqui, vários canais de TV são multiplexados em um único contêiner, que é então transmitido pelo ar, cabo ou satélite. O método de multiplexação é multiplexação por divisão de tempo . Aqui, "multiplexação" também é o termo técnico correto. Para outros contêineres, não é usado com freqüência . MPEG-4 Parte 14 (MP4, já mencionamos isso antes), por outro lado, é muito comum em o contexto web e móvel, e está se tornando cada vez mais um padrão para a troca de arquivos, mesmo no campo profissional.

Existem outros contêineres, como MKV , Ogg , Fluxos do Programa MPEG , FLV e muito mais. Qual deles escolher depende do aplicativo, como você pode ver, mas isso iria muito além do escopo aqui.

    
por 07.12.2012 / 21:45