videojs player + google IMA广告 - 如何订阅活动

时间:2016-05-08 15:11:18

标签: javascript video.js google-ima

我尝试使用带有Google IMA pluginvideo.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的活动,主要是为了"广告开始","广告点击"和"广告结束"事件?

2 个答案:

答案 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文件中的插件,并且可以访问adsManageradsLoader个对象的所有必需事件。

即。 (第208行添加的代码):

adsManager.addEventListener(
    google.ima.AdEvent.Type.STARTED,
    function(){
         console.log("Ad started");
    });