2013-03-27 25 views
15

Vedo tonnellate di domande sul trasferimento dell'atomo moov dalla fine di un contenitore video MP4 all'inizio, per rendere il video "ottimizzato per il web" o più semplice da trasmettere. Sembra che molti strumenti richiedano un'opzione esplicita per fare ciò quando si codifica il video, se è disponibile a tutti.C'è uno svantaggio nel mettere l'atomo di MOOV all'inizio di un file MP4?

Se posizionare l'atomo all'inizio fa sì che lo streaming funzioni meglio, ed è costoso farlo after-the-fact, perché dovrei voler codificare il video con l'atomo alla fine? Qual è il vantaggio?

risposta

13

Codificare il MOOV alla fine del file è di solito un'operazione predefinita per i codificatori video perché tendono a funzionare scrivendo il file di output in one-pass e il contenuto esatto e la dimensione dell'atomo MOOV possono essere solo conosciuti dopo aver scritto interamente i dati audio e video, perché contiene file di dimensioni assolute.

L'esempio principale di questo è FFMpeg, con una spiegazione trovato in questa risposta: https://stackoverflow.com/a/8066089/393701

FFMpeg ha un'opzione per riservare spazio per questo atomo, ma non è garantito che i dati si adatta perfettamente.

Avere l'atomo di MOOV alla fine non ha alcun beneficio speciale, non è altrettanto scomodo nelle situazioni di riproduzione locale dove cercare alla fine del file prima che la riproduzione non sia costosa come nella consegna di download progressiva.

+2

È difficile immaginare che, nello scopo di prendere 30 minuti, o un'ora, o dieci, per creare un film codificato, chiunque noterebbe il minuto in più o due necessari per scrivere l'atomo MOOV quindi copiare su il resto dei segmenti di dati finiti. Sicuramente il costo I/O è sminuito dal calcolo necessario per eseguire la codifica in primo luogo? – Coderer

+2

Suppongo che dipenda dal software di codifica, ma ffmpeg è purtroppo abbastanza generico da "riscrivere il file dopo il fatto" ha bisogno di un grande refactoring nello stato corrente delle cose. C'è un problema simile con i file FLV e i metadati, in modo che ci siano software come flvtool o flvmeta necessari per iniettarli correttamente dopo la codifica. Bisogna anche rendersi conto che i codificatori video non sempre scrivono i dati su flussi ricercabili (ad esempio, i flussi di rete), dove non è possibile tornare indietro. – SirDarius

+0

So che questo è fuori moda ma lo farò ancora chiedere; l'elemento video di Android può riprodurre solo i file mp4, quindi anche se l'elemento moov è alla fine, continua a riprodurre i video tramite lo stream http senza alcun problema. com'è possibile? come fa Android a gestire il video senza moov atom? –

4

Si desidera sempre inserire le informazioni di indice all'inizio del file, non esiste alcun costo nascosto per questo layout tranne l'unico: mentre si esegue la cattura/transcodifica potrebbe non essere possibile sapere in anticipo quanto spazio si bisogno di quell'atomo di MOOV all'inizio, e i suoi dati non sono ancora ben disponibili. Quindi normalmente scrivi il payload direttamente nel file e completa la scrittura aggiungendo MOOV e aggiornando il resto del file.