【问题标题】:Best practices for developing scalable video transcoding server on Amazon Web Services?在 Amazon Web Services 上开发可扩展视频转码服务器的最佳实践?
【发布时间】:2009-10-01 13:18:18
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

标签: amazon-ec2 ffmpeg amazon-web-services amazon-sqs


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢您的回复。我现在处于处理上传的服务器调用 FFMPEG 以处理上传的视频,然后将编码文件写入 Amazon S3 的阶段。尽管脚本会等待所有进程完成,但会发生这种情况,即用户必须等待视频在下一个视频上传之前进行编码等。我同意你的观点,我可能可以在单台机器上管理上传和编码,但是您如何建议我在后台运行转码,以及如何检测文件何时被转码以将其复制到 S3?再次感谢
  • 所以你有一个进程正在做转码,同一个进程不能在它完成后把它放在S3中吗?也许当面向 Web 的应用程序启动转码过程时,它可以传入一个参数,告诉转码过程在 S3 中的什么位置。
  • 请记住,FFMPEG 可以从 STDIN 接收数据并输出到 STDOUT。不要忘记查看所有可用的流式命令行选项!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2015-07-26
        • 2010-10-02
        • 2012-06-23
        • 1970-01-01
        • 2011-11-25
        • 2014-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多