Лучшие практики для разработки масштабируемого сервера транскодирования видео на Amazon Web Services? - PullRequest
16 голосов
/ 01 октября 2009

Что люди считают наиболее важными проблемами при разработке приложения, которое позволит пользователям загружать видео и изображения на сервер и транскодировать их с помощью FFMPEG и сохранять в amazon S3? У меня есть несколько вариантов;

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

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

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

Я использую Linux-сервер в качестве сервера загрузки и на нем запущен FFMPEG.

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

Ответы [ 4 ]

12 голосов
/ 02 октября 2009

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

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

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

1 голос
/ 06 июля 2017

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

1 голос
/ 06 сентября 2016

Существует множество методов, которые вы можете использовать для решения вашей проблемы:

1-Используя ec2 cron jobs , вы можете запустить простой php-скрипт, который будет проверять вашу базу данных (например, каждые 30 секунд), если есть новое видео, доступное для транскодирования (вы можете использовать простую БД атрибут для этого обработан: Boolean)

2 - Использование службы AWS Lambda для обнаружения любого нового видео, загруженного в вашу корзину s3, запуска функции лямбда для получения больших пальцев и транскодирования, отправки вывода в вашу целевую корзину. Для проверки этого отличного инструмента по @ binoculars требуется некоторое понимание js & gulp, но он очень удобный и плавный.

3-Using aws транскодер . Это довольно дорого. Если вы округлились до ближайшей минуты, это очень дорого, когда ваши видео короткие. Если вы работаете с Netflix или Amazon и выполняете длинные работы по перекодировке фильмов, ET имеет гораздо больше смысла.

1 голос
/ 09 февраля 2015

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

...