Цель: у меня есть приложение, которое позволяет пользователям загружать видео, а затем мне нужно иметь возможность немедленно транслировать эти видео другим пользователям. Моя текущая настройка отлично подходит для этого, но теперь я хочу перекодировать видео, чтобы они были оптимизированы для потоковой передачи с мобильных устройств. В поисках лучших практик, пожалуйста, помогите!
Текущая настройка: я использую корзину 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.
Если у кого-то есть какие-либо советы по наилучшей практике, чтобы обойти проблему, которую я описал, я был бы очень признателен!
Привет, Брендан