2011-11-24 15 views
6

Estoy trabajando en una aplicación donde los usuarios cargan un video y lo reproducen usando jwplayer, jplayer, flowplayer, etc. Algunos videos se reproducen inmediatamente, mientras que otros esperan hasta que se haya descargado todo el archivo de video.¿Por qué algunos videos MP4 no comenzarán a transmitirse hasta que se descargue todo el archivo?

Estoy usando ffmpeg para convertir el video al formato mp4.

Aquí hay información detallada acerca de uno de los archivos de video que probé.

General 
Complete name     : 429183132058337290450_AutoFF.mp4 
Format       : MPEG-4 
Format profile     : Base Media 
Codec ID       : isom 
File size      : 10.2 MiB 
Duration       : 24s 333ms 
Overall bit rate     : 3 501 Kbps 

Video 
ID        : 1 
Format       : AVC 
Format/Info      : Advanced Video Codec 
Format profile     : [email protected] 
Format settings, CABAC   : Yes 
Format settings, ReFrames  : 3 frames 
Codec ID       : avc1 
Codec ID/Info     : Advanced Video Coding 
Duration       : 24s 333ms 
Bit rate mode     : Variable 
Bit rate       : 3 351 Kbps 
Width       : 1 024 pixels 
Height       : 560 pixels 
Display aspect ratio    : 16:9 
Frame rate mode     : Constant 
Frame rate      : 30.000 fps 
Color space      : YUV 
Chroma subsampling    : 4:2:0 
Bit depth      : 8 bits 
Scan type      : Progressive 
Bits/(Pixel*Frame)    : 0.195 
Stream size      : 9.72 MiB (96%) 
Language       : Japanese 

Respuesta

6

Tuve este problema con algunos videos MP4 también. Estaba convirtiendo videos cargados en mp4 (h.264 + aac) y no almacenan en búfer. La razón es que este formato contiene algunos metadatos importantes necesarios para la reproducción al final del archivo, por lo tanto, el archivo completo debe cargarse antes de que la reproducción pueda comenzar. La solución fue utilizar un pequeño programa llamado qt-faststart (https://github.com/danielgtaylor/qtfaststart) sobre el resultado de la conversión. Este programa reubica estos metadatos al principio del archivo haciendo posible la reproducción progresiva de la descarga.

0

tenía este mismo problema durante más tiempo cuando se utiliza ffmpeg para crear videos MP4 - lo que finalmente funcionó, fue la simple adición de precarga = "metadatos" a la etiqueta HTML 5:

<video preload="metadata"><source src="..." /></video> 
5

Uso ffmpeg con el -movflags +faststart opción. Esto reubicará el átomo moov al principio del archivo, permitiendo así que el cliente comience la reproducción sin la necesidad de descargar completamente el archivo primero.

Se puede utilizar en el comando de codificación, o se puede usar con un archivo existente y simplemente re-mux:

ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4 
Cuestiones relacionadas