Wie generieren "moov vor mdat" MP4-video-Dateien mit hoher Leistung (minimale I/O)?

Ich bin der Gestaltung einer server-Anwendung, speichert ein live-H. 264-video-stream als MP4 für den späteren Verbrauch von Browsern. Da ein server muss um wie viele gleichzeitige streams möglich, glaube ich I/O werden die natürlichen Engpass, und ich möchte zu halten I/O auf ein minimum. Ich bin in den klassischen MP4 moov/mdat Bestellung problem: MP4-Generatoren schreib lieber die mdat-box (enthält die eigentlichen Medien-frames), dann schreiben Sie das moov-Atom (mit Datei-offsets und andere strukturelle Informationen) später, nach der es tatsächlich weiß, was die mdat-Datei-offsets. MP4 Verbraucher lieber das Gegenteil für progressive streaming -- Lesen der moov-die erste, also die mdat-Struktur bekannt ist und das video mit dem spielen beginnen kann schnell, ohne den download der gesamten Datei.

Die übliche Lösung ist ein post-process-MP4-Dateien zu verschieben, das moov-Atom vor der mdat-box, und umschreiben von Datei-offsets entsprechend. Jedoch, für eine high-volume-Anwendung ist, ich möchte vermeiden die I/O-Strafe schreiben, der eingehende video-Daten auf der Festplatte, liest er alles wieder an, und schreiben Sie es wieder mit einem neuen arrangement.

Mehrere Ansätze kommen in den Sinn:

  1. Post-Prozess die MP4 als üblich, dass die I/O-Strafe und möglicherweise verzögern die video ' s Verfügbarkeit. (nicht gut.)
  2. Verwenden fragmentierten MP4 und kleine fragment-Größen, die angemessen sind, um in den Speicher passt. (Dies könnte negative Auswirkungen auf die gesamte-Datei seekability, würde ich denken.)
  3. Es wäre fantastisch, wenn Dateisysteme, vorausgesetzt, eine schnelle "Stelle" option zum hinzufügen neuer Blöcke an den Anfang der Datei-block-Kette. (Ich glaube nicht, das ist bisher erfunden worden.)
  4. Generieren Sie die MP4 als zwei Dateien-eine "mdat" - Datei (enthält die eigentlichen Medien-frames) und "moov" - Datei (enthält die ftyp Kopf-und moov-Daten). Diese beiden Dateien, wenn verkettet, würde die Vorlage eines gültigen moov-die erste MP4-Datei. Eine einfache web-server-Modul könnte ein virtueller .mp4-Datei für den Benutzer, aber Lesen die .moov und .mdat-Dateien hinter den kulissen.

Ich bin Neigung in Richtung #4 für heute. Gibt es eine praktischere Weise um dieses problem zu lösen?

Schreibe einen Kommentar