インストリーム広告について

この記事は、[Supershipグループ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/supership)の5日目の記事になります。 

## インストリーム広告とは

Youtubeから始まり、ニコニコ動画、Abema、TVerなど巷には動画を起点としたサービスが増えてきました。
動画を視聴している時に広告が流れる事があると思います。
まさにそれです。
動画**ストリーム**内に広告が**IN**しているものがインストリーム広告と呼ばれているものです。

インがあるならアウトもあるのでは？
そう思った方、正解です。アウトストリーム広告というのも存在します。
動画ストリーム外での動画広告をさします。今回はスコープ外なので詳しい説明はまたの機会にいたします。

## インストリーム広告の種類

インストリーム広告でも配信されるタイミングによって名称が変わってきます。

- プレ(プリ)ロール広告　(preroll) 
    - 動画の開始前に流れる広告
- ミッドロール広告　(midroll) 
    - 動画の途中で流れる広告
- ポストロール広告 (postroll)
    - 動画が終わったあとに流れる広告

皆さんもいずれかのタイミングでよく広告を目にしていると思います。

## 配信について

さて、名称を理解したところでこの広告がどうやって配信されているかを説明したいと思います。
![vast.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14450/c725227c-0837-b4dd-b38d-2e7431caf9c5.png)

上記がざっくりとした配信フローなんですが

1. 動画再生プレイヤーがVAST情報（後述）の問合わせをする
2. 問合わせを受けた広告サーバーがVAST情報（後述）を返却
3. 動画再生プレーヤーがVAST情報を解釈して広告動画を問合わせる
4. 動画コンテンツサーバーが動画ファイルを返却

上記の流れを高速にやりとりし広告を配信しています。

## VASTについて

先ほど説明したフロー内で登場したVASTについて説明したいと思います。
VASTとはVideo Ad Serving Templateの略称で、
アメリカのWEB広告の業界団体である`IAB（Interactive Advertising Bureau）`が定義しているXML形式の動画広告の仕様です。
仕様策定はGoogleをはじめAdobe Systems、Yahoo!、ソニー、Brightcoveなど名だたる動画配信企業が携わっています。
ですので、VASTの仕様をおさえることがインストリーム広告理解への近道になります。
しかし、VASTにはバージョンが存在しこれまで4つのバージョンが出ています。
当たり前ですが、バージョンごとにできることが違っており、動画プレーヤーがどのバージョンに対応しているかが重要になってきます。
（バージョンによってパラメータが追加になったり、廃止や統合されたりします）

仕様書はIABのサイトにて公開されており、誰でも閲覧可能になっています。

- [Digital Video Ad Serving Template (VAST)](https://iabtechlab.com/standards/vast/)

この様な仕様があることにより様々な広告配信企業と動画配信企業との動画広告配信のやりとりがスムーズになっています。

では実際のXMLファイルを見てみましょう

```xml
<VAST version="3.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- VASTのバージョン今回のサンプルは３ -->
    <Ad id="20001">
        <InLine>
            <AdSystem version="4.0">iabtechlab</AdSystem>
            <AdTitle>iabtechlab video ad</AdTitle>
            <Pricing model="cpm" currency="USD">
                <![CDATA[ 25.00 ]]>
            </Pricing>
            <Error>http://example.com/error</Error>
            <Impression id="Impression-ID">http://example.com/track/impression</Impression>
            <Creatives>　<!-- クリエイティブ情報 -->
                <Creative id="5480" sequence="1">
                    <Linear>
                        <Duration>00:00:16</Duration>
                        <TrackingEvents>　<!-- トラッキング情報 -->
                            <Tracking event="start">http://example.com/tracking/start</Tracking>
                            <Tracking event="firstQuartile">http://example.com/tracking/firstQuartile</Tracking>
                            <Tracking event="midpoint">http://example.com/tracking/midpoint</Tracking>
                            <Tracking event="thirdQuartile">http://example.com/tracking/thirdQuartile</Tracking>
                            <Tracking event="complete">http://example.com/tracking/complete</Tracking>
                            <Tracking event="progress" offset="00:00:10">http://example.com/tracking/progress-10</Tracking>
                        </TrackingEvents>
                        <VideoClicks>　<!-- 動画クリック時の遷移URL -->
                            <ClickThrough id="blog">
                                <![CDATA[https://iabtechlab.com]]>
                            </ClickThrough>
                        </VideoClicks>
                        <MediaFiles>　<!-- 広告動画メディアファイルURL -->
                            <MediaFile id="5241" delivery="progressive" type="video/mp4" bitrate="500" width="400" height="300" minBitrate="360" maxBitrate="1080" scalable="1" maintainAspectRatio="1" codec="0" apiFramework="VAST">
                                <![CDATA[https://iab-publicfiles.s3.amazonaws.com/vast/VAST-4.0-Short-Intro.mp4]]>
                            </MediaFile>
                        </MediaFiles>
                    </Linear>
                </Creative>
            </Creatives>
            <Extensions>
                <Extension type="iab-Count">
                    <total_available>
                        <![CDATA[ 2 ]]>
                    </total_available>
                </Extension>
            </Extensions>
        </InLine>
    </Ad>
</VAST>
```

主要なところにコメントは入れましたが軽く説明しますと、

### `<Impression>`

こちらは「広告が表示されたよ」と広告サーバに教えるためのURLが記載されています。

### `<Creatives>`

こちらが実際にながれる動画広告の情報が記載されています

####  > `TrackingEvents`

こちらは、動画の視聴タイミングによって発生させるためのものです。
`event`の値がタイミングを表しています。`start`は広告視聴開始時等

#### > `MediaFiles`

こちらは広告動画メディアファイルURLが設定されています。

[参考 VAST_Samples](https://github.com/InteractiveAdvertisingBureau/VAST_Samples)

## おわり

いかがだったでしょうか、動画広告がどのような流れで配信されているかがざっくり理解できましたでしょうか？
今回紹介したVASTパラメーター以外にも様々なものがあるので興味ある方は仕様を眺めてみてください。
（VASTの中からVASTと呼ぶ等）

## 最後に宣伝
Supershipではプロダクト開発やサービス開発に関わる人を絶賛募集しております。
ご興味がある方は以下リンクよりご確認ください。
 [Supership株式会社 採用サイト](https://supership-hd.jp/recruit/)
是非ともよろしくお願いします。