28
Янв

Как известно, видео на стороне клиента можно проигрывать большим количеством вариантов:

  • через Flash-проигрыватель — наверное, самый распространенный вариант;
  • через Silverlight-проигрыватель;
  • через ActiveX-элемент, реализуемый каким-либо установленным проигрывателем в системе (Windows-метод);
  • через тег video согласно стандарту HTML5 (если браузер поддерживает);
  • через системный видео-проигрыватель (например, VLC);
  • посредством медиа-центра (например, Plex и XBMC).

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

В процессе работы над hdin.tv я использовал проигрыватель JW Player компании LongTail Video. Достаточно функциональный, с системой дополнительных модулей и легко настраиваемый через параметры встраивания.

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

Однако не все так просто. Дело в том, что достаточно недавно JW Player сменил цифру в начале именования версий с 4 на 5. С новым API для плагинов, почти полностью переписанный, он сохранил совместимость со старыми модулями, но не со всеми и не всегда на очень хорошем уровне. Т.е. при подключении возможны были сбои в работе как плагина, так и плеера. В результате пришлось хорошенько потрудится над кодом модулей, благо они весьма благополучно могли собираться при помощи Flex SDK, доступной под Линукс, а про ActionScript я что-то помнил, когда занимался Flash-элементами для сайтов. Поскольку исходный код модулей распространялся под лицензией GPL, соответственно, было бы неправильным держать код в тайне, тем более что и тайны никакой нету, и моего труда в нем мало.

Как собирать плагины
Потребуется Flex SDK (берется на сайте Adobe, прямую ссылку не даю, поскольку оно там неплохо разбросано). Далее, пишем Shell-сценарий для упрощения процедуры.

1
2
3
#!/bin/bash
FLEXPATH=/home/mkrentovskiy/Flex/sdks/3.0.0
$FLEXPATH/bin/mxmlc ./com/jeroenwijering/plugins/Captions.as -sp ./ -o ./captions.swf -use-network=false

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

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

Shortcuts.as

Captions
Модуль субтитров практически не изменился, за исключением того, что я убрал кнопку включения / выключения модулей (на сайте это сделано через JavaScript) и подвинул повыше отображаемые субтитры — в случае, когда панель управления воспроизведением автоматически убиралась с экрана, модуль неправильно рассчитывал позицию, в результате чего субтитры блокировали управление воспроизведением.

Captions.as

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

Audiodescription.as

В целом, JW Player — на редкость удобный инструмент, а новое API для плагинов — простое и понятное. Думаю, рано или поздно авторы плагинов приведут свои разработки к новому API и тогда сделанные мной «костыли» не потребуются.

1 ком.
  1. [...] JW Player, позволяющий нарастить функционал проигрывания (добавить субтитры и дополнительные дорожки, задейство…), который достаточно просто конфигурируется через [...]

Максим Крентовский
системный архитектор
E-mail / GTalk: mkrentovskiy@gmail.com
Skype: mkrentovskiy