【问题标题】:videojs player + google IMA ads - how to subscribe for an eventvideojs 播放器 + 谷歌 IMA 广告 - 如何订阅活动
【发布时间】:2016-05-08 15:11:18
【问题描述】:

我正在尝试使用video.js 播放器和谷歌IMA plugin 运行一些测试代码

我使用了插件作者提供的一个简单示例: 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 的事件,主要是“广告开始”、“广告点击”和“广告结束”事件?

【问题讨论】:

    标签: javascript video.js google-ima


    【解决方案1】:

    TLDR;

    player.on("adsready", function(){
      player.ima.addEventListener(google.ima.AdEvent.Type.CLICK, function(){
        console.log(">>> ad clicked");
      });
    });
    

    此解决方案未记录在案,您的代码不起作用,因为当您添加事件侦听器时,adsManager 尚未创建。看看 googleads/videojs-ima 存储库中的以下 sn-p。

    // 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事件,因为它是在广告管理器创建结束时发出的,请看下面的sn-p。

    // 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 ad 事件,您必须在 adsready 事件发出后添加事件监听器,如下所示。

    player.on("adsready", function(){
      player.ima.addEventListener(google.ima.AdEvent.Type.CLICK, function(){
        console.log(">>> ad clicked");
      });
    });
    

    【讨论】:

      【解决方案2】:

      好的,我设法解决了我的问题。

      诀窍是重写位于videojs-ima.js 文件中的插件,在那里可以访问adsManageradsLoader 对象的所有需要​​的事件。

      即(在第 208 行添加代码):

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多