2

video.jsGoogle IMAプラグインを備えたプレーヤーを使用してテストコードを実行しようとしています

プラグインの作成者が提供する簡単な例を使用しました: 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 のイベント、主に「広告開始」、「広告クリック」、「広告終了」イベントをサブスクライブする適切な方法はありますか?

4

2 に答える 2

6

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");
  });
});
于 2016-07-29T08:02:51.313 に答える
1

OK、問題を解決できました。

秘訣は、videojs-ima.jsファイルにあるプラグインを書き直すことであり、そこからadsManagerおよびadsLoaderオブジェクトの必要なすべてのイベントにアクセスできます。

つまり (208 行目に追加されたコード):

adsManager.addEventListener(
    google.ima.AdEvent.Type.STARTED,
    function(){
         console.log("Ad started");
    });
于 2016-05-11T09:34:14.407 に答える