-1

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

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

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

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

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

Приветствие, Brendan

+0

Похоже, что проблема ждет, когда ваш пакетный процесс начнется. Почему бы просто не начать работу с транскодером сразу после загрузки? Могли бы сделать это прямо из слоя api или через лямбда. – duhseekoh

ответ

0

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

0

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