Июнь 2016

Том 31 номер 6

Power BI - Microsoft Azure Media Services и Power BI

Сагар Бханудас Джоши | Июнь 2016

Продукты и технологии:

Azure Media Services, Azure Web Apps, Azure SQL Database, Microsoft Power BI

В статье рассматриваются:

  • динамическая упаковка и подготовка к потреблению видео;
  • Web API и база данных;
  • получение четкой картины происходящего через Power BI.

Исходный код можно скачать по ссылке

Microsoft Azure Media Services предлагает богатую платформу для разработчиков и независимых поставщиков программного обеспечения (ISV), позволяющую доставлять видео по заказу и потоковое видео в режиме реального времени через Web и «родные» приложения. Чтобы улучшить пользовательскую среду для потребителей и получать четкую картину использования контекста/приложения, важно вплести отказоустойчивое кросс-платформенное решение в серверную часть для анализа и визуализации данных. На момент написания этой статьи платформа Azure Media Services не предлагала аналитику в готовом виде; поэтому у разработчиков постоянно возникают трудные задачи с точки зрения анализа данных об использовании.

В этой статье основное внимание уделяется помощи разработчикам в создании аналитической платформы поверх Azure Media Services (и Player), позволяющей выявлять тенденции в использовании. Область решения включает применение промежуточного сервиса (Web API) и базы данных с визуализацией через Power BI.

Сценарий

Большинству организаций, создающих и/или встраивающих медийный контент, приходится тщательно анализировать данные по использованию с целью улучшить удобство работы для конечных пользователей. Для этого разработчикам нужно записывать некоторые ключевые показатели работы (key performance indicators, KPI), относящиеся к потреблению их видео/медийного контента. Вот несколько из наиболее распространенных и важных KPI.

  • Какое видео просматривают чаще всего?
  • Сколько людей просмотрело видео до конца?
  • Сколько раз видео ставили на паузу и в какой позиции?
  • Какой потоковый формат/битрейт наиболее востребован?
  • Информация о платформе и подробности, относящиеся к демографическим сведениям.

Чтобы выбрать правильную смесь сервисов и средств, которые помогут обеспечить эти KPI, приходится тратить массу времени и сил для создания каждого компонента с нуля или с опорой на проверенные сервисы платформы.

К счастью, Azure Cloud Platform имеет богатый набор сервисов, которые можно задействовать в общей архитектуре решения для захвата нужных данных и удовлетворения требований к аналитике. В этом сценарии будут применяться следующие компоненты:

  • Azure Media Services;
  • Azure Media Player;
  • Azure Web Apps;
  • Azure SQL Database;
  • Power BI.

Самое лучшее в использовании Azure Media Services заключается в том, что вы можете подготовить свой видео/аудио контент для потребления на различных платформах.

Здесь идея в том, чтобы захватывать исходные данные от Azure Media Player и подавать их обратно на промежуточный уровень (Web API), который выступает в роли посредника в соединении с управляемой базой данных (отчетности) Azure SQL. Затем вы должны подключить Power BI к источникам данных внутри базы данных отчетности для визуального выявления тенденций в использовании/потреблении медийной информации.

В следующих разделах этой статьи детализируется реализация этого сценария.

Динамическая упаковка и подготовка видео к потреблению

Самое лучшее в использовании Azure Media Services заключается в том, что вы можете подготовить свой видео/аудиоконтент для потребления на различных платформах. Для этого можно задействовать Azure Portal или выполнить те же операции из кода, если вы хотите автоматизировать их. В этом разделе сценария обсуждаются следующие задачи:

  • идентификация контента для потребления по заказу (в данном случае я выберу демонстрационный видеоконтент);
  • загрузка видео в Azure Media Services (поддерживается учетной записью Azure Storage);
  • мониторинг прогресса загрузки и передача задания на динамическую упаковку;
  • получение релевантных URL для потребления на разных платформах.

Я возьму пример из Azure (bit.ly/22Iy1ST) и создам консольное приложение на C# для решения этих задач. Хотя в этом примере используются NuGet-пакеты и программа на C#, вы также можете применять SDK, доступные в других языках. Здесь самый важный код — передача видео для кодирования и получение URL, как показано на рис. 1.

Рис. 1. Код для передачи задания на кодирование

static public IAsset EncodeToAdaptiveBitrateMP4s(IAsset asset,
  AssetCreationOptions options)
{
  IJob job = _context.Jobs.CreateWithSingleTask(
    "    Media Encoder Standard",
    "H264 Multiple Bitrate 720p",
    asset,
    "Adaptive Bitrate MP4",
    options);
  Console.WriteLine("Submitting transcoding job...");

  job.Submit();
  job = job.StartExecutionProgressTask(
  j =>
    {
      Console.WriteLine("Job state: {0}", j.State);
      Console.WriteLine("Job progress: {0:0.##}%",
        j.GetOverallProgress());
    },
    CancellationToken.None).Result;
  Console.WriteLine("Transcoding job finished.");
  IAsset outputAsset = job.OutputMediaAssets[0];
  return outputAsset;
}

Если вы новичок в Azure Media Services, просмотрите ниже краткий список используемых терминов.

  • Asset (или IAsset) (ресурс) Сущность, представляющая пакет Media с Azure Media Services. Может содержать один или более файлов контента.
  • Job (или IJob) (задание) Сущность, представляющая единицу работы, связанной с кодированием, которая выполняется Azure Media Services. Рассматривайте это как преобразование файла из одного формата в другой.
  • Adaptive Bitrate (адаптивный битрейт) Формат кодирования, который обеспечивает адаптацию к процессорным и сетевым возможностям целевой системы и доставляет контент, в максимальной мере подходящий под требования устройства. Вы должны лишь создать файлы Adaptive Bitrate, и Azure Media Services автоматически определит нужный битрейт, с которым контент будет передаваться клиентскому устройству в потоковом режиме.

Теперь, соединив воедино части с рис. 1, функция передает «ресурс» в Media Services Standard Encoder для преобразования в ресурс исходного формата Adaptive Bitrate MP4.

Пример также показывает прогресс выполнения задания, или же вы можете отслеживать его через Azure Portal в разделе Jobs (рис. 2). (Я не привел значения в поле ID.)

Пример Azure Media Services, отображающий прогресс выполнения задания

Рис. 2. Пример Azure Media Services, отображающий прогресс выполнения задания

Теперь, успешно создав media-ресурс, готовый к потреблению на разных устройствах и платформах, вы должны дать знать Azure Media Services о платформе целевого устройства, чтобы он мог передавать поток в правильной кодировке и с корректным форматом контента. Например, Windows-устройства обычно поддерживают воспроизведение формата Silverlight Smooth Streaming:

http://testendpoint-testaccount.streaming.mediaservices.
windows.net/fecebb23-46f6-490d-8b70-203e86b0df58/
assetvideo.ism/Manifest

а устройства iOS поддерживают формат видео HLS и другие:

http://testendpoint-testaccount.streaming.mediaservices.
windows.net/fecebb23-46f6-490d-8b70-203e86b0df58/
assetvideo.ism/Manifest(format=m3u8-aapl-v3)

Обратите на несколько замыкающих букв в URL, добавляемых после «Manifest». Эти нотации форматов помогают конечной точке Azure Media Services идентифицировать формат контента, подлежащий потоковой передаче на устройство. Теперь, когда у вас есть медийный контент для потоковой передачи устройству, давайте создадим HTML-страницу для потребления видео через Azure Media Player (bit.ly/1SQ8Rwr).

Потребление медийного контента и отправка данных серверной части для анализа

Azure Media Player — это веб-плеер видео, который дополняет возможности воспроизведения контента Azure Media Services на клиентской стороне. Он работает с нижележащей платформой браузера для визуализации видео (в основном от Azure Media Services) и требует минимальной настройки в JavaScript-коде. Однако цель не только в проигрывании медийного потока, но и в сборе аналитических данных по использованию с последующей их записью в серверной части. Поскольку наша задача — сделать возможным просмотр агрегатных данных для анализа, я сосредоточусь на записи только отобранной группы параметров, например идентификатора видеоконтента, названия видео, времени на паузе, временных метках и дополнительных сведениях/данных.

Соответственно HTML-код для плеера выглядит, как на рис. 3.

Рис. 3. HTML-код клиентской части

<!DOCTYPE html>
<html>
<head>
  <title>Welcome to the awesome world of Azure Media Services
  </title>
  <link href="http://amp.azure.net/libs/amp/1.6.3/skins/
    amp-default/azuremediaplayer.min.css"
    rel="stylesheet">
  <script src="http://amp.azure.net/libs/amp/1.6.3/
    azuremediaplayer.min.js"></script>
  <script src="https://ajax.aspnetcdn.com/ajax/jQuery/
    jquery-2.2.1.min.js"></script>
    <meta charset="utf-8" />
</head>
<body>
  <video id="azuremediaplayer" class="azuremediaplayer
    amp-default-skin amp-big-play-centered"
    tabindex="0"></video>
  <script src="scripts/Player/Player.js"></script>
</body>
</html>

HTML-код на рис. 3 просто объявляет элемент video наряду со свойствами, специфичными для Azure Media Player, чтобы разметить UI плеера. Обратите внимание на файл Player.js, который будет выполнять задачу обнаружения платформы для указанного URL видео, создавать объект аналитических данных и асинхронно отправлять его пользовательской серверной части.

Простейший код в Player.js может выглядеть примерно так, как на рис. 4.

Рис. 4. Задание источника видео и захват атрибутов Azure Media Player

var myOptions = {
  "nativeControlsForTouch": true,
  controls: true,
  autoplay: true,
  width: "640",
  height: "400",
    }
myPlayer = amp("azuremediaplayer", myOptions);
  myPlayer.src([
    {

// Для обнаружения функционала можно использовать библиотеки
// наподобие Modernizr, а затем конструировать URL

  "src": "http://demoendpoint.streaming.mediaservices.windows.
    net/8frnf8nf-1jd8-l9i8-009w-92073ffd3fsce/assetvideo.ism/
    Manifest", "type": "application/vnd.ms-sstr+xml",

  }
  ]);

  // События
  myPlayer.addEventListener(amp.eventName.pause,
    _ampEventHandler);

  // Другие подобные события

  // Выполняется загрузка контента
  // Медийный контент завершен
  // Поиск видео
  // Выгрузка страницы

  function _ampEventHandler(eventDetails)
  {
    var eventName = eventDetails.type;
    var pauseTime = eventDetails.presentationTimeInSec;
    var title = "Hello Azure Media Service ! ";
    var ExtraData = "None";
    var dateTime = new Date().toUTCString();
  
    var data = {
      'MediaRef': 9999,
      'EventTime': pauseTime,
      'MediaTitle': title,
      'TimeStamp': dateTime,
      'ExtraData' : ExtraData
    }

  $(function () {

  $.ajax({
    type: "POST",
    data: JSON.stringify(data),
    url: "http://demowebapi.azurewebsites.net/api/
      MediaAnalytics", contentType: "application/json"
  });

  });
  }

На рис. 4 показана самая элементарная форма атрибутов, которые можно собирать из Azure Media Player для ссылки. Вам медиаплеер может подключать гораздо больше обработчиков событий и захватывать больший набор показателей (bit.ly/1VA5osy). Хотя код ссылается на формат потоковой передачи, вы можете распознавать функциональность платформы и быстро подготавливать media URL для релевантного формата контента.

В этом примере обработчик подключается к событию «паузы» в Azure Media Player, который вызывает Web API серверной части через AJAX-вызов (JQuery), чтобы избежать любого блокирующего влияния на воспроизведение видео. Поэтому всякий раз, когда пользователь ставит видео на паузу, вызов серверной части осуществляется так, чтобы асинхронно передать данные в аналитическую базу данных, безо всякого ответа, который возвращался бы HTML-странице.

Поскольку JavaScript не является строго типизированным языком, вы можете создавать и добавлять динамические свойства в объект, а также задавать их значения. Объект данных в этом примере представляет экземпляр атрибутов, захваченных от Azure Media Player и передаваемых серверной части в виде JSON-строки (одном из широко применяемых форматов для взаимодействия с Web API).

JSON-строка выглядит так:

{
"MediaRef":12345,
"EventTime":15.5499976,"
MediaTitle":"Video - 21",
"TimeStamp":"Mon, 04 Apr 2016 16:03:36 GMT",
"ExtraData":"None"
}

Web API и база данных

Я выбрал сочетание Web API и базы данных из всего многообразия потому, что инструмент для создания отчетов в этом сценарии — Power BI (powerbi.microsoft.com). Чтобы не усложнять пример, был создан проект ASP.NET Web API для быстрой подготовки сервиса в серверной части. Это помогает легко настраивать взаимодействие от клиентской части, не беспокоясь о написании уймы кода для подключения к СУБД. В отличие от клиентского AJAX-вызова важно гарантировать возможность соединений и обратную связь с уровня базы данных. Любая проблема в CRUD-операциях с базой данных может привести к неудаче при попытке захвата показателей на клиентской стороне. Этот подход также помогает в тестировании соединений Web API с базой данных без необходимости в написании сложных наборов тестов.

Код на рис. 5 показывает, как Web API серверной части принимает JSON-объект данных от клиентского HTML и передает его в SQL Azure Database.

Рис. 5. Web API и база данных

public class MediaAnalyticsController : ApiController
{
  async public void Post([FromBody]
    MediaWebAPI.Models.MediaData value)
  {
    using (SqlConnection connection =
      SQLConnHelper.CreateDatabaseConnection())
    {
      await connection.OpenAsync();
      int EntryID = SQLConnHelper.SQLWriteAnalyticsDataAsync(
        value, connection);
      connection.Close();
      connection.Dispose();
    }
  }
}

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

Чтобы представить аналитические данные в структурированном формате в базе данных, я создал таблицу, близко соответствующую Model (в MVC) или JSON-объекту, принимаемому мной от клиентского HTML, как показано на рис. 6.

Упрощенный дизайн таблицы

Рис. 6. Упрощенный дизайн таблицы

Совет Другой удобный способ создать серверную часть как сервис — задействовать Azure Mobile Apps, которая позволяет при создании сервиса быстро подготавливать Web API и Azure SQL Database.

Собираем рабочий процесс воедино: получение четкой картины через Power BI

На всех предыдущих этапах мы создавали блоки для подготовки демонстрации конечной цели основной темы, рассматриваемой здесь: Analytics/BI с использованием компонента Azure Media Services.

Благодаря комбинации Azure Media Services и Azure Media Player вы смогли быстро подготовить доставку видео, не особо волнуясь о кодировке и потоковых возможностях. Однако большинство организаций также заинтересовано в получении четкой картины закономерностей в использовании потребления медийной информации. Azure предоставляет отличную платформу визуализации для разработки и поддержки инновационных решений для наглядного анализа данных от ваших облачных сервисов. Power BI — это средство визуализации и анализа данных, которое поддерживает создание интерактивных информационных панелей (dashboards) для мониторинга показателей/KPI с применением простых в настройке сред разработки.

Чтобы создавать визуализации и выявлять тенденции в использовании медийного контента, вы будете применять инструмент рабочего стола (desktop tool) Power BI (bit.ly/1S8XkLO) для конфигурирования и создания отчетов, которые затем будут публиковаться как информационные панели для мониторинга KPI. На рабочем столе Power BI щелкните кнопку Get Data и выберите More из раскрывающегося списка. Вы должны увидеть список поддерживаемых источников данных и (в данном примере) выбрать Microsoft Azure SQL Database (рис. 7).

Начало работы с Power BI

Рис. 7. Начало работы с Power BI

Далее мастер Get Data подключается к базе данных, и вы можете указывать дополнительные параметры для импорта данных в дизайнер. Power BI использует наборы данных для загрузки данных из источников.

После импорта данных вы создадите отчет, используя диаграммы/артефакты визуализации, которые отражают показатели KPI. В сценарии с несколькими таблицами возможны взаимосвязи между таблицами для сложных пользовательских объектов, которые тоже могут быть определены в модели. Наборы данных и визуализации можно сопоставлять в пары с помощью панели в правом верхнем углу инструмента рабочего стола Power BI (рис. 8).

Создание диаграмм визуализации

Рис. 8. Создание диаграмм визуализации

Каждая визуализация образует плитку в интерфейсе отчета Power BI, отражающую конкретный KPI. В этом сценарии такие показатели, как коэффициенты полноты просмотра видео (video completion rates), интервалы времени на паузах (pause times) и наиболее часто потребляемый медийный контент (most consumed media content), должны дать общее представление об использовании, которое можно применить в рекламных кампаниях, анализе активности пользователей и др.

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

Наконец, отчеты можно публиковать через Web на PowerBI.com для широкого использования (рис. 9).

Информационная панель Power BI, отображающая отчеты

Рис. 9. Информационная панель Power BI, отображающая отчеты

Заключение

Я рассказал лишь о вершине айсберга в области решений и сервисов, которые Microsoft Azure способна предоставлять разработчикам и поставщикам решений. Наряду с видео по заказу Azure Media Services позволяет доставлять и потоки реального времени. Вы легко найдете полную документацию по случаям применения и сценариям для Azure Media Services, веб-приложений и баз данных, которая поможет разработчикам подготавливать и запускать приложения в считанные минуты. Усовершенствования регулярно включаются в Azure и платформу Power BI почти каждый месяц для поддержки новых сценариев использования сервисов.

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

Сагар Бханудас Джоши (Sagar Bhanudas Joshi) работает с разработчиками и ISV на платформе Microsoft Azure в течение более шести лет, а также на Universal Windows Platform. В его обязанности входит помощь ISV и начинающим компаниям в создании архитектуры, проектировании и развертывании решений и приложений на платформах Microsoft Azure, Windows и Office 365. Живет и работает в Мумбаи (Индия). С ним можно связаться через Twitter (@sagarjms).

Выражаю благодарность за рецензирование статьи эксперту Microsoft Сандипу Дж. Алуру  (Sandeep J. Alur).