Por que o vídeo H.264 é muito mais rápido em um contêiner FLV do que em um contêiner MP4?


9

Estou desenvolvendo um site de tubo e atualmente estou tendo problemas com o formato H.264. Percebi que o YouTube colocou seus vídeos em alta definição em um contêiner MP4, então, logicamente, fiz o mesmo.

Em seguida, instalei o mod_h264_streaminglighttpd para fazer funcionar o fluxo e a limpeza da linha do tempo.

O problema é que arquivos grandes (> 500 MB em alta resolução) levam uma eternidade para iniciar o buffer (eu li que o Flowplayer e outros Flash players precisam baixar primeiro os metadados). Movi o átomo xmov para a frente do arquivo com o MP4Box (tentei o Qt QuickStart também), mas isso não ajudou.

Em seguida, li que preciso intercalar faixas de áudio, e também o fiz. Isso não causou alterações: os vídeos ainda estavam lentos.

Então, tentei colocar exatamente o mesmo filme H.264 em um contêiner FLV, e o buffer de reprodução começou quase instantaneamente - sem lentidão.

Então, o que estou perdendo aqui? Por que escolheria o contêiner MP4 com o módulo mod_264_streaming, que parece super lento, em vez de um contêiner FLV comum com o lighttpd embutido mod_flv_streaming? Obviamente, muitos sites escolhem o contêiner MP4, mas não entendo o porquê.

E como uma questão paralela, tentei usar a <video>tag HTML5 para tentar o mesmo filme H.264 MP4, e a lavagem foi super rápida ! Examinei o arquivo de log do lighttpd e notei que os Flash players acrescentam video.mp4?start=234cada vez que a linha do tempo é limpa, enquanto os navegadores que usam a <video>tag HTML5 nativa não fazem isso. Isso é algum tipo de limitação do Flash? Por que o streaming em Flash não pode ser tão rápido quanto o streaming em HTML5?

Respostas:


4

TL; DR: MP4 é usado quando o site de vídeo armazena mais metadados no vídeo do que o FLV suporta ou usa um codec de áudio que o FLV não suporta. A simplicidade e o design de fluxo contínuo do FLV o tornam uma boa opção se você não tiver um bom motivo para usar o MP4.

Quanto à limpeza da linha do tempo do flash, não tenho idéia do porquê disso, já que nunca codifiquei o flash, mas é possível que seja um botão que ele use ou algo que funcione especificamente com o servidor de streaming da adobe para procurar no arquivo. Também funciona como uma maneira de impedir que o usuário traquina mantenha o arquivo em seu disco.


Algumas coisas que você já sabia:

Existem diferenças fundamentais entre os FLVe MP4recipientes (aka isomedia). O FLV foi desenvolvido pela Adobe desde o início como um contêiner de streaming e é realmente muito simples . Tudo o que ele faz é enviar um pacote de vídeo, pacote de áudio e pacote de vídeo ... No entanto, ele suporta apenas muito poucos codecs e nenhum metadado além dos carimbos de data e hora em milissegundos. A menos que você precise de recursos específicos para MP4, você faria bem com o FLV.

A mídia ISO, por outro lado, é baseada no contêiner MOV da Apple. Ele é separado em átomos e existe um átomo em particular moovque precisa ser decodificado antes que outros átomos possam ser lidos. O problema que você está enfrentando com o MP4 é porque o moovatom é gravado no final do arquivo, o que é muito mais fácil de fazer nos programas de codificação. Existem ferramentas, como qtfaststart , que executam a operação necessária para colocar o moovátomo no início do arquivo. Portanto, o arquivo iniciará a reprodução assim que tiver dados, em vez de precisar ser totalmente baixado antes de iniciar.


0

Se você usa um contêiner mov, ele sai da caixa sem a necessidade de instalar módulos ou colocar em um contêiner flv e usar um módulo. Apenas meus pensamentos. Use mov e adicione o tipo MIME apropriado - concluído.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.