概要
このプラグインは、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 モジュールを使用して FreeWheel プラグインを実装するには、次の手順を行います。
- PLAYERS モジュールを開き、新しいプレーヤーを作成するか、プラグインを追加したい既存のプレーヤーを選択します。
- プレーヤーのリンクを選択して、プレーヤーのプロパティを開きます。
- Overview タブで Plugins セクションを展開します。
-
次に、Add Plugin ボタンを選択し、Brightcove Plugin を選択します。
Add Plugin ボタン -
Brightcove Plugin ドロップダウンを展開し、Freewheel を選択します。
-
Options(JSON) テキスト ボックスに構成オプションを入力します。デフォルト値が用意されていますが、用途に合わせて変更できます。すべてのオプションの一覧については、設定 を参照してください。
Freewheel オプション - Save をクリックします。
- プレーヤーを公開するには、Publish Changes をクリックします。
- 開いたダイアログを閉じるには、Close をクリックします。
設定
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 | このイベントは 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 | 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() | このメソッドは、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 リリース ノート に掲載されます。