在Amazon Web Services上开发可扩展视频转码服务器的最佳实践?

und*_*ned 16 ffmpeg amazon-ec2 amazon-sqs amazon-web-services

在开发一个允许用户将视频和图像上传到服务器并让它们由FFMPEG转码并存储在亚马逊S3中的应用程序时,人们认为最重要的问题是什么?我有几个选择;

1)在处理文件上传的同一台服务器上安装FFMPEG,当视频上传并存储在EC2实例上时,调用FFMPEG进行转换然后完成后,将文件写入S3存储桶并处理原始文件.

这有多可扩展?当许多用户同时上传时会发生什么?如何一次管理多个流程?我如何知道何时启动另一个实例并对此配置进行负载平衡?

2)有一台服务器用于处理上传(更新数据库,重命名文件等)和一台服务器进行转码.再次,管理多个流程的最佳方法是什么?我应该看看亚马逊SQS吗?我可以告诉转码服务器从上传服务器获取文件,还是应该将文件复制到转码服务器?我应该只存储S3上的所有文件,SQS可以从那里读取.我想尽可能减少流量.

我正在运行一个Linux机器作为上传服务器,并在此上运行FFMPEG.

有关建立此类配置的最佳做法的任何建议将不胜感激.非常感谢

tee*_*s99 12

每次有人上传文件进行转码时,我都不认为你会想要启动一个新的FFMPEG实例.相反,您可能希望启动与您拥有的CPU数量相同数量的FFMPEG进程,然后将要转码的输入文件排队,并按接收顺序执行.你可以在一台计算机上完成这一切,我不认为接受上传并将它们放入队列的服务器需要占用大量CPU,并且可能与FFMPEG进程完全共存.

根据你想扩展到多大(如果你想在一台机器上做的不仅仅是几个FFMPEG进程),你可以很容易地分配,这就是SQS派上用场的地方.您可以为每个核心运行1个FFMPEG进程,而不是在本地队列中查找数据,它可以查看SQS.然后,您可以在不同的计算机上实例化所需的转码过程.

这样做的缺点是,您需要将原始视频从接受它们的服务器传输到需要对其进行转码的服务器.你可以将它们放入S3,然后从S3中取出它们,但如果你不得不为此付出代价,我就不记得了.或者,您可以将它们保存在接收它们的计算机的硬盘上,并使用转码过程去获取原始文件.