解説、VMAP!

     - アドテクノロジー , ,  


どうも動画といえば僕です。Rhiannonです。

前回前々回と動画ファイル自体についての記事を書きましたが、今回はVMAPについて解説しようと思います。

VMAPって聞いた事あるけど仕様書が英語だし読むの大変だと思っていた方の理解の一助になれば幸いです。


 

VMAPとはなんぞや?

VMAPとはVideo Multiple Ad Playlistの略で、IABが規定したXMLフォーマットです。

どんなことができる仕組みなのかざっくり言うと、

コンテンツホルダーが「動画のこの位置にこの広告入れるぞ!」と決められる仕組み

です。

動画ホルダーがプレイヤーをコントロールできるとは限りません。
(シンジケーションしていたり、いろんなプレイヤーに配信していて設定が大変だったり・・・)

そうなると、コンテンツホルダーからすると、意図しない位置に広告が設定されてしまうといった可能性があります。
そういったことがないようにコンテンツホルダーが広告配信についてもコントロールできるようにした仕組みがVMAPというわけです。

例えばテレビ番組配信の場合、VMAPに対応しているプレイヤーであれば地上波のCMと同じタイミングで広告を差し込めるよう、TV局側がアドサーバーで設定することができるようになります。

どんな時に使うのか?

動画コンテンツに広告を設定する際には以下の2つの作業が必要になります。

  • 広告の構成を決定
  • 配信する広告の決定

前者を担うのがVMAPで、広告を挿入するAd Break(広告が配信されるポイント)の数・位置・各Ad Breakに挿入される広告数などを規定します。

後者についてはVASTが担っていますが、VASTについての説明は他の記事をご参照ください。
【動画広告】VASTって何?

VMAPはあくまで、コンテンツに含まれる広告在庫の構成を規定しているものであって、それ単体で広告配信できる仕組みというわけではありません。(まさにプレイリストですね)

VMAPは以下のような場合に利用が推奨されます。

  • アドサーバーがコンテンツの広告在庫を全てを持っている場合。
  • アドサーバーがコンテンツの広告在庫の構成(Ad Breakの数や位置、各Ad Breakでの広告数や、広告主や第三者への割り当て)をコントロール出来る場合。
  • アドサーバーがコンテンツの広告在庫の構成をコントロールできないが、在庫への広告配信の仕方(各Ad Breakでの広告数や、広告主や第三者への割り当て)を規定できる場合。

 

どんな仕様なのか?

VMAPは以下のような形式のXMLとなっています。

<vmap:VMAP xmlns:vmap="http://www.iab.net/videosuite/vmap" version="1.0">
 <vmap:AdBreak>
 ....
 </vmap:AdBreak>
</vmap:VMAP>

 

<VMAP>にはバージョンを特定するための属性が含まれており、現在バージョンは1.0となっています。

以下より<VMAP>の中身について解説します。

<AdBreak>

AdBreak

Ad Breakの例(YouTubeより)

Ad Breakとは画像の例のように広告を挿入するポイントに相当するものです。

<VMAP>は0個以上の<AdBreak>という子要素を含んでおり、各<AdBreak>には複数の広告を含むことができます。

<AdBreak>には以下のような属性が含まれています。

timeOffset

Ad Breakのタイミングに相当する属性。指定は必須。

以下の4つの方法で表現される。

指定方法 説明
time hh:mm:ssもしくはhh:mm:ss:mmmで表記する。値はコンテンツの先頭からの時間を示す。
percentage 0-100%で表記する。コンテンツ長が不明な場合に使用する。
start/end startではプリロール、endではポストロールを指定することができる。
position #1のように番号を表記する。ライブコンテンツなどに使用される。

breakType

広告がlinear・nonlinear・displayのいずれかであるかを特定する属性。指定は必須。

2つ以上のタイプを指定する場合は、コンマで区切る。(スペースは含めない)

breakId

Ad Breakを特定するための属性。オプションで指定可能。

repeatAfter

等間隔でAd Breakを配信するための属性。オプションで指定可能。

hh:mm:ssもしくはhh:mm:ss:mmmの形式で表記され、この値の時間が経過した際に、<AdBreak>を再生する。

 

 

また、<Ad Break>は以下の要素を持っています。

<AdSource>

Ad Breakで表示される広告を指定する。

インラインでレスポンスが記載されている(VMAP内に直接VASTレスポンスなどが記載されている)もしくは、他システムへの参照先が記載されている。

<TrackingEvents>

VMAP特有のイベントをトラッキングするためのURI

<Extensions>

VMAPでサポートされていない情報を送る事ができる。

 

<AdSource>

各 <AdBreak>は0 or1つの<AdSource>を持っており、次のような属性が含まれます。

id

<AdSource>の識別するための属性。オプションで指定可能。

allowMultipleAds

VASTのAd Podのような複数広告をAd Break中で配信することを許容するかをtrue/falseで指定する属性。オプションで指定可能。特に指定がなかった場合、プレイヤーは複数広告の配信を許容する。

非VASTのAd Podであった場合、プレイヤーは配信を無視することができる。

followRedirects

広告レスポンスでリダイレクトを許容するかをtrue/falseで指定する属性。オプションで指定可能。特に指定がない場合、プレイヤーは許容するかを選択することができる。

<vmap:VMAP xmlns:vmap="http://www.iab.net/videosuite/vmap" version="1.0">
 <vmap:AdBreak breakType="linear" timeOffset="start">
 <vmap:AdSource allowMultipleAds="true" followRedirects="true">
 ....
 </vmap:AdSource>
 <vmap:TrackingEvents>
 ....
 </vmap:TrackingEvents>
 </vmap:AdBreak>
</vmap:VMAP>

 

<AdSource>が存在する場合は、以下の要素によって広告のソースが指定されます。

<VASTAdData>

VMAPのレスポンス中にVAST広告のレスポンスが埋め込まれていることを示す。

VASTレスポンスはCDATAブロックを含まない形で含まれる。

<AdTagURI>

他システムの広告レスポンスを参照するURIを示す。

URIはCDATAブロックを含む必要がある。

<CustomAdData>

任意の文字列を非VAST広告レスポンスとして設定する。

文字列はCDATAブロックを含む必要がある。

 

プレイヤーがAdSourceへ設定されている広告レスポンスの形式を特定するため、<AdTagURI>と<CustomAdData>ではtemplateTypeが利用されます。

templateTypeでは

  • vast
  • vast1
  • vast2
  • vast3
  • その他(独自のテンプレート)

のいずれかを指定します。

<TrackingEvents>

<AdBreak>内には<TrackingEvents>があり、Ad Breakのstartとend及び、Ad Break内で発生したエラーのトラッキングに利用されます。

<TrackingEvents>にはVMAPで利用される次の3つのイベントのトラッキングURIが含まれています。

  • breakStart
  • breakEnd
  • error

トラッキングイベントは以下のように<Tracking>内のevent属性によって指定されます。

<vmap:TrackingEvents>
 <vmap:Tracking event="breakStart">
 <![CDATA[

http://adserver.com/breakstart.gif

 ]>
 </vmap:Tracking>
</vmap:TrackingEvents>

 

再生中に該当のイベントが発生した場合、プレイヤーは<Tracking>のトラッキングURIへリクエストを送る必要があります。

この際、複数の<Tracking>が同じイベントに含まれる場合は、全てのURIへとリクエストを送る必要があります。

また、Ad Breakにトラッキングイベントがあるのにもかかわらず、Ad Sourceが含まれていない場合、トラッキングイベントは有効のままとなり、該当のイベントが発生した際にリクエストを送ります。

XML構成まとめ

VMAPのXML構成は以下のようになります。

親要素 子要素 孫要素 属性 必要性 説明
AdBreak 必須 広告の挿入ポイント
timeOffset String 必須 AdBreakの再生タイミング
breakType String 必須 表示する広告のタイプ
breakId String オプション AdBreakのID
AdSource ない場合もある 配信する広告のソース
id オプション AdSourceのID
allowMultipleAds true/false オプション 複数広告を許容するかどうか
followRedirects true/false オプション リダイレクトを許容するかどうか
VASTAdData VAST3.0ドキュメント オプション VAST3.0広告のレスポンス。CDATAは含まずない
CustomAdData String オプション 非VAST3.0広告のレスポンス。CDATA内に記述
templateType 必須 vast1/vast2/任意からレスポンスの形式を記載
AdTagURI URI オプション 広告のURI
templateType 必須 vast1/vast2/任意からレスポンスの形式を記載
Tracking Events ない場合もある
Tracking URI オプション トラッキングURI
Event 必須 breakStart/breakEnd/errorが指定される
Extensions オプション
Extension オプション VMAPでサポートされていない情報
type String 必須 Extensionの形式。URIが推奨。
Extensions オプション
Extension オプション VMAPでサポートされていない情報
type String 必須 Extensionの形式。URIが推奨。

 

必須とされている項目が少ないため、アドサーバー側は最小のものを備えてVMAPの配信を始められます。一方VMAPを解釈するプレイヤーとしては、オプションへの対応や、含まれない場合のある要素への対応の必要がありますね。

 

 

エラー処理

エラーイベントはエラーが起きた時に必ず呼ぶもので、VMAPでは2つのカテゴリーに分けられます。

VMAP実行エラー

レスポンスペイロードの取得やセカンダリアドサーバーの呼び出しやVMAPのパースと言ったVMAPの実行中に起きたエラー

広告レスポンス実行エラー

個々の広告レスポンスが実行されている際に発生したエラー

 

どちらのタイプのエラーが発生しても、実行されている<AdBreak>に紐づくエラートラッキングイベントが呼ばれます。

プレイヤーでマクロが提供されているのであれば、プレイヤーは適切なエラーコードとエラーメッセージへと変換を行い、プレイヤーが独自で実装しているエラーメッセージや、特殊文字は適切に%エンコードされなくてはなりません。

VAST広告の広告レスポンス実行エラーについては、プレイヤーがVASTのものと同様のエラーコードをレポートし、非VAST広告の実行エラーの場合はプレイヤーが非VAST広告独自のエラーコードもしくは、900(Undifined error)をレポートします。

広告レスポンス実行エラーが発生した場合、プレイヤーはできるだけ多くのレスポンスを実行するべきです。

例えば、Ad Podの広告の1つで再生を妨げるようなエラーが発生した場合、プレイヤーはPod全体の広告表示を中止するよりも、次の広告へと進むよう試みるべきである。

以下はエラーコードの一覧表です。プレイヤーは以下より該当するものを選択します。

エラーコード 詳細
900 Undifined error
1000 VMAP schema error
1001 VMAP version of response not supported
1002 VMAP parsing error
1003 AdBlock type not supported
1004 General ad response dosument error
1005 Ad response template type not supported
1006 Ad response document extraction or parsing error
1007 Ad response document retrieval timeout
1008 Ad response document retrieval error(e.g., HTTP server responded with error code)

 

No Ad Breakのレスポンス

Ad BreakのないVMAPレスポンスは、ルートとなるVMAP要素のみをレスポンスに含みます。

<vmap:VMAP xmlns:vmap="http://www.iab.net/videosuite/vmap" version="1.0">
 ....
</vmap:VMAP>

 

Extensions

各<AdBreak>はオプションで<Extensions>を持つことができ、<Extensions>は任意のXMLデータをラップした<Extension>を持つことができます。

ただ、Extensionのサポートは必須ではないため、プレイヤーが解釈できない場合はExtensionについては無視されることもあります。

ソリューションの対応

アドサーバー

VMAP1.0の順守のため、アドサーバーとしては下記のようなことが必要となります。

  • VMAP1.0の形式を遵守する
  • VMAPのクロスオリジン対応(Access-Control-Allow-Originヘッダ対応など)

プレイヤー

VMAP1.0の順守のために、プレイヤーとしてはVMAPの仕様書で記載されていることに準拠し、合わせて次の例外と特記事項に対応する必要がある。

  • プレイヤーはVAST3.0に準拠している必要があるが、その他のレスポンス形式をサポートしている必要はない。
  • プレイヤーはVAST3.0のAd Podに準拠している必要がある。
  • プレイヤーはできる限り3種のVMAPのAd Break(リニア、ノンリニア、ディスプレイ)とそれに合わせたVAST3.0フォーマットへの準拠をサポートしなくてはならない。ただ、プレイヤーの技術的要因でノンリニア広告がサポートできないような場合、ノンリニアのAd BreakをサポートしていないままでもプレイヤーはVMAPに準拠していると考える。

 

まとめ

少し構成がごちゃっとしましたが、VMAPについて仕様書になるべく沿う形で解説しました。

広告のコントロールをコンテンツホルダー側でできるという点に加え、コンテンツに対してVMAPを1つ設定するだけで済むのでプレイヤーでの設定の手間も減るかと思います。

また、VMAPはAd Podにも対応しているためAd Breakの中で複数の広告を配信する段積み配信や競合と同一のAd Break内では配信させないと言った競合排除もアドサーバーで制御可能になり、より広告の制御を緻密に行うことができます。

TVerやGYAO!のような広告モデルの動画配信やChromecast, FireTVなどの普及により、今後VMAPの需要はさらに高まっていくのではないでしょうか。


DACエンジニア採用情報

  関連記事

IMG_4673
Ad Tech Conference~海外アドテク系カンファレンスに行ってきた②~

はい、テクノロジー戦略部の田畑です。 アドテク系イベントに行ってきた②ということで、前回書ききれなかったところを書きます。   ~前回のおさらい~ 1.11月にNYのアドテク系イベント3つに行ってみた。 2.Fraud、Viewability、Programatic Directがキーワー …

20140930220910
AudieneOneでアドブロック利用者を抽出する訪問者セグメントを作ろう

はじめに iOS 9のコンテンツブロッカーによって盛り上がったアドブロック論争。アドブロック自体はPCブラウザ用プラグインで昔からできていたことなのですが、さらに普及していくのかもしれません。 アドブロックの仕組みが普及するのはインターネット業界全体の損失につながりかねない話ではあるのですが、その一 …

no image
SafeFrameでリッチ広告をセキュアに実現

アドサーバ(広告配信サーバ)は、通常iframeで広告のクリエイティブを配信している。(JS配信とかに対応しているアドサーバもある) 通常のセキュリティだとiframeの中身(srcで実際に表示されている側)がiframeを操作する事はできない。つまりexpandなどのリッチ広告、特に表示領域を変更 …

Apple-Releases-Safari-10-Developer-Beta-3-for-OS-X-Yosemite-and-El-Capitan
Safari10(iOS10)のインライン動画再生についてまとめてみた

はじめに Safari10からvideoタグを用いたインライン動画再生ができるようになったので、挙動を調べてみました。 Safari 10.0 検証環境 項目 詳細 開発環境 Xcode8.0 検証端末 iPhone7 Simulator ブラウザ iOS Safari / UIWebView / …

20140922035644
アドテク問題(広告表示編)

アドテクエンジニア向けの問題を考えました。 お題は「広告表示」です。 以下お題に沿った「アドタグ」を作成し、広告を表示してみてください。 全部で9問あるので、興味のある人はやってみてください。 難易度は、ちょうどいいくらいです。 全部できた人は、採用担当までご連絡ください。 Q1.バナー広告を表示し …

hashed_potato
【DMP】IDのハッシュってなに

アドテクに関わる方であれば、よく耳にするであろう「ハッシュ」をシンプルに説明してみようと思います。 とはいえ「ハッシュ」は広いので、ここでは「IDのハッシュ」に焦点を当てます。 「ハッシュ/hash(動詞)」はそもそも「細切れにする」というような意味を持ちます。(名詞だと「細切れのもの」) ハッシュ …

new-york-city-828776_1280
ネイティブ広告と記事広告の違いってなに?!

こんにちは、プラットフォーム・ワンの新卒1年目Yukaです!! ここ数年よく耳にし、さまざまな媒体で目にするネイティブ広告。 しかし、今までの記事広告といったいなにが違うのー?!?!?! ということで調べてみました。 ネイティブ広告(Native Ads) デザイン、内容、フォーマットが、媒体社が編 …

プログラミング
ES5とES6でアドタグを作ってみた

はじめに アドテク問題(広告表示編)のQ7を元にネイティブ広告を表示するアドタグをES5とES6で作ってみました。 処理の流れ 大きな処理の流れは以下の通り 広告要素取得処理 サーバからタイトル/説明文/画像URLの取得を行う フォーマット処理 取得した要素を表示するページに最適化した形にフォーマッ …

cookie
【DMP】クッキー連携ってなに

  アドテクに関わる方であれば、必ず耳にするであろう「クッキー連携」をシンプルに説明してみようと思います。 クッキー連携は cookie sync(クッキーシンク、cookie synchronization の略)と呼ばれることも多いです。 Googleは cookie matching …

iab-vast-logo
「初めての動画広告~①VAST編~」

2015年新卒入社の池田です。 「TVで動画コンテンツをみる時代」から「ネットで動画コンテンツをみる」時代になった今日このごろです。 「私もいっちょまえに動画広告を扱ってみたい・・・!!」と生意気にも思うようになりまして。 しかし、つい2か月前までド文系大学生だった池田は果たして動画広告を扱えるよう …