Рис.9. Веб-плеер Flow Player.

Flowplayer известен своим API, который является объектно-ориентированным, а не простым набором функций, так же есть штатный плагин для взаимодействия с библиотекой jQuery и взаимодействия с json объектами. Базовые объекты плеера показаны в таблице 1.

Tаблица 1. Базовые объекты Flow Player.



Player

Управляет самим плеером, событиями и копками

Clip

Содержит информацию о проигрываемом ролике – его длительность, формат и т. д.

Playlist

Массив с клипами

Plugin

Управляет плагинами, их размерами и загружает в них

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

·  Плагины для работы с сетями доставки контента (CDN), примечательны тем, что если видеопоток с одного сервера прекращается, плеер переключается на другой сервер.

·  Плагины для работы с рекламными сетями, которые в отличии от JW плеера, с открытым кодом.

·  Плагин captions отображает субтитры, имеет встроенные парсеры различных XML файлов.

·  Плагин content оперирует с html кодом

Объектно-ориентированная структура API дает возможность конфигурировать плеер и поведение графических объектов в нем, не компилируя для этого специальных swf-объектов. Это самое главное преимущество данного плеера по сравнению с другими. Недостаток данного плеера в том, что его некоторые компоненты работают крайне не стабильно, и даже на официальном сайте не всегда работают примеры. Так, например, не работает псевдостриминг, поэтому в данной работе использовался JW player, у которого нет такой проблемы.

НЕ нашли? Не то? Что вы ищете?

JW player (рис. 10) – наиболее популярный и гибкий медиаплеер, поддерживает все форматы, что и среда Flash Player. Также поддерживает различные форматы плейлистов, включая XML, и имеет ряд настроек и JavaScript API.[12]

Рис.10. Веб-плеер Jw Player.

Плеер имеет несколько десятков плагинов, модулей для различных систем, встроенные XML парсеры, может работать без включенного в браузере JavaScript. Плеер легко устанавливается и его код в html документе занимает несколько строк.

Штатные плагины подключаются с сайта, достаточно просто прописать их название, то есть пользователю вовсе не обязательно указывать путь до swf-объекта.

АPI плеера не так функционален, как у Flow Player, но зато писать плагины намного легче, так как это можно делать не только в среде Adobe Flex Builder, а еще и в Adobe Flash.

Коммерческая лицензия на использование JW плеера для одного сайта составляет 20€, что почти в 3 раза меньше чем у Flowplayer.

Для данной работы был выбран JW player, потому что он работает стабильнее, ниже стоимость коммерческой лицензии и легче создавать свои плагины.

3.2. Установка веб-плеера на странице

На сегодняшний день используется два метода встраивания swf объектов в страницу html – c помощью тэга <EMBED> и с помощью JavaScript библиотеки SWFObject.[13]

3.2.1. Установка с помощью тэга <EMBED>

Элемент <EMBED> используется для загрузки и отображения объектов (например, видеофайлов, flash-роликов, некоторых звуковых файлов и т. д.), которые исходно браузер не понимает. Как правило, такие объекты требуют подключения к браузеру специального модуля, который называется плагином, или запуска вспомогательной программы.

Спецификация HTML 4.0 рекомендует использовать тег <OBJECT> для загрузки внешних данных вместо тега <EMBED>. Однако некоторые браузеры не отображают таким образом нужную информацию, поэтому наилучшим вариантом будет поместить <EMBED> внутрь контейнера <OBJECT>.

Вид внедренного объекта зависит от установленных в браузере плагинов, типа загружаемого файла, а также от параметров тега <EMBED>.

Основные параметры:

·  align – определяет, как объект будет выравниваться на странице и способ его обтекания текстом;

·  height – высота объекта;

·  hidden – указывает, скрыть объект на странице или нет;

·  hspace – горизонтальный отступ от объекта до окружающего контента;

·  pluginpage – адрес страницы в Интернете, откуда можно скачать и установить плагин к браузеру;

·  src – путь к файлу;

·  type – MIME-тип объекта;

·  vspace – вертикальный отступ от объекта до окружающего контента;

·  width – ширина объекта.

Ниже показан пример подключения плеера с плагинов.

<embed

src="http://www. /player. swf"

width="400"

height="320"

allowscriptaccess="always"

allownetworking="all"

allowfullscreen="true"

flashvars="file=/upload/flash. flv&plugins=viral-1"

/>

3.2.2. Установка c помощью библиотеки SWFObject

SWFObject — это популярный способ публикации Flash-роликов на JavaScript. По сравнению с классическим HTML, он имеет ряд преимуществ:

·  кроссбраузерный  и соответствует стандартам;

·  позволяет избежать необходимости активации Flash-ролика пользователем в Internet Explorer (IE Eolas Update);

·  можно задавать альтернативный контент в случае, если у пользователя не установлен Flash-плеер или стоит старая версия;

·  можно проверять версию Flash-плеера и предлагать обновиться, если та устарела, либо запускать экспресс-инсталляцию Flash-плеера, если он не установлен;

·  можно динамически загружать/выгружать плееры без перезагрузки страницы.

SWFObject позволяет внедрять Flash двумя различными методами.

·  Статическом метод – публикации Flash и альтернативный контент внедряются с помощью стандартной разметки, а JavaScript используется для решения проблем, непреодолимых с помощью разметки.

·  Динамический метод публикации основан на замене альтернативного контента Flash контентом в случае, если есть достаточно новая версия Flash плеера и поддержка JavaScript.

Преимущества статического метода публикации:

·  используется стандартная разметка:

·  механизм внедрения Flash контента не зависит от JavaScript, благодаря чему Flash будет доступен значительно большей аудитории.

При статической публикации SWFObject использует метод вложенных объектов (с условными комментариями для Internet Explorer, начиная с версии 6). Это наиболее оптимальная кроссбраузерная разметка, соответствующая стандартам и позволяющая задать альтернативный контент. При этом требуется дублирование объявления object (внешний object предназначен для Internet Explorer а внутренний object для остальных браузеров), поэтому, если нужно определить атрибуты или param для object, то их нужно продублировать для внешнего и внутреннего объектов.

Обязательные атрибуты:

·  classid (только для внешнего object, значение всегда clsid:D27CDB6E-AE6D-11cf-96B8-)

·  type (только для внутреннего object, значение всегда application/x-shockwave-flash)

·  data (только для внутреннего object, определяет URL SWF файла)

·  width (для обоих элементов object, определяет ширину SWF)

·  height (для обоих элементов object, определяет высоту SWF)

Обязательные элементы param:

·  movie (только для внешнего элемента object, определяет URL SWF - файла)

Ниже представлен пример установки плеера на страницу статическим методом.

<script type="text/JavaScript" src="swfobject. js"></script>

<script type="text/JavaScript">

swfobject. registerObject("player","9.0.98","expressInstall. swf");

</script>

<object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-" name="player" width="328" height="200">

<param name="movie" value="player. swf" />

<param name="allowfullscreen" value="true" />

<param name="allowscriptaccess" value="always" />

<param name="flashvars" value="file=video. flv&image=preview. jpg" />

<object type="application/x-shockwave-flash" data="player. swf" width="328" height="200">

<param name="movie" value="player. swf" />

<param name="allowfullscreen" value="true" />

<param name="allowscriptaccess" value="always" />

<param name="flashvars" value="file=video. flv&image=preview. jpg&plugins=viral-1'" />

<p><a href="http://get. /flashplayer">Get Flash</a> to see this player.</p>

</object>

</object>

Преимущества динамического метода публикации:

·  позволяет обойти механизмы активации активного контента в Internet Explorer 6/7 и Opera 9+;

·  интегрируется в JavaScript приложения.

Динамический метод публикации заменяет альтернативный HTML контент на Flash контент в случае, если есть достаточная поддержка JavaScript и Flash. При использовании динамического метода публикации нужно создать HTML контейнер с альтернативным контентом и задать для него id.

У данного метода пять обязательных и четыре опциональных параметра:

·  wfUrl (обязательный) URL SWF файла

·  id (обязательный)  id  HTML элемента (содержащего альтернативный контент) который должен быть заменен на Flash контент

·  width (обязательный) ширина SWF

·  height (обязательный) высота SWF

·  version (обязательный) версия Flash плеера необходимого для данного SWF (формат: "major. minor. release")

·  expressInstallSwfurl (опциональный) задает URL express install SWF и активирует Adobe express install

·  flashvars (опциональный) переменные передаваемые Flash в виде пар имя:значение

·  params (опциональный) элементы params вложенные в object в виде пар имя:значение

·  attributes (опциональный) атрибуты элемента object в виде пар имя:значение

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

<script type='text/JavaScript' src='swfobject. js'></script>

<div id='mediaspace'>This div will be replaced</div>

<script type="text/JavaScript">

var so = new SWFObject('http://www. /player. swf',

'mpl','400','320','9');

so. addParam('allowscriptaccess','always');

so. addParam('allownetworking','all');

so. addParam('allowfullscreen','true');

so. addParam('flashvars',

'&file=/upload/flash. flv&plugins=viral-1');

so. write('mediaspace');

</script>

<script type='text/JavaScript' src='swfobject. js'></script>

<div id='mediaspace'>This div will be replaced</div>

<script type="text/JavaScript">

var so = new SWFObject('http://www. /player. swf',

'mpl','400','320','9');

so. addParam('allowscriptaccess','always');

so. addParam('allownetworking','all');

so. addParam('allowfullscreen','true');

so. addVariable('file', '/upload/flash. flv');

so. addVariable('plugins', 'viral-1');

so. write('mediaspace');

</script>

Плагин и его конфигурационные переменные устанавливаются с помощью параметра flashvars или метода addVariable для значения plugins, при этом название конфигурационной переменой плагина имеет вид “имя_плагина. имя_переменной”.

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

3.2.3. Управление плеером на странице

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

Ниже показано, как можно инициализировать переменную связанную с плеером и использовать функцию обратного вызова c параметрами.

<script>

var player = document. getElementById('ID_of_the_player');

player. Callback_function(parametrs) ;

</script>

3.3. Модификация веб-плеера

Функционал плеера можно расширить с помощью плагинов. Плагин – это отдельный файл swf, который загружается в плеер в период его загрузки. Плагин взаимодействует с плеером через API плеера.

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

3.3.1. Плагин для интерактивного голосования Voting

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

Рис.11. Плагин Voting.

3.3.1.1. Включение и отключение

При установке плагина в меню появляется новая кнопка. Чтобы отключить или включить окно с голосованием, надо нажать на эту кнопку, при этом если окно не активно, то кнопка будет серого цвета, а если активно, то черного (рис.12).

Рис.12. Кнопка включения/выключения

3.3.1.2. Установка плагина

Чтобы установить плагин, надо прописать одну строку в код при установке плеера в HTML документе. В значении plugins надо прописать абсолютный или относительный путь до файла voting. swf.

Данных плагин имеет следующие конфигурационные переменные :

·  time (значение по умолчанию -5000) – задает интервал в миллисекундах, через который плагин делает запрос на сервер для обновления вопроса или результата голосования;

·  getvote – адрес внешнего файла, который передает информацию о голосовании;

·  setvote – адрес внешнего файла, который получает информацию о том, за какой вариант проголосовал пользователь.

3.3.1.3. Требования к внешнему файлу

Файл должен обмениваться с плагином информацией по протоколу HTTP методом POST.

Файл, передающий информацию, может принимать от плагина переменную showvotes, которая определяет, будет ли файл передавать вопрос с вариантами ответов (значение “false”), или информацию о результатах голосования (значение “true”). Отсылаемая плагину информация должна быть представлена в виде строки с переменными Flash и выгдядеть так:

·  id=номер вопроса&question=текст вопроса&var1=ответ1&var2=ответ2..&var6=ответ6

·  id=номер вопроса&vote1=число голосов за первый ответ..vote6= число голосов за шестой ответ

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

Назначение переменных получаемых плагином:

·  id – номер текущего голосования;

·  question – вопрос;

·  var1..var6 – пункты голосования;

·  vote1...vote6 – количество голосов, которые имеет соответствующий пункт.

3.3.2. Плагин для отображения медиаконтента Captions

Captions – плагин для отображения медиаконтента в окне плеера (рис.13). Плагин отображает 4 блока графического оформления – титры, логотип, информация о событии и о трансляции, подробнее об этом написано в главе 3.5.1.

Рис.13. Плагин Captions.

3.3.2.1. Включение и отключение

Если плагин установлен, то он включен по умолчанию, отключение происходит по клику на кнопку “CC”, появившейся в меню после установки. В этом случае кнопка будет серого цвета.

3.3.2.2. Установка плагина

Плагин функционирует только в связке с плагинами Live и Archive при прямом и эфире и в видеоархиве соответственно. Чтобы установить плагин, надо при установке плеера написать в значение plugins путь до файлов captions. swf, live. swf или archive. swf.

Конфигурационные переменные плагина приведены в таблице 2.

Таблица 2. Конфигурационные переменные Captions.

название

значение по умолчанию

описание

state

true (Boolean)

true – при запуске плагина оформление включено

false – при запуске плагина оформление отключено

screen4_3

false (Boolean)

true – в полноэкранном режиме, независимо от пропорции сторон монитора, пропорции окна с оформлением – 4:3,

false – окно с оформлением растягивается по всему экрану

auto

5000 (Number)

время отображения титров, выраженное в миллисекундах

3.3.2.3. Взаимодействие с плагинами Live и Archive

У плагина Captions есть публичные функции, приведенные в таблице 2. Используя эти функции, плагины посылают команды плагину Captions для отображения соответствующего медиаконтента.

Таблица 3. Публичные функции плагина Captions.

функция

параметры

описание

showTitle

text1:String, text2:String

отображение титров, параметры содержат текст титров

showLogo

logoinfo:String

отображение логотипа, параметр задает поведение логотипа

showCast

castinfo:String, yearinfo:String

отображение информации о трансляции, параметры задают тип эфира и год архива

showEvent

placeinfo:String, eventinfo:String

отображение информации о событии, параметры задают место и описание события

Таблица 3. Публичные функции плагина Captions.

3.3.3. Плагин Live для загрузки информации о медиаконтенте

Плагин для загрузки информации о медиаконтенте в прямом эфире из внешнего файла и ее передачи плагину Captions.

Плагин периодически опрашивает внешний файл и не имеет графического отображения.

3.3.3.1. Установка плагина

Плагин устанавливается вместе с плагином Captions, при этом прописывается путь до файла live. swf, и имеет конфигурационные переменные, приведенные в таблице 4.

Таблица 4. Конфигурационные переменные Live.

название

значение по умолчанию

описание

time

4000

частота опроса внешнего файла, выраженная в миллисекундах

url

-

адрес внешнего файла

3.3.3.2. Требования к внешнему файлу

Передаваемая информация из файла должна быть представлена в виде строки с переменными Flash, как показано ниже.

datatype=идентификатор_блока&id=номер_строки_в_базе_данных&text1=верхние_титры&text2=нижние_титры&logo=отображение_логотипа&cast=тип_трансляции&year=год&place=место&event=событие

Значения переменных Flash должны быть такими, как в таблице 5 в главе 3.4.2. Переменная type играет роль идентификатора отображаемого блока – она сообщает плагину, что надо передать информацию о конкретном блоке. Переменная type может также иметь значение “all” , это означает что надо передать информацию о всех блоках, подробнее о взаимодействии с внешним файлом в главе 3.4.2.

Плагин должен обмениваться информацией с внешним файлом по протоколу http методом POST.

3.3.4. Плагин Archive для загрузки глав медиаконтента

Плагин для загрузки информации о медиаконтенте в видеоархиве из внешнего файла и ее передачи плагину Captions. Плагин имеет функцию обратного вызова updateXML(), доступную из JavaScript, которая обновляет информацию из внешнего файла. Плагин опрашивает внешний файл один раз при загрузке и при вызове данной функции из JavaScript. Плагин передает параметр внешнему файлу – id клипа, и получает ответ в виде XML.

3.3.4.1. Установка плагина

Плагин устанавливается вместе с плагином Captions, при этом прописывается путь до файла archive. swf, и имеет конфигурационную переменную “xml” в которой прописывается адрес внешнего файла. Плагин Archive в определенные моменты, в соответствии со временем начала и конца главы, посылает команду плагину Captions для отображения соответствующего блока медиаконтента.

3.3.4.2. Требования к внешнему файлу

Плагин должен обмениваться информацией с внешним файлом по протоколу http методом POST. Передаваемая информация из файла должна быть представлена в виде дерева XML, показанного ниже.

<archive>

<content>

<caption>

<begin>время начала главы(hh:mm:ss)</begin>

<end> время конца главы(hh:mm:ss)</end>

<text1>верхние титры</text1>

<text2>нижние титры</text2>

<logo>состояние логотипа</logo>

<cast>тип трансляции</cast>

<year>год, если архив</year>

<place>место проведение события</place>

<event>heat</event>

</caption>

<caption>

.

.

.

</caption>

</archive>

</content>

3.4. Интеграция средств графического оформления эфира в среду Symfony

Проекты Symfony имеют модульную структуру, у каждого модуля есть своя таблица в базе данных, он имеет так называемые действия – сценарии выполняющие вычисления, и сценарии которые отображают результаты вычислений на странице сайта. На одной странице может быть несколько компонентов разных модулей. Интеграция в среду Symfony представляет из себя создания такого модуля и размещение модифицированного веб-плеера на определенных страницах. [14]

3.4.1 Установка веб-плеера на страницу

Веб плеер можно устанавливать на страницу с помощью тэга <EMBED> либо с помощью JavasScript библиотеки SWFObject статическим или динамическим методом. Подробнее об это написано в главе 3.2. В данной работе использовались оба метода.

3.4.2. Модуль для оформления прямого эфира

Для интернет-канала miem. tv был написан модуль с помомщью Symfony Framework, который управляет медиаконтентом в прямом эфире. Схема взаимодействия показана на рисунке 14. Информация из форм страницы manager отправляется в действие caption/set, который помещает эту информацию в базу данных в таблицу Сaption. Помимо информации из полей в сценарий также добавляются параметр с id плеера (player_id), и параметр блока графического оформления (type), к которому адресованы передаваемые данные. Структура таблицы Caption показана в таблице 5.

Таблица 5. Струтура таблицы caption в базе данных.

атрибут

значение

пояснение

id

натуральные числа

Первичный ключ, заполняется автоматически

player_id

натуральные числа

Номер плеера

text1

текст

Верхние титры

text2

текст

Нижние титры

created_at

дата

Заполняется автоматически

type

title

logo

cast

event

Титры

Логотип

Эфир

События

logo

yes

no

fullscreen

включение

выключение

включение только в полноэкранном режиме

cast

live

archive

no

прямой эфир

архив

выключение

year

текст

год

place

текст

место проведения трансляции

event

текст

информация о событии

На странице manager (рис. 14) используется сценарий showrecent. php, который вызывается Ajax-запросом и берет из базы последние титры, и размещает на странице, начиная с самого позднего. Если кликнуть по какому-то из титров, то они с помощью действия caption/set занесутся в новую строку таблицы Сaption и отобразятся в окне плеера.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3