我正在尝试为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,但目前尚不清楚它是如何设法跟踪当前时间的。
答案 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
)中包含的广告插件。