VAST4.2でつくる動画広告の世界 その3(Linearタグ)

前回は主にクリエイティブそのもののメタデータ的要素を紹介しました。

https://qiita.com/miyay/items/71a108fab78a5e1ffd97

今回も前回に引き続き、細かいクリエイティブとプレイヤーの制御を見ていきます。

# TL;DR

* Linearタグ
    * MediaFilesタグ
        * 動画ファイルに関する情報
    * VideoClicksタグ
        * クリック時の挙動に関する情報
    * TrackingEventsタグ
        * 再生開始やスキップなどのイベント情報

# Linear タグ

```xml
<Linear skipoffset="00:00:05">
  <Duration>00:00:15</Duration>
  <MediaFiles>
    <MediaFile id="1" delivery="progressive" bitrate="2000" width="1280" height="720" type="video/mp4">
      <![CDATA[https://iab-publicfiles.s3.amazonaws.com/vast/VAST-4.0-Short-Intro.mp4]]>
    </MediaFile>
  </MediaFiles>
</Linear>
```

- `<Linear>`
    - リニア広告を示すタグ
    - `skipoffset`
        - 動画/音声をスキップすることができるようになる最小秒数。例の場合は5秒経過後スキップを押下することができる
    - `<Duration>`
        - 動画/音声の再生時間
            - HH:MM:SS(.mmm)形式
            - ミリ秒の切り上げ切り下げがあるので、.mmmまで指定した方がいいと個人的に思っている
        - 必須
    - `<MediaFiles>`
        - 動画/音声の素材ファイル
            - 複数指定できるが、再生されるのは1つだけ
            - 基本的にはサイズやビットレート(品質)が異なるものを複数設定し、再生環境(PC or スマホ等)で最適なものをPlayerで使用する
                - High、Medium、Lowの3種類を含めるべきとされています
            - どういう基準で設定するべきかは次回以降で解説し、今回は純粋にフォーマットを説明します

## MediaFiles タグ

- `<MediaFile>`
    - メディアファイルへのURI
    - 1つ以上必須
    - `delivery`
        - プログレッシブダウンロードの場合、`progressive` 。ストリーミングの場合 `streaming`
        - 必須
    - `type`
        - MIME Type (e.g. video/mp4, audio/mpeg)
        - 必須
    - `width`
        - 動画の素材の幅(px)
            - 音声の場合は 0
        - 必須
    - `height`
        - 動画の素材の高さ(px)
            - 音声の場合は 0
        - 必須
    - `codec`
        - RFC4281で定義されたコーデック
    - `id`
        - メディアファイルのID
    - `bitrate` `minBitrate` `maxBitrate`
        - プログレッシブの場合は平均ビットレート、ストリーミングの場合は最小/最大ビットレートを指定
    - `fileSize`
        - ファイルサイズ。byte
    - `scalable`
        - メディアファイルのサイズをスケールしてもいいか？
    - `maintainAspectRatio`
        - スケールした際にアスペクト比を維持するかどうか
    - `mediaType`
        - メディアファイルの種類（2D / 3D / 360 / etc）
        - デフォルトは 2D

InteractiveCreativeFile、ClosedCaptionFileは使いみちが思いつかないので省略。

## VideoClicks タグ

動画をクリックした時の遷移先

```xml
<VideoClicks>
  <ClickThrough><![CDATA[http://example.com/click]]></ClickThrough>
</VideoClicks>
```

- `<VideoClicks>`
    - InLineでもWrapperでも使用可能
    - `<ClickThrough>`
        - 広告をクリックした際に遷移するアドバタイザーサイトのURI
        - InLineでVideoClicksを利用する場合は必ず1つ必要
    - `<ClickTracking>`
        - アドテクベンダーがクリックを追跡するためのビーコンのURI
        - オプション
    - `<CustomClick>`
        - ユーザーがクリックした場合に通常のクリックスルーのような画面遷移を行わない挙動をさせる場合に、クリックを追跡するためのビーコンのURI？
            - インタラクティブな広告を作る場合に使うっぽいが詳細は不明
        - オプション

## TrackingEvents タグ

ImpトラッキングやClickトラッキングは既に触れましたが、ここではそれ以外の主に動画や音声に特化したトラッキングを扱います。

```xml
<Linear>
	<TrackingEvents>
	  <Tracking event="start">
	    <![CDATA[http://server1.com/start.jpg]]>
	  </Tracking>
	  <Tracking event="start">
	    <![CDATA[http://server2.com/start2.jpg]]>
	  </Tracking>
	  <Tracking event="progress" offset="3">
	    <![CDATA[http://server1.com/progress.jpg]]>
	  </Tracking>
	  <Tracking event="complete">
	    <![CDATA[http://server1.com/complete.jpg]]>
	  </Tracking>
	</TrackingEvents>
</Linear>
```

以下のeventが使えるとされてますが、実際に動作するかは各種プレイヤーで実験した方がよさそうです。

Linear / NonLinear / Companion 等でそれぞれ使えるイベントが異なります。NonLinearは非推奨なので、ここでは扱いません。

| 利用できる要素 | event | 内容 |
| --- | --- | --- |
| Linear | mute | ミュートした場合 |
|  | unmute | ミュート解除した場 |
|  | pause | 一時停止した場合 |
|  | resume | 停止、もしくは一時停止後再開した場合 |
|  | rewind | 巻き戻しを行った場合 |
|  | skip | スキップした場合 |
|  | playerExpand | プレイヤーを大きくした場合 |
|  | playerCollapse | プレイヤーを小さくした場合 |
|  | notUsed | プリフェッチ等でクリエイティブが採用されたが、実際には配信されない場合 |
|  | loaded | クリエイティブがロードされ、メディアが再生する準備ができた状態 |
|  | start | 0%視聴(視聴を開始)した状態 |
|  | firstQuartile | 25%視聴した状態 |
|  | midpoint | 50%視聴した状態 |
|  | thirdQuartile | 75%視聴した状態 |
|  | complate | 100%視聴(完全視聴)した状態 |
|  | otherAdInteraction | カスタムクリックなど、ユーザーインタラクティブなイベントを計測するための指標 |
|  | progress | offsetでHH:MM:SS(.mmm)もしくは%で指定した再生時間が経過した状態 |
|  | closeLinear | リニア広告を閉じた状態 |
| Companion | creativeView | コンパニオンが閲覧されたタイミング |
| Interactive | interactiveStart | インタラクティブなクリエイティブのスタートを計測するためのもの。SIMID等によりいつ発火させるかを定義できる。 |

# あとがき

今回までの3回で各クリエイティブフォーマットの共通部分を触れました。
次回からは Icon や Companion などの、特定ユースケースでしか利用しない部分に触れていきます。