16

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

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

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

2) 有一台服务器用于处理上传(更新数据库、重命名文件等)和一台服务器进行转码。同样,管理多个进程的最佳方法是什么?我应该为此查看 Amazon SQS 吗?我可以告诉转码服务器从上传服务器获取文件还是应该将文件复制到转码服务器?我是否应该将所有文件存储在 S3 上,而 SQS 可以从那里读取。我正在尝试尽可能少的流量。

我正在运行一个 linux 机器作为上传服务器,并在其上运行 FFMPEG。

任何有关设置此类配置的最佳实践的建议将不胜感激。非常感谢

4

4 回答 4

12

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

根据您想要扩展的规模(如果您想在一台机器上执行的不仅仅是几个 FFMPEG 进程),您可以轻松地使其分布式,这就是 SQS 可以派上用场的地方。您可以为每个内核运行 1 个 FFMPEG 进程,而不是在本地队列中查找数据,它可以查看 SQS。然后,您可以根据需要在不同的机器上实例化尽可能多的转码过程。

这样做的缺点是,您需要将原始视频从接受它们的服务器传输到需要对其进行转码的服务器。您可以将它们放在 S3 中,然后将它们从 S3 中取出,但我不记得是否需要为此付费。或者,您可以将它们保存在接收它们的机器的硬盘上,然后让转码过程去那里获取原始文件。

于 2009-10-02T13:50:03.040 回答
1

您应该看看Amazon Elastic Transcoder。它解决了您在问题中提到的几乎所有问题。

于 2015-02-09T18:20:28.907 回答
1

您可以查看Piper。这是我最初为一家大型娱乐公司构建的产品的开源版本,用于大规模处理他们的视频转码。

于 2017-07-06T17:14:33.933 回答
1

实际上有很多方法可以用来解决您的问题:

1-使用 ec2 cron 作业,您可以运行一个简单的 php 脚本,该脚本将检查您的数据库(例如,每 30 秒)是否有任何可用于转码的新视频(您可以为此使用简单的 DB 属性,已处理:布尔值)

2-使用 aws Lambda 服务检测上传到您的 s3 存储桶的任何新视频,触发 lambda 函数以获取拇指和转码,将输出发送到您的目标存储桶。通过@binoculars检查这个伟大的工具需要一些 js 和 gulp 的理解,但它非常方便和流畅。

3-使用aws 转码器。它非常昂贵。如果您要四舍五入到最近的一分钟,那么当您的视频很短时,这将是一笔巨大的成本。如果您是 Netflix 或 Amazon 运行长时间的工作以对电影进行转码,那么 ET 更有意义。

于 2016-09-06T11:25:32.873 回答