こんにちは、SaaS事業部の森本です。 普段は再生プレイヤーの開発を行なっています。
この記事ではプレイヤーを再生するときに挿入される広告に関しての基礎知識と、広告挿入ライブラリであるIMA SDKの挿入制御についての調査結果を書いていきます。
広告挿入の基礎
プレイヤーを再生しているときに動画本編の最初や途中に動画広告が再生されることがあると思います。 あの動画広告の挿入の仕組みについて以下に記載していきます。
動画広告の挿入の仕組み
挿入の仕組みは大きく2つあって、サーバー側主体で制御するSSAI (Server-Side Ad Insertion)、クライアント側主体で制御するCSAI (Client-Side Ad Insertion) があります。
本記事はCSAIについての内容になります。
クライアント主体の場合、再生プレイヤーはアドネットワークからVMAP (Video Multiple Ad Playlist) またはVAST (Video Ad Serving Template) を取得します。
VMAPとは、IAB (Interactive Advertising Bureau) で定義された広告を挿入する位置が記載されているXMLファイルです。
例えば、VMAPには動画再生前に広告を出せとか、10秒地点で出せといった指示が記載されています。
挿入位置の種類
VMAPに記載される位置の種類によって以下のような名前がついています。
- プリロール:本編動画の再生前に挿入する広告
- ミッドロール:本編動画の再生途中に挿入する広告
- ポストロール:本編動画の再生完了後に挿入する広告
各位置の広告は複数設定可能であり、例えばプリロールを2つ設定したり、ミッドロールを1分地点に2つと3分地点に1つ出すなどの設定が可能です。
広告挿入制御
前述のように広告挿入地点が自由に設定できるのですが、ミッドロールが特に制御で悩む場面が多いです。 例えば以下のようなケースでどう振る舞うかは、公式での仕様が明記されておらず検討が必要です。
【a】シーク跨ぎ問題
尺が10秒のコンテンツに2秒、5秒、8秒の地点にミッドロールが挿入されている状況を考えます。
以下のようなシーク操作をした場合にどう振る舞うべきでしょうか。
■ 操作手順
① 1秒地点まで再生継続する。
② 1秒地点を再生しているときに9秒地点にシークする。
■ 検討する点
- 全てのミッドロールを挿入するか、1つだけ挿入するか?
- 1つだけ挿入する場合にミッドロールA、B、Cのどれを挿入するか?
【b】シークバック問題
問題【a】と同じコンテンツで以下のようなシークバック操作をした場合にどう振る舞うべきでしょうか。
■ 操作手順
① 4秒地点まで再生継続する(2秒地点でミッドロールAを挿入する)。
② 4秒地点を再生しているときに1秒地点にシークバックする。
■ 検討する点
- シークバック時にもう一度2秒のミッドロールを挿入するか?
【c】シーク跨ぎとシークバックの複合問題1
問題【a】と【b】を混ぜた以下のような操作をした場合にどう振る舞うべきでしょうか。
ここでは一旦問題【a】はシーク先に近い広告を1つだけ挿入、問題【b】はミッドロールを挿入しない場合の振る舞いで記載しています。
■ 操作手順
① 0秒地点を再生しているときに6秒地点にシークする(シーク直後にミッドロールBを挿入する)。
② 6秒地点を再生しているときに1秒地点にシークバックする。
③ 終端まで再生継続する。
■ 検討する点
- 操作手順③ではどのミッドロールを挿入するか?
- シーク跨ぎによって再生しなかったミッドロールAを挿入する?
- シーク跨ぎで既に再生したミッドロールBを挿入するか?
- シークで跨いでおらず、まだ再生していないミッドロールCを挿入するか?
- シーク跨ぎによって再生しなかったミッドロールAを挿入する?
【d】シーク跨ぎとシークバックの複合問題2
最後に、問題【c】を少し変更した以下のような操作をした場合にどう振る舞うべきでしょうか。
■ 操作手順
① 0秒地点を再生しているときに6秒地点にシークする(シーク直後にミッドロールBを挿入する)。
② 6秒地点を再生しているときに1秒地点にシークバックする。
③ 1秒地点を再生しているときに7秒地点にシークする。
■ 検討する点
- 操作手順③ではどのミッドロールを挿入するか?
IMA SDKの制御
IMA (Interactive Media Ads) SDKはGoogleが提供している再生プレイヤー用の広告挿入ライブラリです。
VMAP(またはVAST)の取得および広告の挿入制御、再生やトラッキングの送信など一通りのことを実施します。
以下では、IMA SDKにVMAPを指定してキュー管理をIMA SDKに行わせた場合の挿入制御についての調査結果を書いていきます*1(これは公式に記載があるわけではなく自分達で調査した結果のため、必ずしも正確ではない可能性があります)。
挿入制御に関して、大きな特徴として以下の2つのルールで動作していました。
- 一度再生した広告は挿入しない
- 広告の挿入範囲が固定されて決まっており、その範囲を本編が再生したときに挿入する
- 開始位置:自身の挿入位置
- 終了位置:次のミッドロールの挿入位置(なければ本編終端)
- 開始位置:自身の挿入位置
今回のコンテンツの場合は、ミッドロールA、B、Cの挿入範囲は以下のようになります。
問題【a】については、シークした先がミッドロールCの範囲なので、操作手順②で挿入される広告はミッドロールCのみです。
問題【b】は、操作手順②ではミッドロールAが再生済みの広告なので挿入されないです。
問題【c】は、再生していない広告に到達した場合、その広告を挿入します。 そのため操作手順③を実施したときは、ミッドロールAとミッドロールCを挿入します。
問題【d】は少し複雑です。問題【d】の時の範囲と操作をまとめた図が以下です。
操作手順③でミッドロールBの範囲の位置にシークをしていますが、ミッドロールBは操作手順①で再生済みのため広告の挿入はされず本編が再生されます。
まとめ
この記事では、VMAP、VASTの基礎とIMA SDKでの挿入制御の調査結果を書きました。
広告は邪魔なものと思われていた方も、今後はこのような振る舞いについて楽しんでいただけたら幸いです。
*1:逆に言えば、VMAPの取得をIMA SDK経由ではなくプレイヤーが直接行うよう実装すれば、広告の挿入タイミングを自由に制御することも可能になります。