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

(Хотите узнать больше? Посмотрите нашу книгу« Бессерверные архитектуры на AWS )

Производство и обслуживание качественного видео просто необходимо. Типичный курс может включать до 50 различных видеолекций продолжительностью от 2 до 20 минут. Как Сэм писал ранее, платформа построена на бессерверной архитектуре. Естественно, это также относится и к средствам массовой информации.

В настоящее время A Cloud Guru использует корзины S3 и CloudFront для обслуживания видео и аудио контента. Видео помещаются в корзину за CloudFront, а авторизованным пользователям предоставляется подписанный URL-адрес CloudFront, действительный в течение ограниченного времени. Пользователи воспроизводят видео через веб-сайт Облачный гуру и автоматически повторно авторизуют свой доступ, пока они остаются участниками.

Когда началась работа над Облачным гуру, команде вручную (то есть с помощью отличного приложения Handbrake) пришлось кодировать видео с 1080p до 720p с другими кодировками и разрешениями. Хотя изначально это было хорошо, это не совсем соответствовало идеалам команды о полной автоматизации. Это было медленно и, честно говоря, болезненно.

Недавно у меня появилась возможность помочь полностью пересмотреть процесс перекодирования и сделать его автоматизированным с помощью Elastic Transcoder, S3 и Lambda. Благодаря AWS у меня была начальная реализация менее чем за день. Процесс не только перекодирует видео в 720p, webm и HLSv3, но также генерирует эскизы, водяные знаки для наших видео и прекрасно организует все в S3.

Эластичный транскодер

Эластичный транскодер служит основой нашей реализации. Чтобы запустить его, вам нужно сделать две вещи: определить конвейер и создать задание. По сути, конвейер определяет очередь для будущих заданий. Чтобы создать конвейер, вам необходимо указать сегмент ввода (где будут находиться исходные видео), сегмент вывода и сегмент для миниатюр. Вы также можете при желании установить темы социальных сетей для различных событий, которые будут происходить в системе, таких как По завершении и При ошибке. Мы рекомендуем настроить их, а затем использовать SNS для отправки уведомлений, особенно в случае On Error.

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

Создав конвейер, вы можете сразу же создать задание и запустить задачу перекодирования. Задание включает в себя указание имени файла, выбор одной или нескольких предустановок транскодирования (например, Generic 720p, webm, HLS и т. Д.), Настройку списка воспроизведения, метаданных или переопределение входных параметров, таких как частота кадров или соотношение сторон. .

Естественно, мы поиграли с разными заданиями, чтобы получить хорошее представление об Elastic Transcoder, но нашей конечной целью была полная автоматизация.

Введите лямбда

При бессерверном подходе одним из способов запуска собственного кода является использование AWS Lambda. На данный момент невозможно автоматически запустить задание эластичного транскодера, загрузив файл в корзину. Однако легко вызвать Lambda из события S3, а из Lambda-функции вызвать Elastic Transcoder.

Вызвать лямбда-функцию из корзины S3 просто - откройте нужную корзину в S3 и нажмите Свойства. Оттуда нажмите События, Лямбда и в раскрывающемся списке выберите соответствующую лямбда-функцию, которую вы хотите выполнить. Наконец, выберите событие (ObjectCreated (All)), которое запустит процесс.

Копаемся в Lambda

Ранее я упоминал, что вы можете создавать и выполнять задания с помощью консоли Elastic Transcoder. Это хорошо, но нам также нужна возможность создавать и запускать задания эластичного транскодера с помощью нашей функции Lambda. К счастью, это довольно просто сделать с помощью AWS JavaScript SDK. Вот основные шаги, которые вам предстоит пройти:

  1. Создайте базовую функцию Lambda и добавьте к ней AWS SDK.
  2. Извлеките корзину и имя файла загруженного файла из объекта event, который передается в функцию handler.
  3. Создайте задание и укажите требуемые выходы, а также любые другие настройки.
  4. Начните работу и наслаждайтесь прогрессом в консоли Elastic Transcoder. Если вы зарегистрировались в теме SNS (при создании конвейера Elastic Transcoder) и настроили электронную почту, вы будете получать уведомления о различных этапах работы.

Ниже приведен пример лямбда-функции, отвечающей нашим требованиям. Обратите внимание, что он создает задание с 3 выходами - общий 720p, webm и hlsv3.

‘use strict’;
var AWS = require(‘aws-sdk’);
var s3 = new AWS.S3({
 apiVersion: ‘2012–09–25’
});
var eltr = new AWS.ElasticTranscoder({
 apiVersion: ‘2012–09–25’,
 region: ‘us-east-1’
});
exports.handler = function(event, context) {
 console.log(‘Executing Elastic Transcoder Orchestrator’);
 var bucket = event.Records[0].s3.bucket.name;
 var key = event.Records[0].s3.object.key;
 var pipelineId = ‘112321321343–2abcc1’;
 if (bucket !== ‘acloud-video-input’) {
  context.fail(‘Incorrect Video Input Bucket’);
  return;
 }
 var srcKey =  decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " ")); //the object may have spaces  
 var newKey = key.split('.')[0];
 var params = {
  PipelineId: pipelineId,
  OutputKeyPrefix: newKey + ‘/’,
  Input: {
   Key: srcKey,
   FrameRate: ‘auto’,
   Resolution: ‘auto’,
   AspectRatio: ‘auto’,
   Interlaced: ‘auto’,
   Container: ‘auto’
  },
  Outputs: [{
   Key: ‘mp4-’ + newKey + ‘.mp4’,
   ThumbnailPattern: ‘thumbs-’ + newKey + ‘-{count}’,
   PresetId: ‘1351620000001–000010’, //Generic 720p
   Watermarks: [{
    InputKey: ‘watermarks/logo-horiz-large.png’,
    PresetWatermarkId: ‘BottomRight’
   }],
  },{
   Key: ‘webm-’ + newKey + ‘.webm’,
   ThumbnailPattern: ‘’,
   PresetId: ‘1351620000001–100240’, //Webm 720p
   Watermarks: [{
    InputKey: ‘watermarks/logo-horiz-large.png’,
    PresetWatermarkId: ‘BottomRight’
   }],
  },{
   Key: ‘hls-’ + newKey + ‘.ts’,
   ThumbnailPattern: ‘’,
   PresetId: ‘1351620000001–200010’, //HLS v3 2mb/s
   Watermarks: [{
    InputKey: ‘watermarks/logo-horiz-large.png’,
    PresetWatermarkId: ‘BottomRight’
   }],
  }]
 };
 console.log(‘Starting Job’);
 eltr.createJob(params, function(err, data){
  if (err){
   console.log(err);
  } else {
   console.log(data);
  }
  context.succeed(‘Job well done’);
 });
};

Предустановки

Одна деталь, которую вы могли заметить в приведенной выше лямбда-функции, - это использование предустановок (например, 1351620000001–000010). Предустановки описывают, как кодировать данный файл. Полный список доступных пресетов можно найти в документации AWS.

Также можно создать свой собственный пресет. Вы можете сделать это, щелкнув ссылку Presets в консоли Elastic Transcoder. Здесь вы увидите полный список системных предустановок и сможете создать свои собственные, нажав кнопку Создать новую предустановку.

Предустановки позволяют детально контролировать кодировку файлов. Естественно, вы можете найти много подробностей в соответствующей документации AWS.

Следующие шаги

Эластичный транскодер может делать гораздо больше, чего мы еще не затронули. На ум сразу приходят подписи и DRM, и оба они чрезвычайно важны для платформы. У команды A Cloud Guru большие планы на бессерверную систему кодирования и обслуживания мультимедиа, так что следите за этим пространством.

Вы пользовались эластичным транскодером и какие впечатления? Я очень хочу услышать о вашем опыте и о том, что вы думаете о платформе.

Облачный гуру

Миссия A Cloud Guru - вовлечь людей в путешествие, чтобы повысить уровень их навыков облачных вычислений, предоставляя лучший в мире образовательный контент, предназначенный для развития как мышления, так и карьеры.

«Пусть ни один человек в мире не живет в заблуждении. Без Гуру никто не может перейти на другой берег », - Гуру Нанак.

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

Не отставайте от команды A Cloud Guru @acloudguru.