Реализация функции «Multi Bitrate» в flash видео плеере

Динамическое смена качества видео потока

В данной статье детально рассматривается разработка видео флэш плеера с возможностями использования функции «Multi Bitrate».

В основе, представленного здесь, видео флэш плеера лежит компонент от компании Adobe – FLVPlayback 2.5, а также классы: DynamicStream, DynamicStreamItem.

Функция «Multi Bitrate» позволяет осуществлять динамическое переключение между потоками с разным качеством.

Создаем новый объект vid, который является экземпляром класса FLVPlayback, а также контейнер для него — объект container типа UIComponent. Помещаем в контейнер объект vid с помощью метода addChild.

\\Создаем новый экземпляр класса FLVPlayback
var vid = new FLVPlayback();
\\Создаем новый экземпляр класса UIComponent
var container:UIComponent = new UIComponent();
container.addChild(vid);

Создаем новый объект dsi, являющийся экземпляром класса DynamicStreamItem.

\\Создаем новый экземпляр класса DynamicStreamItem
var dsi:DynamicStreamItem = new DynamicStreamItem();

Для передачи информации о адресе FMIS сервера и приложения используем свойство uri (Uniform Resource Identifier) объекта dsi , присваиваем строковое значение адреса FMIS – сервера, а также серверного приложения – «rtmp://адрес сервера/приложение/»

dsi.uri = "rtmp://адрес сервера/приложение/";

Добавляем объекту dsi поток вещания в разных вариантах качества используя метод addStream, в аргументах которому передаем название потока и его качество в Кб/сек («dsi.addStream(«название потока», качество потока);»).

\\Добавляем потоки вещания в разном качестве
dsi.addStream("livestream200", 200);
\\....
\\....
\\....
dsi.addStream("livestream1000", 1000);

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

private function switchQuality (param:String):void
{
switch (param)
{
case "UP":
DynamicStream(vid.getVideoPlayer (vid.activeVideoPlayerIndex)
.netStream).switchUp();
break;
case "DOWN":
DynamicStream(vid.getVideoPlayer(vid.activeVideoPlayerIndex)
.netStream).switchDown();
break;
}
}

В пространстве Application создаем два объекта типа Button и в событиях MouseEvent.CLICK ссылаемся на функцию switchQuality в аргументах которой передаем строковый параметр «UP» или «DOWN» в зависимости от назначения объекта.

<mx:Button label="+" click=" switchQuality (&quot;UP&quot;);" />
<mx:Button label="-" click=" switchQuality (&quot;DOWN&quot;);" />

Управление воспроизведением потока осуществляет функция startPlay. В этой функции у объекта vid вызывается метод play2 и в качестве параметра передается ссылка на объект dsi. После вызова этой функции объект vid производит подключение к FMS и запрашивает поток, указанный в объекте dsi, начинается воспроизведение потока. Для обеспечения возможности переключения качества потока в «ручном» режиме, требуется передать методу manualSwitchMode объекта netStream параметр true.

private function startPlay ():void
{
vid.play2(dsi);
DynamicStream(vid.getVideoPlayer(vid.activeVideoPlayerIndex)
.netStream).manualSwitchMode(true);
}

Для реализации функции управления воспроизведением потока добавляем в пространство Application объект типа Button в событие MouseEvent.CLICK ссылаемся на функцию startPlay.

<mx:Button label="Старт" click=" startPlay();" />