¿Por qué el video H.264 es mucho más rápido en un contenedor FLV que en un contenedor MP4?

9

Estoy desarrollando un sitio de tubo y actualmente tengo problemas con el formato H.264. Noté que YouTube puso sus videos de alta definición en un contenedor MP4, así que lógicamente hice lo mismo.

Luego, instalé mod_h264_streamingpara lighttpd para hacer que la transmisión y la limpieza de la línea de tiempo funcionen.

El problema es que los archivos grandes (> 500 MB a una resolución algo alta) tardan una eternidad en comenzar a almacenarse en el búfer (leí que Flowplayer y otros reproductores Flash necesitan descargar metadatos primero). Moví el átomo xmov al frente del archivo con MP4Box (también probé Qt QuickStart), pero eso no ayudó.

Luego, leí que necesitaba intercalar pistas de audio, así que también lo hice. Esto no causó ningún cambio: los videos aún eran lentos.

Así que intenté poner exactamente la misma película H.264 en un contenedor FLV, y el almacenamiento en búfer de reproducción comenzó casi instantáneamente, sin lentitud.

Entonces, ¿qué me estoy perdiendo aquí? ¿Por qué elegiría el contenedor MP4 con el módulo mod_264_streaming, que parece súper lento, en lugar de un contenedor FLV normal con lighttpd incorporado mod_flv_streaming? Obviamente, muchos sitios web eligen el contenedor MP4, pero no entiendo por qué.

Y como pregunta adicional, intenté usar la <video>etiqueta HTML5 para probar la misma película H.264 MP4, ¡y el fregado fue increíblemente rápido ! Miré el archivo de registro de lighttpd y noté que los reproductores Flash se agregan video.mp4?start=234cada vez que se borra la línea de tiempo, mientras que los navegadores que usan la <video>etiqueta HTML5 nativa no hacen tal cosa. ¿Es esto algún tipo de limitación de Flash? ¿Por qué la transmisión Flash no puede ser tan rápida como la transmisión HTML5?

Gotys
fuente

Respuestas:

4

TL; DR: MP4 se usa cuando el sitio de video almacena más metadatos en el video de los que admite FLV, o usa un códec de audio que FLV no admite. La simplicidad de FLV y el diseño de transmisión lo convierten en una buena opción si no tiene una buena razón para usar MP4.

En cuanto al barrido de la línea de tiempo de flash, no tengo idea de por qué lo hace, ya que nunca codifiqué flash, pero es posible que sea un mando que utilice, o algo que funcione específicamente con el servidor de transmisión de adobe para buscar en el archivo. También funciona como una forma de evitar que el molesto usuario mantenga el archivo en su disco.


Algunas cosas que ya sabías:

Existen diferencias fundamentales entre los contenedores FLVy MP4(también conocido como isomedia). Adobe ideó FLV desde el principio como un contenedor de transmisión, y es realmente muy simple . Todo lo que hace es enviar un paquete de video, luego un paquete de audio, luego un paquete de video ... Sin embargo, solo admite muy pocos códecs, y no hay metadatos que no sean marcas de tiempo en milisegundos. A menos que necesite funciones específicas de MP4, funcionaría bien con FLV.

Los medios ISO, por otro lado, se basan en el contenedor MOV de Apple. Está separado en átomos, y hay un átomo en particular moov, que debe decodificarse antes de que se pueda leer cualquier otro átomo . El problema que tiene con MP4 es porque el moovátomo está escrito al final del archivo, lo cual es mucho más fácil de hacer para codificar programas. Existen herramientas, como qtfaststart , que harán la combinación necesaria para colocar el moovátomo al comienzo del archivo. Por lo tanto, el archivo comenzará a reproducirse tan pronto como tenga datos, en lugar de necesitar descargarse completamente antes de comenzar.

Jessidhia
fuente
0

Si usa un contenedor mov, sale de la caja sin necesidad de instalar módulos o colocarlo en un contenedor flv y usar un módulo. Solo mis pensamientos. Use mov y agregue el tipo mime apropiado: listo.

RobotHumanos
fuente