2011-11-24 13 views
6

Sto lavorando a un'applicazione in cui gli utenti caricano un video e riproducono il browser utilizzando jwplayer, jplayer, flowplayer, ecc. Alcuni video vengono riprodotti immediatamente, mentre altri aspettano che l'intero file video sia stato scaricato.Perché alcuni video MP4 non iniziano lo streaming fino a quando non viene scaricato l'intero file?

Sto utilizzando ffmpeg per convertire il video in formato mp4.

Ecco alcune informazioni dettagliate su uno dei file video che ho provato.

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 

risposta

6

Ho avuto questo problema anche con alcuni video MP4. Stavo convertendo video caricati in mp4 (h.264 + aac) e non avrebbero bufferizzato. Il motivo è che questo formato contiene alcuni metadati importanti necessari per la riproduzione alla fine del file, quindi l'intero file deve essere caricato prima che possa iniziare la riproduzione. La soluzione era utilizzare un piccolo programma chiamato (https://github.com/danielgtaylor/qtfaststart) sul risultato della conversione. Questo programma trasferisce questi metadati all'inizio del file rendendo possibile la riproduzione con download progressivo.

0

Ho avuto questo stesso problema per il tempo più lungo quando si utilizza ffmpeg per creare video MP4 - quello che alla fine ha funzionato, era semplicemente aggiungendo preload = "metadati" al tag HTML5:

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

Utilizzare ffmpeg con la -movflags +faststart opzione. Questo trasferirà l'atomo moov all'inizio del file, consentendo così la riproduzione al client senza la necessità di scaricare prima il file.

Si può usare nel vostro comando di codifica, oppure è possibile utilizzare con un file esistente e semplicemente ri-mux:

ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4 
Problemi correlati