Pourquoi la vidéo H.264 est-elle tellement plus rapide dans un conteneur FLV que dans un conteneur MP4?

9

Je développe un site de tube et j'ai actuellement des problèmes avec le format H.264. J'ai remarqué que YouTube a mis leurs vidéos haute définition dans un conteneur MP4, donc logiquement, j'ai fait la même chose.

Ensuite, j'ai installé mod_h264_streamingpour lighttpd pour que le streaming et le nettoyage de la chronologie fonctionnent.

Le problème est que les fichiers volumineux (> 500 Mo à une résolution quelque peu élevée) prennent une éternité pour même commencer la mise en mémoire tampon (j'ai lu que Flowplayer et les autres lecteurs Flash doivent d'abord télécharger les métadonnées). J'ai déplacé l'atome xmov à l'avant du fichier avec MP4Box (j'ai aussi essayé Qt QuickStart), mais cela n'a pas aidé.

Ensuite, j'ai lu que j'avais besoin d'entrelacer des pistes audio, alors je l'ai fait aussi. Cela n'a provoqué aucun changement: les vidéos étaient encore lentes.

J'ai donc essayé de mettre exactement le même film H.264 dans un conteneur FLV, et la mise en mémoire tampon de la lecture a commencé presque instantanément - pas de lenteur.

Alors qu'est-ce que je manque ici? Pourquoi devrais-je choisir un conteneur MP4 avec le module mod_264_streaming, qui semble super lent, par rapport à un conteneur FLV standard avec lighttpd intégré mod_flv_streaming? Évidemment, de nombreux sites Web choisissent le conteneur MP4, mais je ne comprends pas pourquoi.

Et comme question secondaire, j'ai essayé d'utiliser la <video>balise HTML5 pour essayer le même film H.264 MP4, et le nettoyage était rapide comme l'éclair ! J'ai regardé le fichier journal de lighttpd, et j'ai remarqué que les lecteurs Flash s'ajoutent à video.mp4?start=234chaque fois que la chronologie est nettoyée, tandis que les navigateurs utilisant la <video>balise HTML5 native ne font rien de tel. Est-ce une sorte de limitation de Flash? Pourquoi le streaming Flash ne peut-il pas être aussi rapide que le streaming HTML5?

Gotys
la source

Réponses:

4

TL; DR: MP4 est utilisé lorsque le site vidéo stocke plus de métadonnées dans la vidéo que FLV ne le prend en charge, ou utilise un codec audio que FLV ne prend pas en charge. La simplicité et la conception pour le streaming de FLV en font un bon choix si vous n'avez pas de bonnes raisons d'utiliser MP4.

En ce qui concerne le nettoyage de la chronologie de flash, je n'ai aucune idée pourquoi il le fait puisque je n'ai jamais codé flash, mais il est possible que ce soit un bouton qu'il utilise ou quelque chose qui fonctionne spécifiquement avec le serveur de streaming d'Adobe afin de rechercher dans le fichier. Cela fonctionne également comme un moyen d'empêcher l'utilisateur embêtant de conserver le fichier sur son disque.


Quelques trucs que vous saviez déjà:

Il existe des différences fondamentales entre les conteneurs FLVet MP4(aka isomedia). FLV a été conçu par Adobe dès le départ comme un conteneur de streaming, et c'est vraiment sacrément simple . Tout ce qu'il fait, c'est envoyer un paquet vidéo, puis un paquet audio, puis un paquet vidéo ... Cependant, il ne prend en charge que très peu de codecs, et aucune métadonnée autre que des horodatages en millisecondes. Sauf si vous avez besoin de fonctionnalités spécifiques à MP4, vous feriez très bien avec FLV.

Le support ISO, quant à lui, est basé sur le conteneur MOV d'Apple. Il est séparé en atomes, et il y a un atome particulier moov, qui doit être décodé avant de pouvoir lire d' autres atomes . Le problème que vous rencontrez avec MP4 est que l' moovatome est écrit à la fin du fichier, ce qui est beaucoup plus facile à faire pour encoder des programmes. Il existe des outils, tels que qtfaststart , qui feront le munging nécessaire pour mettre l' moovatome au début du fichier. Ainsi, le fichier commencera la lecture dès qu'il aura des données, au lieu d'avoir besoin d'être entièrement téléchargé avant de commencer.

Jessidhia
la source
0

Si vous utilisez un conteneur mov, il sort de la boîte sans avoir besoin d'installer des modules ou de le placer dans un conteneur flv et d'utiliser un module. Juste mes pensées. Utilisez mov et ajoutez le type de mime approprié - fait.

RobotHumains
la source