Автор: Натан Агез, инженер-программист компании TrackIt со степенью магистра компьютерных наук в EPITECH France. Натан хорошо знаком с экосистемой AWS Amplify, а также имеет большой опыт создания бессерверной инфраструктуры для различных проектов. Он увлечен открытым исходным кодом, автоматизацией, путешествиями и любит играть на гитаре, когда не занят программированием.

AWS Amplify и видео AWS Amplify

AWS Amplify — это набор инструментов и облачных сервисов, которые помогают фронтенд-разработчикам создавать масштабируемые полнофункциональные веб-приложения и мобильные приложения на базе Amazon Web Services (AWS). Инструменты Amplify можно использовать вместе или по отдельности для разработки приложений с популярными веб-фреймворками, включая JavaScript, React, Angular, Vue, Next.js, и мобильными платформами, включая Android, iOS, React Native, Ionic и Flutter.

Интерфейс командной строки Amplify (CLI) используется в проектах Amplify для настройки, развертывания и управления серверными ресурсами для таких категорий, как аутентификация, хранилище, интерфейс прикладного программирования (API) и аналитика. Эти категории абстрагируются от общих архитектурных шаблонов AWS, чтобы увеличить скорость для разработчиков и упростить концентрацию на действительно уникальных функциях приложения.

Команда AWS M&E Solutions Architecture осознала, что распространение потоковых мультимедийных приложений повысит спрос на категорию Amplify, ориентированную на видео. В апреле 2019 года команда выпустила категорию плагинов с открытым исходным кодом для Amplify CLI под названием AWS Amplify Video. Amplify Video помогает разработчикам внедрить и развернуть потоковое видео без специальных инженерных знаний. С помощью Amplify Video любой разработчик может выполнить набор подсказок Amplify CLI, чтобы развернуть серверную часть для потоковой передачи с таким же пользовательским интерфейсом, как и в других категориях AWS Amplify.

Перенесемся в 2021 год, и разработчики проекта запустили множество новых функций, включая поддержку Amazon Interactive Video Service (Amazon IVS) и Video-on-Demand. Параллельно с этим сообщество работало над балансом улучшений новых функций при поддержке таких компаний, как Orangetheory Fitness, которые использовали Amplify Video для запуска совершенно новых услуг, таких как Orangetheory At Home. Сопровождающие также искали лучший способ протестировать архитектуры, развернутые с помощью командной строки Amplify и Amplify Video.

Примечание. Видеоплагин Amplify — это исследовательский проект, разработанный TrackIt. Это не официальная библиотека, поддерживаемая командой Amplify Video.

Ссылка на клиентскую библиотеку: https://github.com/trackit/amplify-video.js

Выпуск amplify-video.js, клиентской библиотеки JavaScript, предназначенной для amplify-video.

В настоящее время разработчики Amplify используют клиентские библиотеки amplify (js, ios, android) для взаимодействия со своими собственными категориями ресурсов, созданными Amplify-CLI (хранилище, аутентификация, API и т. д.). По мере того как Amplify Video разрабатывает все более сложные реализации для работы с видеоресурсами, усилия заключались в создании клиентской библиотеки amplify-video, специально созданной для управляемых ресурсов Amplify Video. Это расширенный набор существующих библиотек amplify.js для видеоресурсов.

Эта абстракция позволяет нам поддерживать собственную реализацию функций на стороне клиента, которая лучше всего работает с ресурсами Amplify Video.

Клиентская библиотека JavaScript является абстракцией существующей библиотеки amplify-js и была создана для того, чтобы конечным пользователям было проще работать с плагинами Amplify Video.

Как минимум клиентская библиотека должна поддерживать следующее:

  • Подключитесь к плагину категории — Amplify Video
  • Повторное использование ядра библиотеки Amplify Javascript
  • Разрешить аналитику, создавать, читать, обновлять, удалять видеоресурсы, метаданные через CMS API

Архитектура AWS Amplify

Поскольку в AWS Amplify добавлялось все больше и больше модулей, возникла необходимость разделить библиотеку на более мелкие части. Теперь разработчики могут избежать импорта ненужных компонентов в свои приложения. Цель проекта состояла в том, чтобы разделить AWS Amplify на модули, сохранив при этом обратную совместимость.

Модульный импорт предотвращает включение в приложение ненужных зависимостей кода и, таким образом, уменьшает размер пакета и позволяет добавлять новые функции без риска внесения ошибок, связанных с неиспользуемым кодом.

Amplify будет действовать как оболочка для следующих пакетов:

  • @aws-amplify/аутентификация
  • @aws-amplify/аналитика
  • @aws-amplify/апи
  • @aws-amplify/хранилище
  • @aws-amplify/pubsub
  • @aws-amplify/ядро

Повторное использование существующего ядра AWS Amplify

При создании библиотеки amplify-video.js мы воспользовались этой архитектурой для реализации собственного модуля.

Создание списка и построение наиболее часто используемых функций

Команда Amplify Video перечислила пять наиболее применимых функций, которые пользователи будут выполнять при использовании плагина Amplify Video. Эти функции, созданные с использованием существующего ядра Amplify JS, помогают управлять содержимым библиотеки.

Каждый модуль Amplify инкапсулирован как класс, экземпляр которого создается мастер-классом, отвечающим за предоставление конечному пользователю описанных выше методов. Этот шаблон позволяет участникам легко добавлять свои собственные методы.

Загрузка видео

  • Загружает видеоресурс в корзину ввода Amazon S3 и создает метаданные, связанные с файлом, в DynamoDB с помощью AppSync API.

Удалить метаданные

  • Удаляет видеоресурс из входной корзины Amazon S3, а также удаляет связанные с ним метаданные из DynamoDB с помощью AppSync.

Загрузка метаданных

  • Извлекает метаданные, относящиеся к определенному видеоресурсу.

Обновление метаданных

  • Извлекает и обновляет метаданные, относящиеся к конкретному видеоресурсу, если предоставлен объект Javascript.

Создание URL воспроизведения

  • Возвращает URL-адрес воспроизведения для указанного видеоресурса.

Аналитика видеопроигрывателя(amplify.analytics.record)

  • Создает привязку к экземпляру видеопроигрывателя приложения конечного пользователя и отслеживает все события буферизации для сбора метрик (сколько времени требуется для получения следующего актива, загрузки видео и т. д.).
  • Отслеживает воспроизведение, остановку и все основные события, связанные с видеопроигрывателями, а также время, необходимое для загрузки видео, когда конечный пользователь впервые воспроизводит определенный медиаресурс.

Использует Amazon Kinesis для сбора, обработки и анализа данных. Все события собираются с помощью модуля Analytics библиотеки Amplify JS.

Заключение

Читатели могут использовать Клиентскую библиотеку для выполнения основных операций CRUD с активами Amplify Video.

Экосистема Amplify — это надежная основа для проектов Proof of Concept. Однако для более сложных реализаций разработчики могут рассмотреть другие облачные платформы с минимальной абстракцией. Команда TrackIt может помочь с переходом на такие платформы, как Amazon CloudFormation, AWS Serverless Application Model (SAM) или AWS Cloud Development Kit (CDK).