Фильтры и динамические манифесты

Логотип Служб мультимедиа


Начиная с версии 2.17, службы мультимедиа позволяют определять фильтры для активов. Эти фильтры представляют собой правила на стороне сервера, позволяющие пользователям выполнять следующие действия: воспроизведение только части видео (вместо целого) или указание подмножества представлений аудио и видео, которые может обрабатывать устройство клиента (вместо всех представлений, связанных с ресурсом). Такая фильтрация активов достигается с помощью динамических манифестов, которые создаются по запросу клиента для потоковой передачи видео на основе указанных фильтров.

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

Обзор

При доставке содержимого клиентам (в виде потоковой трансляции событий в режиме реального времени или видео по запросу) ваша задача — доставлять видео высокого качества для различных устройств в разных сетевых условиях. Для достижения этой цели необходимо сделать следующее:

  • закодировать видеопоток с разными скоростями (с адаптивной скоростью) (что позволит справиться с условиями качества и сети) и
  • использовать динамическую упаковку служб мультимедиа для динамической перепаковки потока в разные протоколы (это позволит транслировать поток на разных устройствах). Службы мультимедиа поддерживают доставку данных в следующих форматах потоковой передачи с переменной скоростью: HTTP Live Streaming (HLS), Smooth Streaming и MPEG-DASH.

Файлы манифестов

При кодировании актива для потоковой передачи с адаптивной скоростью создается файл манифеста (списка воспроизведения) (в основе файла — текст или XML). Файл манифеста содержит потоковые метаданные, например тип дорожки (звук, видео или текст), имя дорожки, время начала и окончания, скорость (качество), языки дорожки, окно представления (скользящее окно фиксированной длительности), видеокодек (FourCC). Также он предписывает проигрывателю получить следующий фрагмент, предоставляя информацию о следующих доступных для воспроизведения фрагментах видео и их расположении. Фрагменты (или сегменты) — это фактические составные части видеосодержимого.

Ниже приведен пример файла манифеста:

<?xml version="1.0" encoding="UTF-8"?>    
<SmoothStreamingMedia MajorVersion="2" MinorVersion="0" Duration="330187755" TimeScale="10000000">

<StreamIndex Chunks="17" Type="video" Url="QualityLevels({bitrate})/Fragments(video={start time})" QualityLevels="8">
<QualityLevel Index="0" Bitrate="5860941" FourCC="H264" MaxWidth="1920" MaxHeight="1080" CodecPrivateData="0000000167640028AC2CA501E0089F97015202020280000003008000001931300016E360000E4E1FF8C7076850A4580000000168E9093525" />
<QualityLevel Index="1" Bitrate="4602724" FourCC="H264" MaxWidth="1920" MaxHeight="1080" CodecPrivateData="0000000167640028AC2CA501E0089F97015202020280000003008000001931100011EDC00002CD29FF8C7076850A45800000000168E9093525" />
<QualityLevel Index="2" Bitrate="3319311" FourCC="H264" MaxWidth="1280" MaxHeight="720" CodecPrivateData="000000016764001FAC2CA5014016EC054808080A00000300020000030064C0800067C28000103667F8C7076850A4580000000168E9093525" />
<QualityLevel Index="3" Bitrate="2195119" FourCC="H264" MaxWidth="960" MaxHeight="540" CodecPrivateData="000000016764001FAC2CA503C045FBC054808080A000000300200000064C1000044AA0000ABA9FE31C1DA14291600000000168E9093525" />
<QualityLevel Index="4" Bitrate="1469881" FourCC="H264" MaxWidth="960" MaxHeight="540" CodecPrivateData="000000016764001FAC2CA503C045FBC054808080A000000300200000064C04000B71A0000E4E1FF8C7076850A4580000000168E9093525" />
<QualityLevel Index="5" Bitrate="978815" FourCC="H264" MaxWidth="640" MaxHeight="360" CodecPrivateData="000000016764001EAC2CA50280BFE5C0548303032000000300200000064C08001E8480004C4B7F8C7076850A45800000000168E9093525" />
<QualityLevel Index="6" Bitrate="638374" FourCC="H264" MaxWidth="640" MaxHeight="360" CodecPrivateData="000000016764001EAC2CA50280BFE5C0548303032000000300200000064C080013D60000C65DFE31C1DA1429160000000168E9093525" />
<QualityLevel Index="7" Bitrate="388851" FourCC="H264" MaxWidth="320" MaxHeight="180" CodecPrivateData="000000016764000DAC2CA505067E7C054830303200000300020000030064C040030D40003D093F8C7076850A45800000000168E9093525" />

<c t="0" d="20000000" /><c d="20000000" /><c d="20000000" /><c d="20000000" /><c d="20000000" /><c d="20000000" /><c d="20000000" /><c d="20000000" /><c d="20000000" /><c d="20000000" /><c d="20000000" /><c d="20000000" /><c d="20000000" /><c d="20000000" /><c d="20000000" /><c d="20000000" /><c d="9600000"/>
</StreamIndex>


<StreamIndex Chunks="17" Type="audio" Url="QualityLevels({bitrate})/Fragments(AAC_und_ch2_128kbps={start time})" QualityLevels="1" Name="AAC_und_ch2_128kbps">
<QualityLevel AudioTag="255" Index="0" BitsPerSample="16" Bitrate="125658" FourCC="AACL" CodecPrivateData="1210" Channels="2" PacketSize="4" SamplingRate="44100" />

<c t="0" d="20201360" /><c d="20201361" /><c d="20201360" /><c d="20201361" /><c d="20201360" /><c d="20201361" /><c d="20201360" /><c d="20201361" /><c d="20201360" /><c d="20201361" /><c d="20201360" /><c d="20201361" /><c d="20201361" /><c d="20201360" /><c d="20201361" /><c d="20201360" /><c d="6965987" /></StreamIndex>


<StreamIndex Chunks="17" Type="audio" Url="QualityLevels({bitrate})/Fragments(AAC_und_ch2_56kbps={start time})" QualityLevels="1" Name="AAC_und_ch2_56kbps">
<QualityLevel AudioTag="255" Index="0" BitsPerSample="16" Bitrate="53655" FourCC="AACL" CodecPrivateData="1210" Channels="2" PacketSize="4" SamplingRate="44100" />

<c t="0" d="20201360" /><c d="20201361" /><c d="20201360" /><c d="20201361" /><c d="20201360" /><c d="20201361" /><c d="20201360" /><c d="20201361" /><c d="20201360" /><c d="20201361" /><c d="20201360" /><c d="20201361" /><c d="20201361" /><c d="20201360" /><c d="20201361" /><c d="20201360" /><c d="6965987" /></StreamIndex>

</SmoothStreamingMedia>

Динамические манифесты

Существуют сценарии , когда клиенту требуется больше гибкости, чем описано в файле манифеста актива по умолчанию. Пример:

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

Для достижения такой гибкости службы мультимедиа предоставляют динамические манифесты на основе предварительно определенных фильтров. После определения фильтров клиенты могут использовать их для потоковой передачи определенного представления или субклипов видео. Фильтры указываются в URL-адресе потоковой передачи. Фильтры можно применять к протоколам потоковой передачи с переменной скоростью, которые поддерживаются динамической упаковкой: HLS, MPEG-DASH и Smooth Streaming. Пример:

URL-адрес MPEG DASH с фильтром

http://testendpoint-testaccount.streaming.mediaservices.windows.net/fecebb23-46f6-490d-8b70-203e86b0df58/BigBuckBunny.ism/Manifest(format=mpd-time-csf,filter=MyLocalFilter)

URL-адрес Smooth Streaming с фильтром

http://testendpoint-testaccount.streaming.mediaservices.windows.net/fecebb23-46f6-490d-8b70-203e86b0df58/BigBuckBunny.ism/Manifest(filter=MyLocalFilter)

Дополнительные сведения о способах доставки содержимого и построения URL-адресов потоковой передачи см. в статье Доставка содержимого клиентам.

Примечание

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

фильтры;

Существуют два типа фильтров активов.

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

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

Распространенные сценарии

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

  • Указание только части представлений аудио и видео, которые могут обрабатываться определенными устройствами (вместо всех представлений, связанных с активом).
  • Воспроизведение только части видео (вместо воспроизведения видео целиком).
  • Настройка окна представления DVR.

Фильтрация представлений

По выбору можно закодировать актив в несколько профилей кодирования (H.264 Baseline, H.264 High, AACL, AACH, Dolby Digital Plus) и с несколькими значениями скорости потока и соответственно качества. Однако не все клиентские устройства будут поддерживать все профили и скорости потока вашего актива. Например, старые устройства Android поддерживают только профиль H.264 Baseline+AACL. Отправка высоких скоростей потока на устройство, которое не способно получить их преимущества, приводит к трате излишней пропускной способности и вычислительных ресурсов устройства. Такое устройство должно декодировать всю заданную информацию только для того, чтобы уменьшать ее масштаб для отображения.

С помощью динамического манифеста можно создать профили устройств, например мобильных устройств, консолей, HD/SD и т. д., и включить в них дорожки и варианты качества, которые следует сделать частью каждого из профилей.

Пример фильтрации представлений

В следующем примере использовался кодировщик для кодирования промежуточного актива в семь MP4-видеофайлов стандарта ISO (с разрешением от 180p до 1080p). Закодированный ресурс можно динамически упаковать в любой из следующих потоковых протоколов: HLS, Smooth Streaming и MPEG-DASH. В верхней части схемы показан манифест HLS манифеста для актива без фильтров (он содержит все семь представлений). В левом нижнем углу показан манифест HLS, к которому был применен фильтр с именем ott. Фильтр ott предписывает удалить все варианты скорости потока ниже 1 Мбит/с, что ведет к исключению двух нижних уровней качества. В правом нижнем углу показан манифест HLS, к которому был применен фильтр с именем mobile. Фильтр mobile предписывает удалить представления, где разрешение больше 720p, что ведет к исключению двух представлений с разрешением 1080p.

Фильтрация представлений

Удаление языковых дорожек

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

Фильтрация языковых дорожек

Обрезка начала актива

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

Начало обрезки

Создание субклипов (представлений) из текущего архива

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

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

Фильтр субклипа

Фильтрованный архив:

Лыжный спорт

Настройка окна презентации (DVR)

В настоящее время службы мультимедиа Azure поддерживают циклический архив, продолжительность которого можно настроить от 5 минут до 25 часов. Фильтрация манифеста позволяет создать скользящее окно DVR поверх архива, без удаления медиаданных. Есть множество сценариев, где вещателям требуется предоставить ограниченное окно DVR, которое перемещается вместе с текущей границей, и в то же время поддерживать более крупное окно архивации. Вещателю может понадобиться использовать данные, находящиеся за пределами окна DVR, для выделения клипов, или же предоставлять разные окна DVR для различных устройств. Например, большинство мобильных устройств не обрабатывает большие окна DVR (для мобильных устройств можно установить 2-минутное окно DVR, а для настольных клиентов — продолжительностью в 1 час).

Окно DVR

Настройка LiveBackoff (динамической позиции)

Фильтрация манифеста позволяет удалить несколько секунд с динамической границы текущей программы. Это позволяет вещателям просматривать представление в точке предварительной публикации и создавать точки вставки рекламы до того, как зрители получат потоковую передачу (резерв составляет 30 секунд). Затем вещатели могут передавать рекламу на клиентские платформы, располагая временем для получения и обработки информации до появления возможности для рекламы.

Кроме поддержки рекламы параметр LiveBackoff можно использовать для регулирования позиции представлений, благодаря чему даже если клиенты переместятся и выйдут из зоны покрытия, они все равно смогут получать фрагменты с сервера вместо ошибок HTTP 404 или 412.

livebackoff_filter

Объединение нескольких правил в одном фильтре

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

multiple-rules

Программное создание фильтров

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

Создание фильтров с помощью интерфейсов REST API.

Объединение нескольких фильтров (сложение фильтров)

Кроме того, вы можете объединять несколько фильтров в одном URL-адресе.

В следующем сценарии показано, для чего могут потребоваться подобные фильтры:

  1. При необходимости отфильтровать качество видео для мобильных устройств, например, Android или iPAD (для ограничения качества видео). Чтобы удалить содержимое нежелательного качества, вы могли бы создать глобальный фильтр, который подходит для профилей устройств. Как упоминалось выше в этой статье, глобальные фильтры можно использовать для всех ресурс-контейнеров в одной учетной записи служб мультимедиа без каких-либо дополнительных связей.
  2. При необходимости обрезать время начала и окончания ресурс-контейнера. Для этого можно создать локальный фильтр и задать время начала и окончания.
  3. При необходимости объедините оба этих фильтра. Без объединения вам потребуется добавить фильтрацию качества в фильтр обрезки, что может затруднить использование фильтра.

Для объединения фильтров необходимо указать их имена в URL-адресе манифеста или списка воспроизведения через точку с запятой. Допустим, у вас есть фильтр качества с именем MyMobileDevice и фильтр MyStartTime для выбора конкретного времени начала. Их можно объединить следующим образом:

http://teststreaming.streaming.mediaservices.windows.net/3d56a4d-b71d-489b-854f-1d67c0596966/64ff1f89-b430-43f8-87dd-56c87b7bd9e2.ism/Manifest(filter=MyMobileDevice;MyStartTime)

Вы можете объединить до трех фильтров.

Дополнительную информацию см. в этом блоге.

Известные проблемы и ограничения

  • Динамический манифест работает в пределах GOP (по ключевым кадрам), поэтому обрезка производится с точностью GOP.
  • Одно и то же имя фильтра можно использовать для локальных и глобальных фильтров. Локальные фильтры имеют более высокий приоритет и переопределяют глобальные фильтры.
  • При обновлении фильтра может понадобиться до 2 минут на обновление правил конечной точкой потоковой передачи. Если содержимое было обработано с помощью каких-либо фильтров (и кэшировано на прокси-серверах и в кэшах CDN), обновление этих фильтров может привести к сбоям проигрывателя. Рекомендуется очистить кэш после обновления фильтра. Если такой вариант невозможен, рассмотрите возможность использования другого фильтра.

Схемы обучения работе со службами мультимедиа

Службы мультимедиа версии 3 (последняя версия)

Ознакомьтесь с последней версией Служб мультимедиа Azure.

Службы мультимедиа версии 2 (прежняя версия)

Отзывы

На форуме User Voice можно оставить свои отзывы о работе служб мультимедиа Azure или предложения по их улучшению. Вы также можете перейти непосредственно к одной из следующих категорий:

См. также:

Обзор доставки содержимого клиентам