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

このトピックでは、FreeWheel プラグインを使用して Brightcove Player に広告配信機能を追加する方法と、その実装方法について説明します。

概要

このプラグインは、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 モジュールでのサポートは近日公開予定です。

JSON エディタを使用して実装

Players モジュールで、設定したいプレーヤーに移動し、JSON エディタのリンクをクリックします。 "plugins" 配列を編集して FreeWheel プラグインを追加します。

              
                "plugins": [
                {
                  "name": "freewheel",
                  "is_packaged": true,
                  "options": {
                    ...
                  }
                }
              ]
              
            

設定

以下の設定項目を使用して 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 このイベントはプレーヤー オブジェクト上で公開されており、広告リクエストを送信する前にトリガーされます。 通常、プレイリストのコンテキストで 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 properties console output

メソッド

videojs-contrib-ads は、以下のような便利なメソッドも提供しています:

メソッド 説明
inAdBreak() 広告が再生可能な ad mode の区間(startLinearAdMode ~ endLinearAdMode の間)で true を返します。
isContentResuming() 広告の後にコンテンツが再開されるタイミングで true を返します。
isInAdMode() プレーヤーが ad mode にある場合、true を返します。

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

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

setOptions(options)

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

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

パラメータ:

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

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('コンテナモードを使用しています');
            } else {
                console.log('コンテナレスモードを使用しています');
            }
          
          

戻り値:

boolean

getContext()

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

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

戻り値:

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

getCurrentAdSlot()

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

          
            const currentSlot = player.freewheel().getCurrentAdSlot();
            if (currentSlot) {
                console.log('現在の広告スロット:', currentSlot.customId);
            }
          
        

戻り値:

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

既知の問題

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

動画を動的に読み込み、同じプレーヤーを使い続ける場合、FreeWheel の設定値はプラグインが初期化された時点のまま保持されます。 設定を更新するには setOptions() を使用する必要があります。

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

広告または動画再生中にプレーヤーサイズを変更した場合、広告コンテンツは自動でサイズ変更されません。 プレーヤーのサイズ変更は、プレーヤーの dimension 機能を使用した場合のみ適用されます。

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

以下は例です:

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