2013-07-12 46 views
0

我拥有与youtube类似的网站www.goploom.com,允许用户上传和观看视频。上传的视频会转换为mp4格式,以便与我们网站的html5视频播放器兼容。我的问题是,虽然FFmpeg成功地从上传的视频生成视频缩略图,并将图像存储在正确的目录中,但我的代码的视频转换方面不会产生任何输出。我已经调整了几个小时的代码,但我一直无法解决此问题,但是,我被告知可以使用html,php和ffmpeg执行视频转换。FFmpeg无法正常工作

我的ffmpeg的路径是正确的,因为缩略图的生成完美。

**上传时从上传的视频中收集的信息。 $ name = $ _FILES ['video'] ['name']; $ title = $ _POST ['videotitle']; $ type = explode('。',$ name);
$ type = end($ type); $ size = $ _FILES ['video'] ['size']; $ random_name = rand(); $ tmp = $ _FILES ['video'] ['tmp_name'];

   if($type != 'mp4' && $type != 'MP4' && $type != 'flv' && $type != 'FLV' && $type != 'mov' && $type != 'MOV'){ 
        $message = "Video Format Not Supported<br>"; 
       } else { 
      $username_query = mysql_query("SELECT `username` FROM `users` WHERE `user_id` = $session_user_id"); 
        $username = mysql_fetch_assoc($username_query); 
        $username = $username['username']; 

** Thumbnail generation that works perfect。 $ ffmpeg =“/ usr/local/bin/ffmpeg”; $ videoFile = $ _FILES ['video'] ['tmp_name']; $ imageFile =“uploads /".$ username。”/ thumbnails /".$ random_name。“。jpg”; $ size =“160x90”; $ getFromSecond = 5; $ cmd =“$ ffmpeg -i $ videoFile -an -ss $ getFromSecond -s $ size $ imageFile”;如果(!shell_exec($ cmd)){ echo“Thumbnail Created!
”;
} else { echo“Error Creating Thumbnail!”; }

**将上传的文件移动到其永久目录进行视频转换。 $ newFileLocation =“uploads /".$ username。”/ temp“。$ random_name。”。“。$ type; move_uploaded_file($ tmp,$ newFileLocation);

*视频转换代码。 $ outputFile =“uploads /".$ username。”/“。$ random_name。”。mp4“; $ databaseStoredVideoUrl =“uploads /".$ username。”/“。$ random_name。”。mp4“; $ video_cmd =“$ ffmpeg -i $ newFileLocation $ outputFile”; echo $ video_cmd; if(!shell_exec($ video_cmd)){ echo“Video Converted!
”; } else { echo“Error Creating Thumbnail!”;
}

**正确地将输出src链接存储在数据库中,但视频因为不存在而无法查看。 //将视频存储到正确的用户名和用户目录下的数据库中 mysql_query(“INSERT INTO videos VALUES('$ session_user_id','','$ name','$ outputFile','$ title','','$图像文件')”); $ message =“Video Upload Successful。
”;

任何帮助或洞察力将是辉煌的。 谢谢。

**编辑:通过使用下面的行修复。 $ video_cmd =“$ ffmpeg -i $ newFileLocation -vcodec libx264 -vpre normal -acodec libfaac $ outputFile”;

,然后输入$ video_cmd到了shell_exec

回答

0

说不上来。 曾为自己与FFMPEG和PHP几次,你可以遇到了一些问题如下:

  1. 内存限制自似乎正在运行的视频编码服务器端,我宁可不推荐。
  2. 其次,ffmpeg进程本身可能需要很长的时间,因为视频加载的执行时间可能比Web服务器Apache/Nginx允许的最大脚本执行时间要长。

如果您运行的是编码为Web请求,你倒是应该从这个不要,而是让一个cron作业或单独的服务,检查是否存在应进行处理和编码的任何新的视频(视频队列服务)。

措施以保证此大致做:

  1. 首先测试你从CMDLINE直接编码。
  2. 更新您的视频表并标记应该处理的视频表,或制作视频队列表。
  3. 有一个cron作业或一项服务,用于检查要处理的新视频,然后逐个处理它们。

如果您对PHP最为满意,请使用ini_set(“set_time_limit”,0)创建一个php脚本,以确保脚本不超时。其他选项可以是bash脚本,或者使用node.js以及foreverffmpeg library来制作处理服务。