使用OSMF代理插件监听当前时间更改

时间:2012-02-21 08:08:36

标签: plugins osmf

我正在尝试为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事件,以便跟踪视频的当前时间?

我已经分析了声称每隔5,10或20秒跟踪一次的Google Analytics plugin for OSMF looking at the code,但目前尚不清楚它是如何设法跟踪当前时间的。

1 个答案:

答案 0 :(得分:2)

解决方案是在媒体播放器上添加时间更改事件侦听器。

首先,需要将媒体播放器的引用传递给资源。

在插件的主类中,在定义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)中包含的广告插件。