flv Konvertierung on the fly

Microhome

Erfahrenes Mitglied
Guten morgen liebe Community,
ich habe die ganze Nacht nach einer Möglichkeit gesucht, Videos während des Uploads in flv zu konvertieren, jedoch nichts wirklich sinnvolles gefunden, denn mittels ffmpeg kann ich die Datei ja anscheinend lediglich erst nach dem Upload in das Flash-Format umwandeln. Kennt ihr eine entsprechende Möglichkeit, vllt. via Ruby o.Ä.?

Was ich versuchen möchte zu realisieren ist eigentlich genau diese Idee


Ich bin für jede Idee dankbar!!
 
Auf der Seite wird beschrieben, das der Upload zunächst durchgeführt wird, und erst nach dem Upload ein Batch läuft, der die Konvertierung vornimmt.

Das ist nicht wirklich ein Problem. Das Anliegen ist allerdings, das während der Konvertierungsprozess läuft, die Webapplication in der Lage ist, den Status der Konvertierung abzufragen. Hier fangen die Probleme an, denn man müsste einen Dienst auf dem Server laufen lassen, der quasi über Push-Verfahren Daten in eine DB rein pumpt, während die Konvertierung läuft.

Auch das ist nicht wirklich schwer, ein sportliches Projekt, wofür man allerdings eine vernünftige Planung und Umsetzung benötigt. Sowas zu bezahlen könnte teuer werden.

Kurze Estimation:

Planung & Technical Design: 3 PT
Implementierung Webapplikation: 2PT
Implementierung Konvertierungsservice: 8-10PT
Tests: 2-3PT
Tasks: 2-3PT

Somit bist du bei ca. 20PT. Wie gesagt, das könnte teuer werden.

Grüße
 
Ja, da hast du recht, dort werden die Uploads quasi zwischengelagert.
Ich möchte für dieses Projekt niemanden beauftragen. Da ich selbst seit mehr als 10 Jahren Webdesigner bin, möchte ich versuchen, das ganze selbst umzusetzen.

Um auf die Frage zurückzukommen: Kann ich den Upload irgendwie an ffmpeg pipen, sodass die Konvertierung eben "on-the-fly" funktioniert?


Beste Grüße und ein sonniges Wochenende!
 
Ja, sollte gehen. Wenn du den Mime-Type der hoch geladenen Datei kennst, kannst du sie einfach umbennenen (move_uploaded_file()) und anschließend mittels ffmpeg (exec(), system(), etc.) Konvertieren. Allerdings würde ich das so nicht tun:

- Die Browser-Connection vom Client würde so lange weiter laufen, bis ffmpeg seine Arbeit beendet hat => Webserver davon auch betroffen
- Benutzer kann die Verarbeitung evtl. abbrechen, während die Konvertierung läuft.

Daher mein Tipp mit dem Daemon im Hintergrund.
 
Also meinst du es ist besser, die Dateien erst abzuloaden und dann mit einem Script (bspw. via Cronjob) zu konvertieren? Ich denke das mach ich auch so, denn damit wird es auch einfacher den Status abzufragen. Ein Script kann dann ganz einfach prüfen, ob die Originaldatei noch existiert. Ist das der Fall, wurde sie noch nicht konvertiert bzw. ist gerade dabei umgewandelt zu werden. Erst nachdem die Originaldatei gelöscht wurde (Konvertierung komplett) kann das flv-File benutzt werden.

Das einzige Problem, welches ich nun noch habe, ist der Status des Uploads. Ich weiß, dass es via APC Modul möglich ist, aber gibt es da nicht eine andere Möglichkeit? Könnte ich nicht parallel zu dem Upload via AJAX ein Script pollen, welches mir alle 5 Sekunden die Größe des bereits kopierten Teils zurück gibt?


Beste Grüße und ein sonniges Restwochenende!
 
Könnte ich nicht parallel zu dem Upload via AJAX ein Script pollen, welches mir alle 5 Sekunden die Größe des bereits kopierten Teils zurück gibt?

Ja, das sollte möglich sein. Allerdings wird es interessant, wie du bspw. den Verlauf auslesen willst. Ich kenne jetzt ffmpeg nicht so genau, hab es noch nie benutzt. Wenn ffmpeg eine Ausgabe macht, wie weit der Prozess fortgeschritten ist, könntest du ein Wrapper-Programm schreiben, das die Ausgabe in eine Datei oder Datenbank schreibt.

Mit einem weiteren Script (über Ajax) kannst du dann die Datei/DB auslesen und entsprechend darstellen.

Vielleicht bietet ffmpeg ja auch an, die Ausgabe umzuleiten.

Grüße
 
Naja die ffmpeg Sache ist ja nicht mehr relevant, denn das erledigt ja der Daemon NACHDEM die Datei upgeloadet wurde. Wie gesagt, es geht nur noch um den Upload über PHP selbst. Wenn ich also bspw. eine 300 MB Datei hochlade möchte ich alle 5 Sekunden angezeigt bekommen, wie viel Daten bereits übertragen wurden, sprich wie groß die angelegte temp-Datei auf dem Server ist. Ich denke das sollte via AJAX möglich sein. Ich probiers einfach mal aus :-)
 
Zurück