2009-10-01 9 views
16

Что думают люди, являются наиболее важными проблемами при разработке приложения, которое позволит пользователям загружать видео и изображения на сервер и перекодировать их FFMPEG и хранить на амазонке S3? У меня есть пара вариантов;Рекомендации по разработке масштабируемого сервера транскодирования видео на веб-сервисах Amazon?

1) установить FFMPEG на том же сервере, который обрабатывает загрузку файлов, когда видео загружается и сохраняется в экземпляре EC2, вызывается FFMPEG для его преобразования, а затем, когда это делается, напишите файл в ведро S3 и удалите оригинал.

Насколько это масштабируемо? Что происходит, когда многие пользователи одновременно загружаются? Как управлять несколькими процессами одновременно? Как узнать, когда запускать другой экземпляр и загрузить эту конфигурацию?

2) Имейте один сервер для обработки загрузок (обновление базы данных, переименование файлов и т. Д.) И один сервер для выполнения транскодирования. Опять же, как лучше всего управлять несколькими процессами? Должен ли я смотреть на Amazon SQS для этого? Могу ли я сообщить серверу транскодирования, чтобы получить файл с сервера загрузки, или мне нужно скопировать файл на сервер транскодирования? Должен ли я просто хранить все файлы на S3, и SQS может читать оттуда. Я стараюсь как можно меньше трафика.

Я запускаю linux box в качестве сервера для загрузки, и на нем работает FFMPEG.

Следует принимать во внимание любые советы по наилучшим методам настройки такой конфигурации. Большое спасибо

+5

Amazon Web Services недавно выпустила новую веб-службу под названием [Amazon Elastic Transcoder] (http://aws.amazon.com/elastictranscoder «Amazon Elastic Transcoder»). – Adam

ответ

12

Я не думаю, что вы захотите запустить новый экземпляр FFMPEG каждый раз, когда кто-то загружает файл для перекодирования. Вместо этого вы, вероятно, захотите запустить такое же количество процессов FFMPEG, как и количество процессоров, которые у вас есть, а затем очередь на входные файлы, которые вы хотите перекодировать, и выполнять их в том порядке, в котором они были получены. Вы можете сделать все это на одном компьютере, я не думаю, что сервер, который принимает заказы и помещает их в очередь, потребует большого количества процессора и, вероятно, может прекрасно сосуществовать с процессами FFMPEG.

В зависимости от того, насколько большой вы хотите масштабировать (если вы хотите сделать больше, чем несколько процессов FFMPEG на одной машине), вы можете легко сделать это распределенным, и именно здесь SQS пригодится. Вы можете запустить 1 процесс FFMPEG на ядро, и вместо того, чтобы искать в локальной очереди данные, он может посмотреть на SQS. Затем вы можете создать столько процессов транскодирования, сколько потребуется, на разных машинах.

Недостатком этого является то, что вам необходимо перенести необработанные видео с сервера, который принимает их на сервер, который должен перекодировать их. Вы можете поместить их в S3, а затем вытащить их из S3, но я не помню с головы, если вам нужно заплатить за это. В качестве альтернативы вы можете просто сохранить их на жестком диске машины, которая их получила, и чтобы процесс перекодирования проходил туда, чтобы получить необработанные файлы.

+0

Большое спасибо за ваш ответ. Я сейчас на этапе, когда у меня есть сервер, который обрабатывает загрузки, вызывающие FFMPEG для обработки загруженного видео, а затем записывает закодированный файл в Amazon S3. Хотя это происходит, хотя сценарии ждут завершения всех процессов, то есть пользователю придется ждать, пока видео будет кодироваться перед следующей загрузкой видео и т. Д. Я согласен с вами в том, что я, вероятно, могу управлять загрузкой и кодированием на одной машине, но как вы предлагаете мне запустить транскодирование в фоновом режиме и как определить, когда файл был перекодирован, чтобы скопировать его на S3? Еще раз спасибо – undefined

+0

Итак, у вас есть процесс, который выполняет перекодировку, не может ли тот же процесс просто поместить его в S3, когда он будет сделан с ним? Может быть, когда приложение, ориентированное на веб-приложение, начнет транскодирование, оно может передать аргумент, который сообщает о процессе перекодирования, где в S3 его можно разместить. – teeks99

+0

Помните, что FFMPEG может принимать данные от STDIN и выводить на STDOUT. Не забудьте посмотреть все доступные параметры командной строки потоковой передачи! – jduncanator

1

Вы должны взглянуть на Amazon Elastic Transcoder. Он решает почти все проблемы, о которых вы говорили в вопросе.

1

Вы можете проверить Piper. Это версия с открытым исходным кодом продукта, который я изначально построил для огромной развлекательной компании, для обработки своего транскодирования видео по шкале.