Tap Titansの動画広告を調べてみた
海外ゲームで動画リワードってどうのような実装されているのか興味はあったけど、きちんと調べたことがなかったので、世界中で1300万人が遊ぶと言われるTap Titansの動画広告を調べてみた。
調べる目的で何気なく始めたんだけど、結構ハマって1週間はタップしまくった。右手・左手合わせて八本の指をスマホの画面で連打しまくる様は、他者からみたら奇怪な行動にみえただろうな。
温泉行って、食事食べてる時もカタカタずっとタップしてるし。。
こんなにスマホ画面を連続タップしたことないほど叩きまくった。
Tap Titans(世界中1300万人突破のタップRPG) - Google Play の Android アプリ
以下はアイテムを使って一定時間、影分身が代わりに連続斬りしてくれているところ。
ゲーム中に不定期で妖精が飛んでくるので、タップするとアイテムやダイヤ、ゴールドをくれる。
まれに、妖精からのボーナスとして大量のゴールドが貰えるチャンスが。
ギフトを集めるボタンを押下すると、動画が再生される。
今回は、UnityAdsが選択された。
大量のゴールドがゲットできるので、アイテムや仲間を増やしてよりゲームを楽しめる。
通信内容
検証端末:Android、SO-02H(6.0)
接続:WIFI
起動したら真っ先にTapjoyとAppsFlyerが呼ばれる。
4秒後にchartboost、UnityAdsが呼ばれ、6秒後にAppLovinが呼ばれる。
SSPは使っていないようだ。自社メディエーションかもしれない。
AppLovinの動画ファイルは2M以下で軽い。
UnityAdsは動画ファイルは容量が軽かった印象があるのだが、今回は3M。
Tapjoyの動画ファイル読み込みが見当たらないので、フリクエンシーキャップにかかった可能性がある。
まとめ
初期化で読みこむ動画ファイルの数が少ないと思った。動画ファイルの読み込み数ってお願いすればコントロールできるのだろうか?
初期化でアドネットワークを呼び出す時間をずらしている意図は感じる。何度かアプリ起動時の挙動をみてみたが、やはりTapjoyを最優先で呼び出している。
AdColonyが入ってないのはなぜだろう?
グローバルで大ヒットしているゲームにSSPが入ってないのは、自社メディエーションツールを使っているからだろうか?
単純にゲームとしてハマる。面白かった。
HTTP Live Streaming(HLS)形式の動画をAWS(Amazon Elastic Transcoder、S3、CloudFront)で配信
Apple仕様のHTTP Live Streaming(HLS)をアダプティブ配信する環境をAWS(Amazon Elastic Transcoder→S3→CloudFront)で構築して、配信最適化できるか試してみた。
※Akamaiでの配信方法は以下
動画配信技術 その1 - HTTP Live Streaming(HLS) - Akamai Japan Blog
動画配信技術 その3 - Universal Streaming(HDS/HLS) - Akamai Japan Blog
HTTP Live Streamingとは、容量の大きい動画ファイルを10秒ごとに分割して、読み込みながらでも再生できる。特別なストリーミングサーバを必要とせず、通常のWEBサーバで配信ができるのも利点。iOS、Androidともに対応端末が幅広い。
Apple公式の資料
「特別なサーバソフトを使用しないオーディオとビデオの送信」
https://developer.apple.com/jp/documentation/StreamingMediaGuide.pdf
アダプティブ配信とは?
回線品質によって、読みこむファイルを切り替えながら再生する。
3G→LTE→WIFIのように通信環境が変化すると、それに応じた動画再生に切り替えられる。
S3に元動画を入れる用と、出力用の2つのバケットを準備する。
元となるMP4動画を-inの方にアップロードする。
素材はNHKのクリエイティブ・ライブラリーを引用。
わかりやすく
・高画質(飛行機)
着陸する飛行機(6)ズームイン:素材をさがす:NHKクリエイティブ・ライブラリー
・中画質(新幹線)
東北新幹線「はやぶさ」:素材をさがす:NHKクリエイティブ・ライブラリー
・低画質(船)
ベネチア 運河(1):素材をさがす:NHKクリエイティブ・ライブラリー
としてみた。
Amazon Elastic TranscoderでMP4ファイルを
ts分割したファイルとプレイリスト(m3u8)をS3へ保存する。
Elastic Transcoderを選択
Create New Pipelineから、以下のように入力する。
今度は左のメニューでJobsを選択肢、Create New Jobを押下。
Create New Jobから高画質の場合はhighというフォルダに出力されるよう登録。
右下のCreate New Jobを押下すると、以下のようにS3の-out/high/〜に出力される。
これをmidとlowの分繰り返す。
それぞれのプレイリストの中身は以下。
10秒指定したのに、きっちり10秒で分割されるわけではない。
high.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:13
#EXTINF:12.078733,
high00000.ts
#EXTINF:9.009000,
high00001.ts
#EXTINF:9.009000,
high00002.ts
#EXTINF:1.768433,
high00003.ts
#EXT-X-ENDLIST
mid.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:13
#EXTINF:12.012000,
mid00000.ts
#EXTINF:9.009000,
mid00001.ts
#EXTINF:9.009000,
mid00002.ts
#EXTINF:12.012000,
mid00003.ts
#EXTINF:9.009000,
mid00004.ts
#EXTINF:9.009000,
mid00005.ts
#EXTINF:12.012000,
mid00006.ts
#EXTINF:9.009000,
mid00007.ts
#EXTINF:8.942267,
mid00008.ts
#EXT-X-ENDLIST
low.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:13
#EXTINF:12.058444,
low00000.ts
#EXTINF:8.241567,
low00001.ts
#EXT-X-ENDLIST
通信回線の状態により、これらを切り替える為にindex.m3u8を自分で作成してoutバケット直下にアップロード。
index.m3u8
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=400000
https://d1h36s1zyfuae3.cloudfront.net/low/low.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=600000
https://d1h36s1zyfuae3.cloudfront.net/mid/mid.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=2000000
https://d1h36s1zyfuae3.cloudfront.net/high/high.m3u8
CloudFrontで配信するための設定。
Originも設定する。
バケットに直接アクセスされたくなく、常にCloudFrontからの配信になるよう制限したかったら、Restrict Bucket AccessをYesにする。
一通り設定完了したら、しばらく時間がかかる場合もあるが、CloudFrontでアクセスできるようになる。
URLは以下
https://d1h36s1zyfuae3.cloudfront.net/index.m3u8
AndroidのChromeで開くと、ファイルをダウンロードしてしまう。
※HTMLのvideoタグでリンクすると、Androidでも再生可能。
iPhoneのsafariで開くと、動画が読み込まれ再生準備になる。
再生ボタンを押下すると、標準のプレーヤーが立ち上がり、再生が開始する。
再生途中から、電車の動画に切り替わる。
index.m3u8がリクエストされて、low.m3u8の指示でtsファイルが読み込まれ、回線品質によって、mid.m3u8に切り替わって、midのtsファイルが読み込まれ始める。
iPhone端末の設定 > デベロッパ > NETWORK LINK CONDITIONER
から、回線品質を変更してテストすることができる。
回線が良ければ、飛行機が配信される。
まとめ
Appleの仕様なので、safariでリピート再生した場合、動画を読み込み直さないでキャッシュを上手く利用してくれるのだが、Androidのchromeだとリピートなのにtsファイルを読み込み直すので無駄がある。
↓リピート再生するたびに、low00000.ts、low00001.tsをダウンロードしてしまう。(表示は降順)
ブラウザの挙動なのでアプリで実装する場合は、上手くキャッシュを再利用すればいいが、ブラウザベースのHTML5配信でリピート再生すると、端末依存かもしれないがパケ死配慮されない残念な作りになっている。
Elastic Transcoderの設定が雑なのか、MP4ファイルを元にtsに細かく出力した場合に、元ファイルよりもファイルサイズが大きくなってしまうという本末転倒なことになってしまった。この辺をチューニングする必要があるのだろう。
S3のinputバケットにMP4の動画をアップしたら、Elastic Transcoderでhigh, mid, lowに書き出されるなど自動化することもできるようだ。
AWS便利すぎてやばい。配信コストはどうなのか?要調査。
LINEポイントの動画リワード
iPhone・Androidの端末からMacbook Airにネットワークが繋がらなくなってしまい、通信内容調べる環境がこわれ、半日ハマってしまった。本当にちょっとした端末の設定だったり、ネットで問題を絞り込むためにひたすら調べるのに時間かかり過ぎて四苦八苦。通信内容みれないと不安で眠れなくなる。(嘘です)
LINEってメッセのやりとり(コミュニケーションツール)としてしか使っていなく、スタンプを購入したことすらない。LINEポイントというものがあり、ゲームをインストールすると、ある程度のポイントが貰えるリワードがあると教えてもらった。
以下のアプリをインストールすると、70ポイントもらえる。
動画リワード
「ビデオ」というコーナーがあり、動画を完全視聴すると1ポイントもらえるメニューがある。ほとんどブランド広告。
ワイモバイルを選択。動画を観ていないので、「詳しくはこちら」がグレーになっていて、LPに飛べない。
スクロールすると、細かい説明が書いてある。視聴完了すれば1ポイントもらえる。※別に何回観てもいいけど、1人1ポイント以上はもらえない。
視聴してみると、フルスクリーン横画面で動画が流れる。
画面をタップする毎に一時停止/再生を繰り返す、初めて観るパターン。
Androidのバックボタンが無効にされていないので、バックボタンで前画面に戻れる。
視聴完了すると、勝手にプレーヤーが閉じられて、代わりにダイアログが表示される。
この時点でポイントが付与されて、「詳しくはこちら」から、LPへ遷移してもよい。
インセンティブであるポイントを付与する通信はこの時点で完了している。
※動画再生完了時(30秒後)に再度、動画ファイルをダウンロードしている。
LPは以下のようにブラウザで閲覧する。
LINEポイントのトップページに戻ると、ポイントが+1増えている。
まとめ
ブランド広告なので広告主から高画質を求められ、再生時間も30秒だしファイル容量5〜6Mなんだろ?と、思いきや驚きの1M前後という少なさ。
動画によっては1M以下もある。30秒では驚きの圧縮率。
LINEのブランド広告動画は、圧縮しすぎて画質は荒いが、少量パケットでユーザーがパケ死しにくい配慮がされていて好感がもてる。
動画再生中の何パーセント再生されたとかのログを通知することはしていない。
ログは再生開始と視聴完了のみ。
ただし、WIFIでも低画質動画が流れてきたのはどういう判定基準なのか少し気になるけど。
あと動画視聴完了後に全く同じ動画ファイルを、謎にもう一度リクエストしているのは何なのだろうか。
動画リワードのエンドカードについて
動画リワードで動画再生が完了すると、エンドカードと呼ばれるHTMLベースで作られたページが表示される。
エンドカードから、ストアに遷移してアプリをインストールするか、もしくは閉じるボタンでエンドカードを閉じて、インセンティブ(アイテムや仮想通貨のポイントなど)を貰う。
そのエンドカードがアドネットワークによって特徴があって面白かったのでピックアップ。
Vungle
Vungleは先日のFacebookで発表があったように、2011年に動画制作の会社からスタートしているとのこと。
6月から動画やエンドカードを集中して観る機会があって、クリエイティブにこだわっているのは強く感じていたし、以前Vungleの東京オフィスにおじゃました時に、日本人クリエイターが作る質の高い動画に驚かされた。
昔はサッカー関係の仕事で、取材しながら動画編集もやったりしてたんだけど、動画って作るのにすごく時間かかるし大変なんだよね。1箇所でも修正すると、全て書き出し直さないといけなくて、やたら時間かかる。。
動画広告なので動画の質にこだわれば、当然にコンバージョンも高くなるのはわかっているけど、製作コストも静止画に比べると1〜2桁違ってしまう。
で、エンドカードの静止画像があるのですが、ここにも手を抜かずにきっちりとデザインを綺麗に作りきるあたり、デザイナーとしての強いこだわりを感じて好感がもてる。
他アドネットワークとの差別化にもなるので、今後もクリエイティブにこだわることを期待。
maio
エンドカードがシンプルな時代しか知らなかったので、いつ変わったのか気が付かなかったけど、スワイプして画像が複数枚みれるようになってた。
最後までスワイプすると動画のリプレイも加わっている。
動画の質にこだわるのはもちろんなんだけど、このようなHTMLベースのレイアウトも手を抜かずに作りこむことで、コンバージョンにどう違いがあるのか、A/Bテスト実績あれば結果を知りたい。
秋川渓谷でボルダリング 2016-05-28
今月3回連続となる神戸(かのと)へボルダリング。
I氏と6時半に駅で待ち合わせをして、車で向かう。
渋滞もなく、8時30分に十里木ボルダーに到着。
前日に振った雨の影響が心配されたが、全然問題なし。曇りで涼しくて、先週より登りやすい天候。
十里木ジャンプ、毒ガスなどリピートしつつ、前回できなかった深呼吸1級にトライ。
勢いで登れるだろうと思っていたけど、リップが止まらず。。
ヒールムーブでないとリップを止められないことがわかったので、結局10撃ほどで無事に登れました。
2時間ほど登って、神戸へ移動することに。
途中のちとせ屋さんで豆乳とドーナツを食べる。
揚げたてドーナツがうまかった。
そして初心者お断りの神戸園に到着。
オロチ5段を見学する。写真だとわからないけど虫が多くて、とても不快な状況。
電池切れ、スチャダラ、フルチャージのある岩。
課題が難しすぎるので、神戸園の釣り堀で前回釣れなかったヤマメを釣りにいく。
警戒心が強いから、置き竿しとけばいいとのことだったので、10分おきぐらいに餌をチェックしながら1時間以上待ったけど釣れず。
とりあえず、I氏の為にニジマスを速攻つりあげて、焼いてもらう。
ニジマス食べながら、神戸園の親父さんから先週よりはヤマメの数が多いので、釣りやすいはず。ニジマスみたいにガブっと餌を喰わないので、早めの当たりで竿を引くといいとの情報をゲットしたので、どうしても釣りたい。食べた後に、何度も投げ入れる作戦に変えたら、餌だけもっていかれるようになった。
そして遂にヤマメが連れました。
ライスもサービスで頂いてしまいつつ満足な味でした。
その後、早めに閉まってしまうかもしれない「ちとせ屋」さんへ、ざる豆腐を買いにいって、折角なので天然記念物の神戸岩を見に行ってみた。
パワースポットみたいですね。探検気分で楽しかったです。
車で寝て、最後に秋川渓谷国際マス釣り場の近くの天王岩へ行って、7時過ぎまで撃って終了。アプローチが近いのもあって、真っ暗になるまで登って終了。
帰りの海老名サービスエリアで、つけ麺大盛りを食べて帰宅。
秋川渓谷で外岩ボルダリング
2015年の夏にディープウォーターソロとして訪れたことがある秋川渓谷。
本格的なボルダリングエリアもあるということで、初めてとなる神戸(かのと)へ行ってみました。W氏とY氏と6時半に駅で待ち合わせて車で向かう。
メインは3つのボルダリングエリアに分かれていて、十里木、天王岩、神戸。
アクセスは十里木が1番近いが、瀬音の湯の温泉に近いことから最後に寄ることにして、まずは天王岩へ。秋川国際マス釣場を通りすぎて、すこし離れた駐車場へ。
駐車場に停めてから、アプローチ数分の天王岩に到着。Y氏とI氏の最初の狙いウラヌス初段でアップ。被りが苦手な自分だけテンションあがらず、隣のリード、トップロープを見に行く。トップロープがすごく楽しそうに見えた。外岩リードは危ないけど、トップロープならやってもいいかも。
戻ってきて、ウラヌスの手応えを聞きつつ、他のクライマーがトラバース課題をやるとのことで俄然やる気になる。核心が2箇所あって、手の痛みに耐えられず早々に終了。
マントル部分だけ登って、達成感だけ味わってアップ終了。
本日のメインディッシュ神戸へ向かう。思ったよりも離れていた。
神戸園キャンプ場に到着する。
じゃがいもアイスを食べつつ。
マスやアヤメなどの釣りができる所を見学。昼飯は釣った魚を焼いて食べようかなんて話しつつ。(結局釣らなかった。。)
そして、ここもアプローチ数分の素晴らしいロケーション。
オロチ5段の岩は、虫が多くて不快なのと、クライマーも多かったので見学のみ。
1級以上しかないという初心者お断りのエリア。
電池切れ、フルチャージのある岩へ。
ジムにルーフ課題がないので、全くできない。。力不足を感じる。
車で仮眠をとったりしても、どうしても被った壁を登るモチベーションがわかない。
4時頃に十里木ボルダーへ移動。
移動途中の豆腐屋さんで豆腐アイスクリームを食す。
十里木ボルダーへ向かうが、迷いまくる。
途中で亀を発見して、Y氏が生け捕りにして喜んでいた。
十里木ボルダーに到着。すでに5時過ぎだったかも。
達成感を得たかったので、十里木ジャンプ、毒ガスなどを登る。
高さもほどよく、トップアウトすると気持ちいい。
垂壁なのでやる気が復活。
最後に深呼吸を撃つが日も暮れてきたので7時で時間切れ。
瀬音の湯で無料の足湯に浸かって、八王子の温野菜で腹いっぱい食べて帰宅。
御岳で外岩ボルダリング 2016-05-06
実家に帰省した際に笠間に行けなかったうっぷんを晴らすべく御岳へ。
I氏といつもどおり6時半に駅で待ち合わせて車で向かう。GW中だが平日なので渋滞もなく8時半に到着。天気は曇りで涼しくクライミングするにはちょうどいい。
忍者返しの岩に一番近い駐車場は空いてなかったので荷物を下ろしてから、駅前のセブン-イレブン隣の駐車場へ。
駅前にはちらほらクライマーの姿も見える。
橋の上からピンチオーバーハングの岩をチェック。
今日こそ子供返しを落とすべく強い決意で忍者返しに到着。
最初は人が少なめだったが、亀返しと忍クラやっている人がいたのでマットは充実している。
入念にストレッチをして準備をするうちに、どんどん増える人。
いつもはアップしないでいきなり登るのだが、絶対に落としたいという過度な緊張感もなく淡々と準備を進める。
前回まで進んでいた3手目までは、やはり難なく進めたが、初めてとなる4手目右手だしをすると壁から剥がれてしまう。勢いをつけてとろうがどうしても届かない。
I氏から左足だけで踏み込んでいるのではなく、右足もちゃんと踏んだら?という的確なアドバイスで4登目で、4手目が止まった。
そこからは、ヒールが思ったよりもかからなかったけど、左手を上部にとりにいって、想定していたよりも悪かったのでいいところないか探ったのだが、どうもしっくりこない。でもここで落ちたくなかったので、勢いで右手をだしてリップ取りした。
リップさえ取れれば、足ブラになろうが大丈夫なので、マントル返して無事に完登できた。
完登後にガバホールドが欠けたマミ岩を偵察。
色が変わっているところががっつり取れていた。
全体重かけて両手マッチ、スラブパートの足場として使われていたので、欠けるのは不可抗力。
トラバース初段を試しにやってみると、左手を寄せるところが難しくなった。以前はガバだったので、左手寄せたときに、右手でがっちり支えられたんだけど、支えきれなくなった。
I氏とも話したがグレードは初段のままだと思う。ガバがあった時は優し目の初段で、ガバが欠けたことで普通の初段になったと。
忍者返しに戻って、I氏が前回落とした亀返しにトライ。
スタートはできるけど、初手が止まらない。
予定があったので、12時にあがらなければならず、ピンチオーバーハングに移動。
ファットブロッカー、ファットアタッカーを撃つも時間切れ。
ソフトクリーム岩周辺もクライマーで賑わっていた。
2時間しか登らなかったけど、子供返しが落とせたので満足。