MPEG DASH: стримим с DataArt

bfbf3731a61d40278ede652ecb3c6b4f.png

Сети доставки
Объем мультимедийного контента, доставляемого конечным пользователям, растет. Владение и управление соответствующей инфраструктурой доставки — неэффективное вложение средств для большинства компаний, особенно если IT — не их целевой бизнес. В этих случаях, как правило, используются сторонние поставщики решений — так называемые сети доставки контента (Content Delivery Networks). Сети доставки медиаконтента исторически ориентировались на статические файлы: изображения, анимацию, документы — и обладали собственной инфраструктурой доставки на основе протокола HTTP.

Естественным шагом для этих сетей была адаптация технологий доставки видео на основе того же транспортного протокола — HLS (Apple), HDS (Adobe) и SmoothStreaming (Microsoft). Эти технологии — предшественники MPEG-DASH — были на 99% идентичны по принципиальному устройству, но сильно различались в способах представления данных и метаданных.

Схема доставки медиаконтента по HTTP включает два компонента: описание последовательности URI составных частей медиаресурса и инфраструктуру, которая поставляет данные в соответствии с URI, указанными в описании. У протоколов HLS, HDS и SmoothStreaming кардинально различаются особенности описания, хотя они поддерживают схожие медиаформаты.

Единая технология
Разработчикам и компаниям, производящим контент, необходимо поддерживать как минимум два формата, чтобы охватить 100% интернет-аудитории. Например, в продукции Apple используется HLS, а HDS можно использовать для флэш-плееров на более старых браузерах, не поддерживающих HTML5.

Хорошая новость — большинство современных телевизоров и телеприставок поддерживают или планируют поддерживать протокол MPEG-DASH. Однако родной поддержки MPEG-DASH от Apple в ближайшем будущем можно не ждать (в отличие от устройств, использующих ОСAndroid).

Open source-плеер MPEG-DASH
Как вы могли прочитать здесь, DataArt недавно выпустил видеоплеер, поддерживающий протокол MPEG-DASH.

С момента ратификации в стандарте ISO, т. е. три года, MPEG-DASH считается, в определенной степени, технологическим прорывом, т. к. удобен и создателям контента, и рекламодателям и, что самое важное, потребителям. Сейчас эту технологию используют сервисы UStream, LiveStream, YouTube и др. Не стихают и слухи, что главный противник DASH, Apple, собирается пересмотреть политику по отношению к нему уже к осени 2015 г.

DataArt разработал собственное приложение для просмотра видеостриминга на мобильных устройствах с использованием технологии MPEG-DASH для iOS, схожее с такими их продуктами, как HLS.

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

  • Чтобы разобраться с принципами работы формата, команда DataArt установила сервер Nginx и развернула видеострим при помощи FFmpeg. Для прогона тестового видео мы использовали браузер с поддержкой dash.js. На начальном этапе разработке мы обнаружили возможность создать плеер с помощью объектно-ориентированной open source-библиотеки Libdash. Наша команда была в курсе, что Libdash —простой парсер, который позволяет принимать описания через определенный URL и разбить его на классы в C++. Однако делу эта информация не слишком помогла, поэтому для удобства работы с Objective-C мы реализовали функционал парсера используя стандартные библиотеки и стандартный NSURLConnection для HTTP запросов.
  • После нескольких заминок с совместимостью и синхронизацией, мы начали тестирование клиента на iPod Touch пятого поколения. Именно тогда обнаружилось, что проигрывание HD-видео шло с низкой частотой кадров из-за лагов при расшифровке. Поэтому решили повесить эту задачу на центральный процессор, что моментально решило проблему. На стадии развертывания VoD (видео по запросу) внедрили функции воспроизведения, паузы и перемотки, возможность выбирать потоковые ссылки с помощью таблицы истории.
  • Мы разработали алгоритм, который адаптируется к состояниям сети и может сам выбирать качество видео в зависимости от скорости закачки прошлых видео и в то же время автоматически выбирать размер сегмента, который можно загрузить за минимальное время. В будущем мы планируем улучшить алгоритм благодаря внедрению Марковского процесса принятия решений (MDP).
  • На финальном этапе решали проблему с разными типами данных, содержащихся в описании. Некоторые обладают серверными ограничениями по битрэйту, другие привязаны к сегментам инициализации и sidx (SegmentIndexBox), у которых есть ограничения по битрейту для каждого медиасегмента на сервере. Но решение проблемы не заставило себя долго ждать: мы обнаружили, что в JavaScript существует встроенные парсер с dash.js и успешно конвертировали его в алгоритм скачивание сегментов в Objective-C


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

Как говорится в пресс-релизе, у MPEG-DASH много плюсов: общее шифрование, эффективная вставка рекламы и поддержка нескольких CDN и кэшей с общим главенствующим описанием. Мы рады внести свою лепту в эту оживленную экосистему.
github.com/MPEGDASHPlayer

Авторы:
Андрей Сорокин, Senior Software Architect.
Роман Егорышев, Vice President, Media and Entertainment.

© Geektimes