Реализация аудио дорожек во Flash

This post is also available in: Английский

flash video audio tracks

В наше время всеобщей глобализации и интернационализации http://zaycevtut.net/  большинство Интернет проектов запускаются сразу на нескольких языках. Особенно это актуально для онлайн видео проектов. Видео материалы с альтернативными аудио дорожками и субтитрами часто привлекают зрителей самим фактом их наличия. Большая часть популярного контента создается за границами России, поэтому контента с оригинальными аудио дорожками и субтитрами очень много. Такой контент дает возможность получать удовольствия от просмотра видео в оригинальном качестве со всеми деталями, а также изучать иностранные языки. В статье мы расскажем про реализацию такой функциональность во Flash видео плеере при помощи OSMF 1.6.

Недавно Adobe анонсировала OSMF 1.6 — новый релиз OSMF, в котором появилась поддержка альтернативных аудио дорожек. Честно говоря, подстановка альтернативной аудио дорожки на стороне клиента, да еще и на уровне ActionScript, вызывает много вопросов и даже некоторое разочарование. Но тем не менее это очень эффективный и легкий способ поддержки нескольких аудио дорожек для видео контента. Ранее была возможность лишь для каждой аудио дорожки хранить отдельный видео файл, что приводило к существенному увеличению затрат на систему хранения видео контента. Особенно ситуация осложняется при наличии динамического битрейта в видео контента.

Для поддержки альтернативных аудио дорожек в видео проекте требуется несколько простых шагов:
1) Подготовить видео контент (с одной аудио дорожкой) и отдельно альтернативные аудио дорожки
2) Подготовить мета данные контента (манифест f4m v2)
3) Доработать видео плеер для возможности переключения аудио дорожек

Подготовка контента
Видео контент необходимо подготовить в обычном виде для HTTP Dynamic Streaming (это делается при помощи утилиты f4fpackager), в процессе упаковки создается обычный multi-bitrate манифест. После того как сформирован окончательный манифест необходимо его немного отредактировать для внесения информации об альтернативных аудио дорожках. В тегах звуковых дорожек нужно добавить следующие аттрибуты:

  • alternate = «true»
  • type = «audio»
  • lang = «English» (пример)
  • bitrate = «» (обязательно пустым, dynamic bitrate для звука не поддерживается)

После этого остается лишь поменять версию манифеста:

1
<manifest xmlns="http://ns.adobe.com/f4m/1.0">

заменить на

1
<manifest xmlns="http://ns.adobe.com/f4m/2.0">

Далее все получившиеся в процессе подготовки контента файлы нужно опубликовать на веб сервере: f4v основное видео с основной аудио дорожкой, f4v файлы альтернативных аудио дорожек, f4m манифест файл. В своих проектах для подготовки контента мы используем программные транскодеры Rhozet (по причине наличия удобных средств автоматизации), хотя никто не мешает использовать более бюджетные реализации транскодеров. HTTP Dynamic Streaming доставка контента поддерживается при помощи Apache плагина разработанного Adobe, хотя никто не мешает сделать f4v плагин по спецификации для любого другого веб сервера.

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

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

Страница wiki с описанием функциональности поддержки нескольких аудио дорожек здесь.
Дополнительный туториал по реализации поддержки аудио дорожек здесь.