我正在开发一个视频流媒体网站,用户可以将视频上传到该网站(使用uploadify jquery插件一次上传多个视频)。
现在,我面临着将视频编码到FLV以便在线流媒体的问题。
视频编码过程应该在什么时候进行?是否应该在上传完成后立即执行(即将用户重定向到上传成功页面,然后在后台使用ffmpeg的exec命令开始编码?)但是,使用此方法时,如何确定编码是否已成功完成?如果用户上传了损坏的视频,而ffmpeg无法对其进行编码,该怎么办?我如何在PHP中处理这个问题?
多个用户同时上传视频,视频编码如何排队?FFMpeg是否有自己的编码队列?
我还在另一个相关的SO线程中读到了gearman和消息队列选项,比如redis和AMQP。这些是潜在的解决方案之一吗?
如果有人能回答我的问题,我将不胜感激。
发布于 2011-06-19 02:23:03
您应该使用一个名为gearman的软件。它是一个作业服务器,您可以使用PHP调用函数。您可以将进程转移到后台,它会自动处理队列。许多进程也可以并行运行。
我已经用过它了,它的安装和操作非常容易。
对于您的用例,
使用exec将ffmpeg进程包装在一个php文件中。将上传的文件保存到db,并给它一个id。在用户上传文件后调用encode函数。一旦encode函数启动,就更新db以反映文件被“挑选”了。首先在文件上运行ffmpeg info,看看它是否正常。然后对文件进行编码,编码完成后,将db标志更新为" done“。
该过程完成后,您可以调用另一个函数向用户发送一封电子邮件、tweet等,告知编码已完成。
发布于 2011-06-19 02:23:46
由于编码可能需要一些时间,因此您可能希望将输入文件添加到文件夹中,并在数据库中添加一个条目。然后,您有一个脚本,它可以持续运行,也可以每隔x分钟运行一次,将挂起的视频从数据库转换为FLV格式。
要将它们排入队列,您需要创建一个自定义脚本,以便为每个文件重新运行FFMpeg。
发布于 2011-06-19 02:48:14
您可以在服务器上使用cron作业,或者使用beanstalkd (或这个问题的其他答案中提到的gearman )。
https://stackoverflow.com/questions/6397952
复制相似问题