我现在正在开发一个关于在互联网上分享视频的网站。流程如下:用户上传视频->,服务器端接收视频,并使用ffmpeg将视频格式转换为flv ->,用户继续在站点中做其他事情。现在我想建立另一个线程来做转换工作(使用ffmpeg将视频格式转换为flv),这样用户就可以做其他事情,而无需等待视频转换为flv。但是不知道怎么做!
发布于 2012-05-07 21:45:54
PHP不支持线程。您应该使用由cron脚本运行的后台任务来实现这一点。
您可以有一个包含要处理的作业的表,例如,包含磁盘上的文件名、状态(挂起、正在转换、就绪)等,然后让脚本获取所有挂起的作业,将其状态更改为正在转换,转换文件,然后将状态更改为就绪。通过这种方式,您还可以向用户显示信息,并且如果您希望同时转换多个文件,则可以运行多个脚本。
发布于 2012-05-07 21:46:25
将需要转换的视频排成一个队列,例如使用cron作业逐个转换视频。这个队列可以存储在类似消息队列或数据库的东西中。
使用数据库,您可以创建一个包含ID、StartDatetime、EndDatetime、Filename、Status、Owner列的表,并在上传视频时适当地设置这些列。当一些用户请求他或她的任何视频的状态时,您只需在数据库中查找状态,其中(例如)1=已添加,2=当前正在处理,3=完成,4=错误。
现在,cron作业开始逐个处理状态为1的所有项;在处理时,它会将其更新为2,然后相应地更新为3或4。
通过所有的fork/exec/run-on-on- By like解决方案,你可以立即开始处理上传的视频,你就是在允许所有用户阻塞服务器。如果多个用户同时开始处理大型视频,该怎么办?您无法控制单独的进程,并且所有这些进程都同时运行,这可能会大大减慢服务器的速度。
通过使用一个进程(通过cron启动)按顺序处理项目,您可以更好地管理正在使用的资源。
发布于 2012-05-07 21:46:43
看起来像是job server的工作。只需将其添加为background task即可
https://stackoverflow.com/questions/10483200
复制相似问题