Эластичный транскодер AWS — транскодирование и распространение в реальном времени для мобильной потоковой передачи

Цель: у меня есть приложение, которое позволяет пользователям загружать видео, а затем мне нужно иметь возможность немедленно транслировать эти видео другим пользователям. Моя текущая настройка отлично подходит для этого, но теперь я хочу перекодировать видео, чтобы они были оптимизированы для потоковой передачи с мобильных устройств. В поисках лучших практик, пожалуйста, помогите!

Текущая настройка: я использую корзину S3 для хранения самого видеоресурса. при успешной загрузке я создаю отдельный объект видео в другом месте со всеми метаданными для этого конкретного видео, включая URL-адрес для его получения. *Обратите внимание, что на самом деле я использую потоковую передачу через AWS CloudFront, поэтому URL-адрес, который я сохраняю в качестве атрибута видеообъекта, на самом деле является базовым URL-адресом для раздачи CloudFront, подключенной к корзине S3.

Проблема: теперь я хочу перекодировать видео для потоковой передачи, оптимизированной для мобильных устройств. Я могу запустить фоновое задание с помощью эластичного транскодера, который берет их из одной корзины AWS (назовем ее «багет1»), перекодирует их и помещает в другую корзину, предназначенную для оптимизированных видео (назовем ее «багет2»). Но моя проблема в том, что теперь, когда пользователь загружает видео, поток выглядит так: загрузите в корзину1 и создайте соответствующий видеообъект с метаданными. Объекту видео нужен URL-адрес, чтобы я мог транслировать видео позже. Я задаю URL-адрес, связанный с Bucket2 (где в конечном итоге будет размещен оптимизированный видеоресурс). Проблема в том, что, скажем, мое пакетное задание не выполняется еще час, но пользователь запрашивает это видео через минуту. Очевидно, что по URL-адресу Bucket2 еще не существует оптимизированной версии, поэтому я не могу транслировать видео.

Что я пробовал: Недавно я подумал, что если вместо создания корзины 2 для перекодированных видео я настрою фоновое задание, чтобы брать видео из корзины 1, перекодировать их, а затем снова помещать их обратно в ту же корзину с тем же имя файла (перезаписывая старую неоптимизированную версию). Тогда у меня есть только 1 файл для каждого видео, поэтому в худшем случае, если пользователь запрашивает видео до того, как задание будет запущено на этом видео, они все равно получат контент, это будет просто неоптимизированная версия. Одна из проблем заключается в том, что эластичный транскодер, по-видимому, не позволяет мне перезаписывать файлы (вероятно, я мог бы решить эту проблему, поместив их во второе ведро, а затем выполнив перезапись с помощью операции copyObject, согласно этому сообщению: транскодер aws перезаписывает файлы на s3). Однако большая проблема заключается в том, что для всего этого требуется одно имя файла, включая расширение. Это кажется невозможным, если я хочу преобразовать файлы из формата .mov (например) в список воспроизведения hls с расширением .m3u8.

Если у кого-то есть какие-либо советы по наилучшей практике, чтобы обойти проблему, которую я описал, я был бы очень признателен!

Привет, Брендан


comment
Похоже, проблема ждет запуска вашего пакетного процесса. Почему бы просто не запустить транскодер сразу после загрузки? Можно сделать это напрямую из слоя API или через лямбда.   -  person duhseekoh    schedule 24.08.2017


Ответы (2)


http://www.bitcodin.com может выполнять перекодирование быстрее, чем в реальном времени, с немедленным выводом видео для пользователей. . Его также можно использовать в Amazon AWS, например. следуя этому руководству: http://www.bitcodin.com/blog/2015/02/create-mpeg-dash-hls-content-for-amazon-s3-and-cloudfront/

person Stefan Lederer    schedule 09.05.2015

Я знаю, что этому пару лет, но хотел добавить дополнительную информацию. Надеюсь, вы нашли другие решения с момента своего поста 2 года назад, но вы могли бы использовать онлайн-видеоплатформу или службу транскодирования, оба из которых созданы для обработки именно того, что вы описываете, а также многое другое. На рынке их много, от бесплатных до платных. Кроме того, когда Стефан говорит «быстрее, чем перекодирование в реальном времени», это означает, что если ваше видео длится 15 минут, перекодирование займет менее 15 минут.

person Mandy    schedule 30.05.2017