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 tendo problemas com o formato H.264. Percebi que o YouTube colocou seus vídeos de alta definição em um contêiner MP4, então, logicamente, fiz o mesmo.

Em seguida, instalei mod_h264_streaming para o lighttpd para fazer o trabalho de streaming e depuração de timeline.

O problema é que arquivos grandes (> 500MB em resolução um pouco alta) demoram para até mesmo iniciar o armazenamento em buffer (eu li que o Flowplayer e outros players Flash precisam fazer o download dos metadados primeiro). Mudei o átomo xmov para a frente do arquivo com MP4Box (eu tentei o Qt QuickStart também), mas isso não ajudou.

Em seguida, eu li que preciso intercalar faixas de áudio, então fiz isso também. Isso não causou mudanças: 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 um contêiner FLV normal com o mod_flv_streaming integrado do lighttpd? Obviamente, muitos sites escolhem o contêiner MP4, mas não consigo entender o porquê.

E como pergunta secundária, tentei usar a tag HTML5 <video> para testar o mesmo filme MP4 H.264, e a depuração foi muito rápida ! Analisei o arquivo de log do lighttpd e notei que os Flash players acrescentam video.mp4?start=234 cada vez que o cronograma é limpo, enquanto os navegadores que usam a tag HTML5 <video> nativa não fazem isso. Isso é algum tipo de limitação do Flash? Por que a transmissão em Flash não pode ser tão rápida quanto a transmissão em HTML5?

    
por Gotys 02.05.2010 / 11:30

2 respostas

4

TL; DR: MP4 é usado quando o site de vídeo armazena mais metadados no vídeo do que o FLV, ou usa um codec de áudio que o FLV não suporta. A simplicidade do FLV e o design para streaming fazem com que seja uma boa escolha se você não tiver um bom motivo para usar o MP4.

Quanto à depuração da linha do tempo do flash, não faço ideia de por que ela faz isso, pois nunca codifiquei o flash, mas é possível usar um botão ou algo que funcione especificamente com o servidor de streaming da Adobe para procurar no arquivo. Ele também funciona como uma maneira de impedir que o usuário chato mantenha o arquivo em seu disco.

Algumas coisas que você já sabia:

Existem diferenças fundamentais entre os contêineres FLV e MP4 (isomedia). O FLV foi desenvolvido pela Adobe desde o início como um contêiner de streaming, e é muito simples . Tudo o que ele faz é enviar um pacote de vídeo, depois um pacote de áudio e depois um pacote de vídeo ... No entanto, ele suporta apenas alguns codecs e nenhum outro metadado além de timestamps em milissegundos. A menos que você precise de recursos específicos do MP4, você se sairia bem com o FLV.

A mídia ISO, por outro lado, é baseada no contêiner MOV da Apple. Ele é separado em átomos, e há um átomo em particular, moov , que precisa ser decodificado antes que qualquer outro átomo possa ser lido. O problema que você está tendo com o MP4 é que o moov atom é gravado no final do arquivo, o que é muito mais fácil de fazer para codificar programas. Existem ferramentas, como qtfaststart , que farão o balanço necessário para colocar o moov atom no início do arquivo. Assim, o arquivo iniciará a reprodução assim que tiver dados, em vez de precisar fazer o download completo antes de iniciar.

    
por 03.04.2012 / 14:59
0

Se você usa um contêiner mov, ele sai da caixa sem a necessidade de instalar módulos ou colocá-los em um contêiner flv e usar um módulo. Apenas meus pensamentos. Use mov e adicione o tipo mime apropriado - pronto.

    
por 08.03.2011 / 07:31