WCF und FFMPEG

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • WCF und FFMPEG

    Hallo,

    nachdem FFMPEG nun funktioniert, bekomme ich - nachdem ich es im WCF als Klasse eingebunden habe - folgenden Fehler:

    Quellcode

    1. Fatal error: PHP notice in file /var/kunden/webs/---/wcf/lib/data/user/Upload.class.php (341): ffmpeg_movie::__construct() [<a href=''></a>]: Header: 4FD11A01


    Quellcode

    1. ### Video verarbeiten ###
    2. public function Video($dateiName,$dateiTempName,$dateiGroesse,$dateiTyp,$userID,$username,$funktionID,$funktionName) {
    3. ### Allgemein ###
    4. $progressbar = new progressbar(0, 100, 200, 20);
    5. $time = time();
    6. $progress = $progressbar->print_code();
    7. WCF::getTPL()->assign('progress', $progress);
    8. $dateiZufall = md5(uniqid(rand(), true));
    9. $dateiEndung = StringUtil::toLowerCase(StringUtil::substring($dateiName, StringUtil::lastIndexOf($dateiName, '.') + 1));
    10. $dateiDatei = "/var/kunden/webs/---/dateiData/videos/$userID.$dateiZufall." . $dateiEndung;
    11. ### Video auf den Server laden ###
    12. move_uploaded_file($dateiTempName,$dateiDatei);
    13. $dateiDateiFlv = "/var/kunden/webs/---/dateiData/videos/$userID.$dateiZufall.flv";
    14. ### Video in FLV umwandeln ###
    15. // Set our source file
    16. $srcFile = "/var/kunden/webs/---/dateiData/videos/$userID.$dateiZufall." . $dateiEndung;
    17. $destFile = "/var/kunden/webs/---/dateiData/videos/$userID.$dateiZufall.flv";
    18. $ffmpegPath = "/usr/local/bin/ffmpeg";
    19. $flvtool2Path = "/bin/flvtool++";
    20. // Create our FFMPEG-PHP class
    21. $ffmpegObj = new ffmpeg_movie($srcFile);
    22. // Save our needed variables
    23. $srcWidth = makeMultipleTwo($ffmpegObj->getFrameWidth());
    24. $srcHeight = makeMultipleTwo($ffmpegObj->getFrameHeight());
    25. $srcFPS = $ffmpegObj->getFrameRate();
    26. $srcAB = intval($ffmpegObj->getAudioBitRate()/1000);
    27. $srcAR = $ffmpegObj->getAudioSampleRate();
    28. // Call our convert using exec()
    29. exec($ffmpegPath . " -i " . $srcFile . " -ar " . $srcAR . " -ab " . $srcAB . " -f flv -s " . $srcWidth . "x" . $srcHeight . " " . $destFile . " | " . $flvtool2Path . " -U stdin " . $destFile);
    30. exec($ffmpegPath . " -y -i " . $destFile . " -acodec libmp3lame -ar " . $srcAB . " -ab 32k -f flv -vhook -f /grafiken/watermarkOne.png -m 1 -t 000000 -s" . $srcWidth . "x" . $srcHeight . " " . $destFile);
    31. // Make multiples function
    32. function makeMultipleTwo ($value)
    33. {
    34. $sType = gettype($value/2);
    35. if($sType == "integer")
    36. {
    37. return $value;
    38. } else {
    39. return ($value-1);
    40. }
    41. }
    42. $dateiDateiImg = "/var/kunden/webs/---/dateiData/videos/img_to_video/$userID.$dateiZufall.gif";
    43. ### Video-Img erstellen und speichern ###
    44. new ffmpeg_animated_gif($dateiDateiImg, 0, 650, 20, 0);
    45. ### Aktion loggen ###
    46. require_once (WCF_DIR.'lib/data/user/LogSystem.class.php');
    47. $LogSystemD = new LogSystem();
    48. $LogSystemD->Upload("Datei-Upload",$dateiName,$dateiTempName,$dateiGroesse,$dateiTyp,"BenutzerID: $userID // Benutzername: $username","Dateipfad: $dateiDatei");
    49. ### Datei in Datenbank schreiben ###
    50. $sql = "INSERT dateidata_videos (ID,funktionID,funktionName,dateiName,dateiTempName,dateiGroesse,dateiTyp,userID,username,dateipfadOriginal,dateipfadFlv,dateipfadImg,time) VALUES ('','$funktionID','$funktionName','$dateiName','$dateiTempName','$dateiGroesse','$dateiTyp','$userID','$username','$dateiDatei','$dateiDateiFlv','$dateiDateiImg','$time')";
    51. $result = WBBCore::getDB()->sendQuery($sql);
    52. for($i = 0; $i < 200; $i++)
    53. {
    54. $progressbar->step();
    55. usleep(50000);
    56. }
    57. return mysql_insert_id();
    58. }
    59. ### ### ### ###
    Alles anzeigen


    Die betreffende Zeile:

    Quellcode

    1. $ffmpegObj = new ffmpeg_movie($srcFile);



    Woran kann das liegen?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Gnex ()

  • Hallo,

    danke für eure Tipps.

    Das Problem ist in erster Linie nicht, dass der Fehler ausgegeben wird (habe die Datei mal ausgelagert), sonder dass nun eine Datei (FLV) mit 0KB erstellt wird.

    Der Code ist der gleiche wie oben, nur ohne Zugriff über das WCF.
  • Hallo,

    leider sehe ich nicht, wo der Pfad falsch ist (Irgendwie bin ich momentan blind).

    // Edit: Er erstellt mir eine FLV in 0KB, ich weiß nicht, warum. Die Pfade stimmen alle.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Gnex ()

  • Hallo,

    die folgende Klasse regelt den Upload der Videos und wandelt sie auch um:

    Quellcode

    1. ### Video verarbeiten ###
    2. public function Video($dateiName,$dateiTempName,$dateiGroesse,$dateiTyp,$userID,$username,$funktionID,$funktionName) {
    3. ### Allgemein ###
    4. $time = time();
    5. $dateiZufall = md5(uniqid(rand(), true));
    6. $dateiEndung = StringUtil::toLowerCase(StringUtil::substring($dateiName, StringUtil::lastIndexOf($dateiName, '.') + 1));
    7. $dateiDatei = "/var/kunden/webs/---/dateiData/videos/$userID.$dateiZufall.original." . $dateiEndung;
    8. $dateiDateiFlv = "/var/kunden/webs/---/dateiData/videos/$userID.$dateiZufall.flvd.flv";
    9. $dateiDateiImg = "/var/kunden/webs/---/dateiData/videos/img_to_video/$userID.$dateiZufall.image.gif";
    10. ### Datei auf den Server laden ###
    11. move_uploaded_file($dateiTempName,$dateiDatei);
    12. ### Video in FLV umwandeln ###
    13. // Make multiples function
    14. function makeMultipleTwo ($value)
    15. {
    16. $sType = gettype($value/2);
    17. if($sType == "integer")
    18. {
    19. return $value;
    20. } else {
    21. return ($value-1);
    22. }
    23. }
    24. // Set our source file
    25. $srcFile = "/var/kunden/webs/---/dateiData/videos/$userID.$dateiZufall.original." . $dateiEndung;
    26. $destFile = "/var/kunden/webs/---/dateiData/videos/$userID.$dateiZufall.flvd.flv";
    27. $ffmpegPath = "/usr/local/bin/ffmpeg";
    28. $flvtool2Path = "/bin/flvtool++";
    29. // Create our FFMPEG-PHP class
    30. $ffmpegObj = @new ffmpeg_movie($srcFile);
    31. // Save our needed variables
    32. $srcWidth = makeMultipleTwo($ffmpegObj->getFrameWidth());
    33. $srcHeight = makeMultipleTwo($ffmpegObj->getFrameHeight());
    34. $srcFPS = $ffmpegObj->getFrameRate();
    35. $srcAB = intval($ffmpegObj->getAudioBitRate()/1000);
    36. $srcAR = $ffmpegObj->getAudioSampleRate();
    37. // Call our convert using exec()
    38. exec($ffmpegPath . " -i " . $srcFile . " -ar " . $srcAR . " -ab " . $srcAB . " -f flv -s " . $srcWidth . "x" . $srcHeight . " " . $destFile . " | " . $flvtool2Path . " -U stdin " . $destFile);
    39. ### Video-Img erstellen und speichern ###
    40. new ffmpeg_animated_gif($dateiDateiImg, 650, 650, 20, 0);
    41. ### Aktion loggen ###
    42. require_once (WCF_DIR.'lib/data/user/LogSystem.class.php');
    43. $LogSystemD = new LogSystem();
    44. $LogSystemD->Upload("Datei-Upload",$dateiName,$dateiTempName,$dateiGroesse,$dateiTyp,"BenutzerID: $userID // Benutzername: $username","Dateipfad: $dateiDatei");
    45. ### Datei in Datenbank schreiben ###
    46. $sql = "INSERT dateidata_videos (ID,funktionID,funktionName,dateiName,dateiTempName,dateiGroesse,dateiTyp,userID,username,dateipfadOriginal,dateipfadFlv,dateipfadImg,time) VALUES ('','$funktionID','$funktionName','$dateiName','$dateiTempName','$dateiGroesse','$dateiTyp','$userID','$username','$dateiDatei','$dateiDateiFlv','$dateiDateiImg','$time')";
    47. $result = WBBCore::getDB()->sendQuery($sql);
    48. return mysql_insert_id();
    49. }
    50. ### ### ### ###
    Alles anzeigen


    Diese Klasse befindet sich wiederum ausgelagert in der datei Upload.class.php im User-Verzeichnis.

    Dort ist der Pfad doch vorhanden, oder nicht?
  • achso, $dateiDatei == $srcFile.. warum 2 Variblen?

    wo sind denn die Unterschiede zwischen deiner funktionierenden datei mit upload und konvertierung und der wcf version?

    Beginne erstmal damit, dass du deinen alten Code mit error_reporting E_ALL ausführst.
    Danach gehe so vor, dass du den Code zuerst 1:1 kopierst und dann schrittweise vorgehst, bis der Fehler kommt.
    Lass dir mal die Returnwerte der Funktionen ausgeben, damit du siehst ob das Verschieben funktioniert.
    Lass dir mit is_file ausgeben ob die Datei existiert. Mit is_readable ob sie lesbar ist. Und mit is_writable ob der Zielpfad ok ist.
  • Ich bin nicht ganz drinne im Thema ABER ich habe einige Erfahrungen mit FFmpeg unter linux.

    Ich habe ebenfalls mal versucht Videos zu konvertieren (nach FLV), doch war das Ergebniss immer 0KB groß!
    Durch ein Update oder so habe ich das damals wegbekommen, nur ging dann der Ton nicht.
    Auch hier mit viel Basteleien konnte man dieses Problem fixen.

    Es ist nur eine Vermutung, aber villeicht liegen bei deiner FFmpeg lib die selben Probleme vor.