В течение нескончаемого 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