moovrelocator – qt-faststart / QTIndexSwapper für PHP

In einem Projekt, an dem ich aktuell arbeite, setzt man auf PHP-basiertes HTTP-Pseudostreaming. Innerhalb der zu entwickelnden Anwendung können Videos hochgeladen werden, welche dann mittels FFmpeg zu MP4-Dateien konvertiert werden.

Genau an diesem Punkt liegt auch schon das eigentliche „Problem“, da das für das HTTP-Pseudostreaming (progressiver Download) benötigte MOOV-Atom (das sind die Metadaten in MP4-Dateien) von FFmpeg an das Ende der Datei geschrieben wird. Dies ist insofern unglücklick, da für die Anzeige des Videos also erst die gesamte Datei heruntergeladen werden muss. Der ISO-Standard für MP4-Dateien sieht keine spezielle Position für das MOOV-Atom vor. Es obliegt der konvertierenden/erstellenden Software, ob dieses an den Anfang oder das Ende der Datei geschrieben wird.

Die Entwickler des (sehr guten) Flowplayer sagen zu der Problematik folgendes:

„Preparing your movie files for pseudostreaming – H.264 files and metadata
In H.264-based video formats (mp4, m4v) the metadata is called a „moov atom“. The moov atom is a part of the file that holds the index information for the whole file.

Many encoding software programs such as FFmpeg will insert this moov atom information at the end of the video file. This is bad. The moov atom needs to be located at the beginning of the file, or else the entire file will have to be downloaded before it begins playing.

Fortunately, Renaun Erickson at Adobe has kindly created a small AIR application that will take a standard H.264 file and relocate the moov atom to the front of the file, and then progressive downloading works properly. Running your video file through this application makes your MP4 files ready for pseudostreaming. Of course you need to have those keyframes in place (see above)“.

Wie ihr euch sicherlich vorstellen könnt, wäre dies ein absolutes Auschlusskriterium für den Einsatz von FFmpeg als Konvertierungswerkzeug. Da FFmpeg aber bei allen anderen Anforderungen glänzt, mussten wir eine Lösung finden, die sich in den geplanten und teilweise schon bestehenden Prozess integrieren lässt. Außer qt-faststart und QTIndexSwapper gab es keinerlei bestehende Softwarelösung (vor allem in PHP geschrieben) die unser Vorhaben möglich gemacht hätte.

So habe ich kurzerhand einen Prototypen geschrieben, der an sich eine Portierung von AS3 zu PHP der von Renaun Erickson (Adobe) veröffentlichen AIR-App „QTIndexSwapper“ ist. Diesen Prototypen (Bibliothek) habe ich  „Moovrelocator“ getauft. Das Projekt, mehr Informationen, sowie die aktuelle Version findet ihr hier.
Hier geht es direkt zum Download.

2 Antworten zu “moovrelocator – qt-faststart / QTIndexSwapper für PHP”

  1. slevytam sagt:

    Hi,

    For some reason when I try to make run moovrelocator twice in one script it fails. The first run works great.

    Can you help with this?

    Thanks,

    slevytam

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

*