我尝试使用带有Google IMA plugin的video.js
播放器运行一些测试代码
我使用了插件作者提供的一个简单示例: https://github.com/googleads/videojs-ima/tree/master/examples/simple
现在我尝试订阅一些广告播放器活动。
我尝试按以下方式订阅事件(原始示例代码中第48行的更改):
player.one(startEvent, function() {
player.ima.onAdStarted_ = function(){
console.log("Ad started");
}
player.ima.onAdPlayPauseClick_ = function(){
console.log("Ad clicked");
}
player.ima.onAdComplete_ = function(){
console.log("Ad completed");
}
player.ima.initializeAdDisplayContainer();
player.ima.requestAds();
player.play();
});
它正确捕获了事件,但是主要播放器坏了:在广告结束后,IMA控件没有被禁用(它们覆盖了主播放器的控件),我们无法控制视频。
我认为我意外地覆盖了一些IMA的活动而且它没有正常工作。
我还尝试添加类似的事件监听器:
player.one(startEvent, function() {
player.ima.initializeAdDisplayContainer();
player.ima.addEventListener("click",function(){
console.log("Ad clicked");
});
player.ima.addEventListener(google.ima.AdEvent.Type.STARTED,function(){
console.log("Ad started");
});
player.ima.addEventListener(google.ima.AdEvent.Type.ALL_ADS_COMPLETED, function(){
console.log("Ad completed");
});
player.ima.requestAds();
player.play();
});
但它没有用。
是否有正确的方式订阅IMA的活动,主要是为了"广告开始","广告点击"和"广告结束"事件?
答案 0 :(得分:4)
TLDR;
player.on("adsready", function(){
player.ima.addEventListener(google.ima.AdEvent.Type.CLICK, function(){
console.log(">>> ad clicked");
});
});
此解决方案未记录,您的代码无效,因为在添加事件侦听器时,尚未创建adsManager
。请查看googleads / videojs-ima存储库中的以下代码段。
// https://github.com/googleads/videojs-ima/blob/master/src/videojs.ima.js#L758-L769
player.ima.addEventListener = function(event, callback) {
if (adsManager) {
adsManager.addEventListener(event, callback);
}
};
为了能够在广告管理器上添加事件监听器,必须听取adsready
事件,因为它是在广告管理器创建结束时发出的,请查看以下代码段。
// https://github.com/googleads/videojs-ima/blob/master/src/videojs.ima.js#L219-L278
player.ima.onAdsManagerLoaded_ = function(adsManagerLoadedEvent) {
adsManager = adsManagerLoadedEvent.getAdsManager(
contentPlayheadTracker, adsRenderingSettings);
// other code
// ...
player.trigger('adsready');
};
因此,要收听Google ima广告事件,您必须在 adsready
事件发布后添加事件监听器,如下所示。
player.on("adsready", function(){
player.ima.addEventListener(google.ima.AdEvent.Type.CLICK, function(){
console.log(">>> ad clicked");
});
});
答案 1 :(得分:1)
好的,我设法解决了我的问题。
诀窍是重写位于videojs-ima.js
文件中的插件,并且可以访问adsManager
和adsLoader
个对象的所有必需事件。
即。 (第208行添加的代码):
adsManager.addEventListener(
google.ima.AdEvent.Type.STARTED,
function(){
console.log("Ad started");
});