FreeWheel プラグインによる広告配信

このトピックでは、FreeWheel プラグインを使用して動画再生に広告を組み込む方法と、その実装方法について説明します。

概要

このプラグインは、Brightcove Player で FreeWheel の広告テクノロジーを利用できるようにします。

広告サーバーのテスト

最初に行うべきことは、使用予定の広告タグが有効かどうかを確認することです。広告タグの URL をコピーしたうえで、次のページにアクセスしてください: Ad Previewer(リンクをクリックすると新しいウィンドウまたはタブで開きます)。

広告タグの URL を指定された入力欄に貼り付けます。OPEN IN AD PREVIEWER をクリックします。Open In Ad Previewer というタイトルのポップアップが表示されるので、OPEN ボタンをクリックして広告をテストします。PLAY をクリックし、正しく動作していれば、広告が動画とともに表示されます。このテスト環境で広告タグが動作しない場合、Brightcove Player でも動作しません。

デフォルトの AdManager SDK は v7.2.0 です。これは TCF v2 フレームワークを実装した同意管理プラットフォーム (CMP) を、プラグインの追加設定なしでサポートします。TCF v1 を実装した CMP は今後サポートされません。詳細は Freewheel の ドキュメント (Freewheel Hub へのログインが必要) を参照してください。

手順

  1. プレーヤーを埋め込んでいるページに、CMP スクリプトへのリンクを追加します。

    <script src="//your_cmp_address.net/cmp/cmp.complete.bundle.js" async></script>
  2. Freewheel SDK のバージョンが 7.2.0 以上であることを確認してください。これは sdkUrl オプションを使用しない場合のデフォルト バージョンです。sdkUrl または sdkVersion でバージョンを設定する場合は、必ず 7.2.0 以上を指定してください。

Players モジュールを使用して実装

Players モジュールを使用して FreeWheel プラグインを実装するには、次の手順を行います。

  1. PLAYERS モジュールを開き、新しいプレーヤーを作成するか、プラグインを追加したい既存のプレーヤーを選択します。
  2. プレーヤーのリンクを選択して、プレーヤーのプロパティを開きます。
  3. Overview タブで Plugins セクションを展開します。
  4. 次に、Add Plugin ボタンを選択し、Brightcove Plugin を選択します。

    Add Plugin button
    Add Plugin ボタン
  5. Brightcove Plugin ドロップダウンを展開し、Freewheel を選択します。

  6. Options(JSON) テキスト ボックスに構成オプションを入力します。デフォルト値が用意されていますが、用途に合わせて変更できます。すべてのオプションの一覧については、設定 を参照してください。

    freewheel options
    Freewheel オプション
  7. Save をクリックします。
  8. プレーヤーを公開するには、Publish Changes をクリックします。
  9. 開いたダイアログを閉じるには、Close をクリックします。
{% include plugin-json.html %}

設定

FreeWheel プラグインを構成するために、以下の設定項目を使用します。

オプション タイプ デフォルト 説明
networkId number 必須 FreeWheel ネットワーク ID
profile string 必須 FreeWheel プロファイル名
serverUrl string 必須 FreeWheel 広告サーバーの URL
debug boolean false デバッグ ログを有効にします
requestAdsMode string "onload" "onload" はプレーヤー読み込み時、"onplay" は最初の動画再生時にそれぞれ広告をリクエストします。"oncue" は読み込み時に広告をリクエストし、各 VideoCloud キューポイントで広告を挿入します。
timeout number 5000 広告処理の一般的なタイムアウト (ミリ秒)
prerollTimeout number 1000 プリロール広告のタイムアウト (ミリ秒)
pauseOnAdClickthrough boolean true ユーザーがクリックスルーした際に広告を一時停止します
temporalSlots array [] テンポラル スロット構成の配列
useMediaCuePoints boolean false VideoCloud のキューポイントを使用します (requestAdsMode: "oncue" が必要)
keyValues array [] 広告ターゲティング用のキー / バリューのペア
autoPlayType string "attended" 自動再生の挙動: "attended"、"unattended"、"none"
sdkUrl string FreeWheel CDN カスタム FreeWheel SDK の URL
sdkVersion string "7.2.0" FreeWheel SDK のバージョン。sdkUrl が指定されている場合は無視されます。
fwLogLevel string "quiet" SDK のログ レベル: "quiet"、"info"、"debug"
adContainer boolean 自動検出 コンテナ モード (true) またはコンテナレス モード (false) を強制します
capabilities array 自動検出 プレーヤーの機能リスト
compatibleDimensions array 自動検出 許容される動画の寸法
subsessionToken number - サブセッション管理用のトークン

広告スロットの設定

テンポラル スロット

テンポラル スロットは、動画再生中のいつ・どこに広告を再生するかを定義します。temporalSlots 配列を使用して構成します。


      {
          "temporalSlots": [
              {
                  "customId": "preroll",
                  "adUnit": "preroll",
                  "timeposition": 0
              }
          ]
      }

テンポラル スロットのプロパティ

プロパティ タイプ 必須 説明
customId string Yes スロットの一意の識別子
adUnit string Yes FreeWheel の広告ユニット名
timeposition number Yes 広告を再生するタイミング (開始からの秒数)
maxDuration number No 広告スロットの最大再生時間
acceptedDuration array No 許容される広告の再生時間の配列

広告マクロ

FreeWheel を構成する作業を簡素化するために、広告マクロが用意されています。広告マクロは、構成内のどこに記述されていても、対応する値に置き換えられます。

以下は、置換される値が用意されている変数の完全な一覧です。

マクロ 説明
{player.id} プレーヤー ID
{mediainfo.id} 動画 ID
{mediainfo.name} 動画タイトル
{mediainfo.description} 短い説明 (最大 250 文字)
{mediainfo.tags} 動画に関連付けられたタグ (メタデータ)
{mediainfo.reference_id} 参照 ID
{mediainfo.duration} Video Cloud によって報告された動画の再生時間
{mediainfo.ad_keys} Studio の Media モジュールで追加・編集できる自由形式のテキスト文字列。次の形式でクエリ パラメーターとして使用します。
cust_params={mediainfo.ad_keys}
{player.duration} プレーヤーが計測した動画の再生時間 (mediainfo.duration とわずかに異なる場合があり、より正確である可能性があります)
{document.referrer} 参照元ページの URL
{window.location.href} 現在のページの URL
{player.url} プレーヤーの URL
{timestamp} 1970/1/1 からの現在のローカル時刻 (ミリ秒)
{random} 0 から 1 兆の範囲の乱数

構成例

"plugins": [{
  "name": "freewheel",
  "is_packaged": true,
  "options": {
      "keyValues": [{
        "feature": "simpleAds",
        "module": "DemoPlayer"
      }, {
        "feature": "trackingURLs"
      }],
      "networkId": 99999,
      "profile": "global-js",
      "serverUrl": "https://cue.v.fwmrm.net/ad/h/5",
      "siteSectionCustomId": "your value here",
      "temporalSlots": [{
        "adUnit": "preroll",
        "customId": "Preroll_1",
        "timePosition": 0
      }, {
        "adUnit": "postroll",
        "customId": "Postroll_1",
        "timePosition": 60
      }, {
        "adUnit": "overlay",
        "customIdd": "Overlay_1",
        "timePosition": 5
      }],
      "videoAssetCustomId": "your value here",
      "videoAssetDuration": 500
    },
    "debug": true,
    "prerollTimeout": 1000,
    "timeout": 5000
}]

イベント

このプラグインは、読み込み、初期化、再生中にいくつかのカスタム イベント タイプを発行します。広告フレームワークのイベントは、他のイベントと同じようにリッスンできます。

player.on('ads-ad-started', function(event) {
  console.log('event', event);
});
イベント 発生するタイミング
ads-request 広告データがリクエストされたとき。
ads-load 広告リクエストの後、広告データが利用可能になったとき。
ads-ad-started 広告の再生が開始されたとき。
ads-ad-ended 広告の再生が終了したとき。
ads-pause 広告が一時停止されたとき。
ads-play 一時停止していた広告が再開されたとき。
ads-first-quartile 広告が全体の 25% 再生されたとき。
ads-midpoint 広告が全体の 50% 再生されたとき。
ads-third-quartile 広告が全体の 75% 再生されたとき。
ads-click 視聴者が再生中の広告をクリックしたとき。
ads-skipped 視聴者がスキップ ボタンで広告をスキップしたとき。
ads-volumechange 再生中の広告の音量が変更されたとき。
ads-pod-started リニア広告ポッド (連続した広告のグループ) の最初の広告が開始されたとき。
ads-pod-ended リニア広告ポッド (連続した広告のグループ) の最後の広告が終了したとき。
ads-allpods-completed すべてのリニア広告の再生が完了したとき。
fw-before-ad-request このイベントは player オブジェクト上で公開されており、広告リクエストの送信前にトリガーされます。通常はプレイリストのコンテキストで、setOptions() を介して FreeWheel の構成設定を更新するために使用されます。

サーバー URL の動的な割り当て

fw-before-ad-request イベントを使用して、サーバー URL を動的に割り当てることができます。on() メソッドを使用して広告リクエストをリッスンし、その後、希望するサーバー URL を割り当てます。もちろん、コード内のプレースホルダーには実際のサーバー URL を設定する必要があります。

player.on('fw-before-ad-request', function () {
  player.setOptions({
    serverUrl: '[your server url]'
  })
})

サーバー URL を以前に構成していた場合、上記のコードはその構成を上書きします。

プレーヤー広告ライブラリ

videojs/videojs-contrib-ads GitHub リポジトリには、Brightcove Player と連携する動画広告ライブラリに必要な共通機能を提供するプラグインが含まれています。このプラグインは、動画広告の統合に必要な共通機能を提供し、広告統合担当者に代わって多くの懸念事項を処理するため、広告統合のために記述するコード量を削減できます。

プロパティ

videojs-contrib-ads には、便利に利用できるいくつかのプロパティが用意されています。これらは次のとおりです。

名前 データ型 説明
ads.ad.id String 再生される広告の一意の識別子
ads.ad.index Number 指定された時点で再生される広告のインデックス。広告ポッド内での広告の順序を表します
ads.ad.duration Number 広告の再生時間 (秒)
ads.ad.type String PREROLLMIDROLLPOSTROLL のいずれか
ads.ad.currentTime() Function 広告再生の現在時刻を返す関数

以下のコードはこれらのプロパティの使用例です。

myPlayer.on('ads-ad-started',function( evt ){
  console.log('*****ads-ad-started event passed to event handler', evt);
  console.log('myPlayer.ads.ad.id',myPlayer.ads.ad.id);
  console.log('myPlayer.ads.ad.index',myPlayer.ads.ad.index);
  console.log('myPlayer.ads.ad.duration',myPlayer.ads.ad.duration);
  console.log('myPlayer.ads.ad.type',myPlayer.ads.ad.type);
  setTimeout(function(){
    console.log('****myPlayer.ads.ad.currentTime()',myPlayer.ads.ad.currentTime());
  },500);
  setTimeout(function(){
    console.log('****myPlayer.ads.ad.currentTime()',myPlayer.ads.ad.currentTime());
  },1000);
});

上記コードによるコンソール出力は次のとおりです。

contrib-ads プロパティのコンソール出力

メソッド

videojs-contrib-ads には、便利に利用できるいくつかのメソッドが用意されています。これらは次のとおりです。

メソッド 説明
inAdBreak() このメソッドは、startLinearAdMode から endLinearAdMode の間 (広告統合が広告を再生できる区間) の間 true を返します。これは ad mode の一部です。
isContentResuming() 広告の後にコンテンツが再開されている場合に true を返します。これは ad mode の一部です。
isInAdMode() プレーヤーが ad mode にある場合に true を返します。

プラグインのパブリック メソッド

このプラグインは、プログラムによる制御のために以下のメソッドを公開しています。

setOptions(options)

実行時にプラグインの構成を更新します。オプションは適用前に検証されます。

    
      player.freewheel().setOptions({
        debug: true,
        fwLogLevel: 'debug'
      });
    
  

パラメーター:

  • options (object): 設定するオプション。詳細は 設定 を参照してください。

setSdkLogLevel(level)

プラグインの debug 設定とは独立して、FreeWheel SDK のログ レベルを変更します。

    
      // "debug" に設定
      player.freewheel().setSdkLogLevel('debug');

      // "quiet" に設定
      player.freewheel().setSdkLogLevel('quiet');
    
  

パラメーター:

  • level (string): 'quiet'、'info'、または 'debug'

hasAdContainer()

プラグインがコンテナ内に広告を表示するかどうかを確認します。

    
      const isContainerMode = player.freewheel().hasAdContainer();
      if (isContainerMode) {
          console.log('Using container mode');
      } else {
          console.log('Using containerless mode');
      }
    
    

戻り値:

boolean

getContext()

高度な利用のために、FreeWheel の context オブジェクトに直接アクセスします。

      
        const fwContext = player.freewheel().getContext();
        // FreeWheel SDK のメソッドを直接使用できます
      
    

戻り値:

FreeWheel context オブジェクト または null

getCurrentAdSlot()

現在再生中の広告スロットに関する情報を取得します。

    
      const currentSlot = player.freewheel().getCurrentAdSlot();
      if (currentSlot) {
          console.log('Current ad slot:', currentSlot.customId);
      }
    
  

戻り値:

Freewheel 広告スロット オブジェクト または null

既知の問題

FreeWheel で同じプレーヤーを動的に再利用する場合

動画を動的に読み込み、同じプレーヤーを再利用する場合、setOptions() を使って設定を更新しない限り、FreeWheel の構成設定は FreeWheel プラグインがインスタンス化された時点の値のままになります。

広告再生中のプレーヤー サイズ変更

広告または動画の再生中にプレーヤーがリサイズされた場合、プレーヤーの dimensions 関数を呼び出してリサイズしない限り、広告コンテンツはリサイズされません。それ以外の方法 (例: style の width および height) でプレーヤーをリサイズしても、広告はリサイズされません。

player.dimensions(width,height) を使用してプレーヤーをリサイズする際には、寸法が変更されたことをプラグインに知らせるために、fw-resizeplayer イベントをトリガーする必要があります。これは、一部の VPAID 広告が広告のデフォルト寸法を保持し、プレーヤーのリサイズ時に自動的にリサイズされないためです。

例を以下に示します。

player.dimensions(960,540);
player.trigger('fw-resizeplayer');

変更履歴

重要な変更点は Brightcove Player リリース ノート に掲載されます。