В течение нескончаемого 2020 года я присоединился к моему другу в проекте о потоковой передаче звука; Это была для меня совершенно новая тема, поэтому после нескольких дней исследования и предложения друга я нашел MediaConvert, который является компонентом AWS Elemental, продукта, который Amazon приобрел не так давно: в нем есть все инструменты, необходимые для потоковой передачи аудио- и видеоконтента, как по запросу, так и в реальном времени, а также есть возможность размещать аудио- и видеорекламу в реальном времени.

Вот мои 2 цента.

Решение

AWS Elemental - это полный пакет для обработки аудио и видео по запросу или публикации контента в реальном времени, полностью интегрированный с экосистемой AWS. Он состоит из нескольких компонентов, например:

  • MediaLive, для потоковой передачи содержимого
  • MediaPackage, чтобы подготовить другую версию содержимого для таргетинга на несколько платформ.
  • MediaStore, чтобы оптимизировать хранение активов
  • MediaConvert, чтобы конвертировать активы на лету
  • MediaConnect, транспортный сервис для видео в реальном времени
  • MediaTailor для внедрения целевой рекламы в ваши стримы

MediaConvert - это компонент, который может загружать ресурс из S3 и преобразовывать его в соответствии с вашими потребностями. Помимо прочего, вы можете:

  • конвертировать в другой формат
  • изменить свойства (например, КБ / с)
  • генерировать потоковую версию содержания

и многое другое.

Чтобы управлять активом, вы должны определить job; он разделен на разделы, и некоторые из них:

  • ввод: актив, которым вы хотите управлять
  • селектор видео / аудио: множество свойств, которые вы можете настроить для видео или аудиодорожки, например языковой код

Очень важной является группа вывода на левой панели страницы «Определение задания»: это место, где можно определить, какой тип актива вы создаете:

Как видите, существует множество вариантов, и в моем случае именно Apple HLS был выбран, чтобы иметь подходящий ресурс для потоковой передачи: он создает файл .m3u8, который описывает поток, и группу файлов .aac, которые представляют части ресурсов, которые будут обслуживаться во время сеанса потоковой передачи.

В качестве небольшого совета, поскольку я не являюсь экспертом по вселенной потоковой передачи, я использовал VLC, чтобы быстро проверить, что произведенный вывод был правильно создан: конечное клиентское приложение разработано с использованием Flutter, а компонент проигрывателя не имеет особенно богатый API, поэтому VLC мне очень помог во время тестов. Итак, если бы вы когда-нибудь захотели поиграть с MediaConvert, запомните следующее: загрузите свой актив, конвертируйте и переместите его в корзину S3, сделайте его общедоступным и попробуйте воспроизвести полученный поток с помощью VLC. Короче говоря: если VLC может играть в него, игрок тоже.

Давайте поместим все в контекст

С архитектурной точки зрения приложение основано на Google Cloud Platform, и я использовал AWS Elemental только специально. Есть инструмент для загрузки ассетов в S3; лямбда-функция обнаруживает загрузку и запускает предопределенное задание MediaConvert, что создает согласованный доставляемый файл в целевом сегменте S3.

На этом этапе вторая лямбда-функция обнаруживает создание файла в целевом сегменте и уведомляет об этом облачную функцию GCP, которая создает запись в Cloud Firestore, базе данных, используемой приложением Flutter. И последнее, но не менее важное: я использую механизм аутентификации Firebase для обработки пользователей моего приложения.

Заключение

Каждый раз, когда у вас появляется возможность начать новый (побочный?) Проект, всегда интересно, какой стек технологий вы собираетесь использовать: как разработчик вы знаете, что неправильное решение может повлиять на весь проект, вызывая задержки и отсутствие мотивации. ; с другой стороны, когда вы выбираете правильные инструменты для работы, сокращаете время начальной загрузки проекта и сосредотачиваетесь на бизнес-логике, вы в конечном итоге останетесь вполне довольны. В конце концов, помимо некоторой разработки Flutter (игра с поставщиками, шаблонами блоков и т. Д.) И пары лямбда-функций, наличие AWS Elemental в наборе инструментов сделало проект «выполнимым».

Примечание: просто чтобы подчеркнуть, насколько важно экономить время и как это можно сделать с помощью правильных инструментов, я могу подтвердить, что самой долгой задачей до сих пор был дизайн логотипа. Со сторонним дизайнером: D

Дополнительные замечания

Вы можете увидеть одну из первых презентаций AWS Elemental на re: Invent 2017 здесь.

Больше контента на plainenglish.io