Amazon ec2 在Amazon Web服务上开发可伸缩视频转码服务器的最佳实践?

Amazon ec2 在Amazon Web服务上开发可伸缩视频转码服务器的最佳实践?,amazon-ec2,ffmpeg,amazon-web-services,amazon-sqs,Amazon Ec2,Ffmpeg,Amazon Web Services,Amazon Sqs,当开发一个允许用户将视频和图像上传到服务器并通过FFMPEG进行转码并存储在AmazonS3中的应用程序时,人们认为最重要的问题是什么?我有两个选择 1) 在处理文件上传的同一台服务器上安装FFMPEG,当视频上传并存储在EC2实例上时,调用FFMPEG进行转换,然后在转换完成后,将文件写入S3 bucket并处理原始文件 这有多大的可扩展性?当许多用户同时上传时会发生什么?如何一次管理多个流程?如何知道何时启动另一个实例并在此配置中进行负载平衡 2) 一台服务器用于处理上传(更新数据库、重命名

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

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

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

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

我正在运行一个LinuxBox作为上传服务器,并在上面运行FFMPEG


如能提供关于建立此类配置的最佳实践的任何建议,将不胜感激。非常感谢

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

根据您想要扩展到多大(如果您想要在一台机器上执行更多的FFMPEG进程),您可以轻松地将其分布式,这就是SQS的用武之地。您可以为每个核心运行1个FFMPEG进程,而不是在本地队列中查找数据,它可以查找SQS。然后,您可以在不同的机器上根据需要实例化任意多个代码转换过程


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

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

实际上,有许多方法可用于解决您的问题:

1-使用ec2,您可以运行一个简单的php脚本,如果有任何新视频可用于转码,该脚本将检查您的数据库(例如,每30秒检查一次)(您可以为此使用一个简单的DB属性,processed:Boolean)

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


3-使用。相当贵。如果你的视频是最短的,那将是一个巨大的成本。如果您是Netflix或Amazon,运行长时间的工作来对电影进行转码,那么ET就更有意义了。

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

非常感谢您的回复。我现在正处于这样一个阶段:我有一个服务器,负责处理上传,调用FFMPEG来处理上传的视频,然后将编码文件写入amazons3。虽然这种情况会发生,但脚本会等待所有过程完成,即用户必须等待视频编码,然后才能进行下一次视频上载等。我同意您的看法,我可能可以在一台机器上管理上载和编码,但您建议我如何在后台运行转码,我如何检测文件何时被转码以将其复制到S3?再次感谢您,因为您有一个正在进行代码转换的进程,当它完成时,同一个进程难道不能将它放在S3中吗?也许当面向web的应用程序启动转码过程时,它可以传入一个参数,告诉转码过程在S3中的位置。请记住,FFMPEG可以从STDIN接收数据并输出到STDOUT。不要忘记查看所有可用的流式命令行选项!AmazonWebServices最近发布了一个新的Web服务,名为。