1

我正在尝试为 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 秒跟踪一次的 OSMF 的 Google Analytics 插件,但是查看代码,尚不清楚它是如何跟踪当前时间的。

4

1 回答 1

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);
  }

AdvertisementPluginInfo.as有关详细信息,请参阅 OSMF 源文件 ( )中包含的广告插件。

于 2012-02-21T09:38:59.470 回答