Raw Bitstream vs Container?

2

Estou pesquisando formatos de multimídia (embora recentemente tenha sido dito para não usar a palavra "format" porque é ambígua.)

Aprendi que um arquivo de vídeo é composto de Raw Bitstream codificado de acordo com algum tipo de padrão, por exemplo, H.264 , então esse bitstream é empacotado em um Container , por exemplo .mp4 .

i.e. Bitstream bruto (codificado para um protocolo padrão) + Container = Meu arquivo de vídeo

Eu aprendi isso com este outro artigo SuperUser: O que é um codec (por exemplo, DivX?), e como ele difere de um formato de arquivo (por exemplo, MPG)?

Neste artigo, também foi dito:

Until now we've only explained the raw "bitstream", which is basically just really raw video data. You could actually go ahead and watch the video using such a raw bitstream. But in most cases that's just not enough or not practical.

Therefore, you need to wrap the video in a container. There are several reasons why:

-Maybe you want some audio along with the video.

-Maybe you want to skip to a certain part in the video (like, "go to 1:32:20.12").

-Both audio and video should be perfectly synchronized.

-The video might need to be transmitted over a reliable network and split into packets before.

-The video might even be sent over a lossy network (like 3G) and split into packets before.

Eu realmente não entendo porque um Bitstream Raw não pode ser usado, e como um container pode permitir todas essas coisas . Ele diz que eles podem , mas ele não explica como , e é para isso que estou chegando.

Isso provavelmente é porque eu nunca lidei com Raw Bitstreams, na minha vida. Eu sempre clico em um arquivo contêiner .mp4 e ele simplesmente funciona.

Alguém pode explicar a mágica dos contêineres e como eles aumentam os fluxos de bits brutos?

    
por Anton Paras 21.11.2015 / 23:34

1 resposta

1

Os contêineres adicionam metadados a um ou vários "fluxos de bits brutos". Pode-se imaginar o último como um filme tradicional: uma série de imagens, nada mais. O contêiner atuaria como a caixa em que o rolo de filme é armazenado: ele adiciona o título, as posições do índice (a cena 2 começa às 03:45), o comprimento total e assim por diante.

Vídeo puro sem um contêiner pode funcionar; As durações podem obviamente ser calculadas sem um índice, mas são rapidamente impraticáveis - o vídeo inteiro precisa ser decodificado para obter seu comprimento total, já que a quantidade de dados necessária para armazenar um segundo de filme não é necessariamente constante (alguns codecs permitem taxas de quadros variáveis). Para avançar dez segundos, seria necessário pré-decodificar dez segundos de vídeo; para voltar dez segundos, a re-decodificação desde o início estaria envolvida, ou um índice de execução do que já foi visto precisaria ser mantido. Não é bonita e não é eficiente.

Assim, no caso de streaming, os contêineres simplificam as operações, como procurar ou obter comprimento total; Não é necessário fazer o pré-download de mais dados do que realmente necessário. Uma sessão de observação pode começar em meio ponto, sem fazer o download e decodificar o primeiro semestre.

As mesmas limitações se aplicam ao áudio puro.

Portanto, agora para áudio e vídeo sincronizados, são necessários dois fluxos de dados distintos. Alternar entre ler dois arquivos (mesmo que cada um tenha seu contêiner distinto) envolveria um impacto de desempenho inútil e, em um computador carregado, pode significar que o vídeo está pronto para ser reproduzido, mas o áudio ainda espera no disco. Os contêineres dividem os dados em clusters gerenciáveis de curta duração (alguns segundos no máximo) onde o vídeo e o áudio estão localizados próximos um do outro no meio de armazenamento (ou na rede). Se a transmissão ocorrer em uma rede com perdas e os pacotes forem perdidos, o player poderá facilmente retomar a reprodução do próximo cluster, sem a necessidade de lidar com a estimativa de perda de dados para garantir que vídeo e áudio sejam mantidos em sincronia.

Assim, os contêineres armazenam principalmente informações redundantes que podem ser facilmente reunidas a partir dos "fluxos de bits brutos", mas essa adição torna muitas operações mais eficientes e adiciona confiabilidade.

    
por 22.11.2015 / 20:14