Прослушивание текущего времени с помощью плагина прокси OSMF - PullRequest
1 голос
/ 21 февраля 2012

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

В методе set для прокси-элемента у меня есть следующее:

proxiedElement.addEventListener(MediaElementEvent.TRAIT_ADD, _onTraitAdd);

Затем в методе _onTraitAdd я присоединяю прослушиватели событий для событий DURATION_CHANGE и CURRENT_TIME_CHANGE.

    private function _onTraitAdd(event:MediaElementEvent ):void {
        trace("adding trait");
        trace(event.traitType);

        if (MediaTraitType.TIME == event.traitType) 
        {
            //Get the time trait, so we can handle the duration changed event
            var timeTrait:TimeTrait = proxiedElement.getTrait( MediaTraitType.TIME ) as TimeTrait;
            timeTrait.addEventListener( TimeEvent.DURATION_CHANGE, _onDurationChanged );
            timeTrait.addEventListener( TimeEvent.CURRENT_TIME_CHANGE, _onTimeChanged );
            //debug( "Media has a timeline" );

        }

    }

Первое событие, DURATION_CHANGE, запускается в начале видео, однако второе событие никогда не запускается.

К какому элементу я должен прикрепить событие CURRENT_TIME_CHANGE, чтобы отслеживать текущее время видео?

Я проанализировал плагин Google Analytics для OSMF , который утверждает, что отслеживает каждые 5,10 или 20 секунд, однако , глядя на код , неясно, как ему удается отслеживать текущее время.

1 Ответ

2 голосов
/ 21 февраля 2012

Решением было добавить прослушиватель событий изменения времени на медиаплеере.

Сначала необходимо передать ссылку на медиаплеер на ресурс.

В основной класс для плагина добавьте следующее после определения pluginResource.

pluginResource.addMetadataValue("MediaPlayer", mediaPlayer);

Затем в классе, который расширяет PluginInfo, переопределите метод initializePlugin. Возьмите ссылку MediaPlayer и добавьте прослушиватель событий.

*/ 
override public function initializePlugin(resource:MediaResourceBase):void
{
var mediaPlayer:MediaPlayer = resource.getMetadataValue("MediaPlayer") as MediaPlayer;
mediaPlayer.addEventListener(TimeEvent.CURRENT_TIME_CHANGE, _onTimeChanged);

 }

 private function _onTimeChanged(event:TimeEvent):void {

     trace("event.time", event.time);
  }

Для получения дополнительной информации см. Плагин рекламы, включенный в исходные файлы OSMF (AdvertisementPluginInfo.as).

...