Perché il video H.264 è molto più veloce in un contenitore FLV che in un contenitore MP4?


9

Sto sviluppando un sito di tubi e attualmente sto riscontrando problemi con il formato H.264. Ho notato che YouTube ha messo i suoi video in alta definizione in un contenitore MP4, quindi logicamente ho fatto lo stesso.

Successivamente, ho installato mod_h264_streamingLighttpd per far funzionare lo streaming e la pulizia della sequenza temporale.

Il problema è che i file di grandi dimensioni (> 500 MB a una risoluzione un po 'alta) impiegano un'eternità per iniziare anche il buffering (ho letto che Flowplayer e altri lettori Flash devono prima scaricare i metadati). Ho spostato l'atomo xmov nella parte anteriore del file con MP4Box (ho provato anche Qt QuickStart), ma questo non ha aiutato.

Successivamente, ho letto che devo intercalare le tracce audio, quindi l'ho fatto anch'io. Ciò non ha causato alcun cambiamento: i video erano ancora lenti.

Quindi ho provato a mettere esattamente lo stesso film H.264 in un contenitore FLV e il buffering di riproduzione è iniziato quasi all'istante - nessuna lentezza.

Quindi cosa mi sto perdendo qui? Perché dovrei scegliere un contenitore MP4 con il modulo mod_264_streaming, che sembra super-lento, su un normale contenitore FLV con lighttpd integrato mod_flv_streaming? Ovviamente, molti siti web scelgono il contenitore MP4, ma non riesco a capire il perché.

E come domanda secondaria, ho provato a usare il <video>tag HTML5 per provare lo stesso film H.264 MP4, e il lavaggio è stato velocissimo ! Ho esaminato il file di registro di lighttpd e ho notato che i lettori Flash si accodavano video.mp4?start=234ogni volta che si trascina la linea temporale, mentre i browser che utilizzano il <video>tag HTML5 nativo non fanno nulla del genere. È una sorta di limitazione di Flash? Perché lo streaming Flash non può essere veloce come lo streaming HTML5?

Risposte:


4

TL; DR: MP4 viene utilizzato quando il sito video memorizza più metadati nel video di quelli supportati da FLV o utilizza un codec audio che FLV non supporta. La semplicità di FLV e il design per lo streaming lo rendono una buona scelta se non si ha una buona ragione per usare MP4.

Per quanto riguarda lo scrubbing della timeline di Flash, non ho idea del motivo per cui non ho mai programmato Flash, ma è possibile che sia una manopola che utilizza, o qualcosa che funziona specificamente con il server di streaming di Adobe per cercare nel file. Funziona anche come un modo per impedire all'utente fastidioso di mantenere il file sul suo disco.


Alcune cose che già sapevi:

Esistono differenze fondamentali tra i contenitori FLVe MP4(aka isomedia). FLV è stato ideato da Adobe sin dall'inizio come contenitore di streaming ed è davvero dannatamente semplice . Tutto ciò che fa è inviare un pacchetto video, quindi un pacchetto audio, quindi un pacchetto video ... Tuttavia, supporta solo pochissimi codec e nessun metadata diverso dai timestamp in millisecondi. A meno che non siano necessarie funzionalità specifiche di MP4, con FLV andresti benissimo.

I supporti ISO, d'altra parte, si basano sul contenitore MOV di Apple. È separato in atomi e c'è un atomo particolare moov, che deve essere decodificato prima di poter leggere qualsiasi altro atomo . Il problema che stai riscontrando con MP4 è perché l' moovatomo è scritto alla fine del file, il che è molto più facile da fare per i programmi di codifica. Esistono strumenti, come qtfaststart , che eseguiranno il munging necessario per posizionare l' moovatomo all'inizio del file. Pertanto, il file inizierà la riproduzione non appena contiene dati, invece di dover essere scaricato completamente prima di iniziare.


0

Se si utilizza un contenitore mov, questo viene riprodotto immediatamente senza la necessità di installare moduli o posizionarlo in un contenitore flv e utilizzare un modulo. Solo i miei pensieri. Usa mov e aggiungi il tipo mime appropriato - fatto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.