概要
このプラグインは、Brightcove Player 内で FreeWheel の広告テクノロジーを利用できるようにします。
広告サーバーのテスト
まず最初に行うべきことは、使用予定の広告タグが有効かどうかを確認することです。広告タグの URL をコピーし、次のページにアクセスします:Ad Previewer(リンクをクリックすると新しいウィンドウ/タブで開きます)。
広告タグ URL を指定された入力欄に貼り付けます。OPEN IN AD PREVIEWER をクリックすると、Open In Ad Previewer というタイトルのポップアップが表示されるので、OPEN をクリックして広告をテストします。PLAY をクリックし、正しく動作していれば広告が動画とともに表示されます。このテスト環境で広告タグが動作しない場合、Brightcove Player でも動作しません。
同意管理/GDPR 対応
デフォルトの AdManager SDK は v7.2.0 で、TCF v2 フレームワークを実装した同意管理プラットフォーム(CMP)を追加設定なしでサポートします。TCF v1 を実装した CMP はサポート対象外です。詳細は Freewheel の ドキュメント(Freewheel Hub へのログインが必要)を参照してください。
手順
-
プレーヤーを埋め込んでいるページに CMP スクリプトへのリンクを追加します。
例
<script src="//your_cmp_address.net/cmp/cmp.complete.bundle.js" async></script> -
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 モジュールで追加・編集できる自由形式のテキスト文字列
クエリパラメータは次の形式で使用します:
|
| {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 | PREROLL、MIDROLL、POSTROLL のいずれか |
| 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);
});
上記コードの実行結果は次のようにコンソールに表示されます:

メソッド
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');