AWS Answers 提供の”Video on Demand on AWS”をやってみた

こんにちは！hagi@streampackです。

# はじめに

今回は以前より気になっていたAWS Answersにある”Video on Demand on AWS”をやってみました。
作成の詳細は[AWS Answersのページ(英語)](https://aws.amazon.com/jp/answers/media-entertainment/video-on-demand-on-aws/)をご参考ください。
こちらはあくまで私個人が利用した感想となります。

上記のページにはCloudFormationのテンプレートやドキュメントのリンクもあり、読む限り全てが準備されているようです。こちらで必要なのはAWS アカウントとコンテンツのみ。

# 環境

<img width="1346" alt="スクリーンショット 2018-03-14 15.40.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/79009a32-bb19-147c-7eb3-64c4dcf1474c.png">

CloudFormationのテンプレからは上記の環境が作成されるようです。
注意としては全てのサービスが提供されているリージョンで作成が必要なようです。
東京リージョンは全部揃っているので東京リージョンで作成。

# CloudFormation テンプレート

## 入手

"Video on Demand on AWS”の[ページ](https://aws.amazon.com/jp/answers/media-entertainment/video-on-demand-on-aws/)から"Deploy solution"をクリックすると簡単にデプロイできる[ページ](https://docs.aws.amazon.com/ja_jp/solutions/latest/video-on-demand/deployment.html)に飛ぶのですが、なんだか怖いのでテンプレートをダウンロードすることに。
**Launch Solutionのすぐ下からテンプレートをダウンロードすることができます。

## デプロイ

CloudFormationでテンプレを読み込み"次へ"を押下。すると下記の画面が表示される。

<img width="2730" alt="スクリーンショット 2018-03-14 16.01.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/e0eb9ddc-c9e4-1531-83e5-937aaaff0ff6.png">

とりあえずスタックの名前を決め、すぐ消す予定なのでGlacier送りをfalse、動画のフレームキャプチャーはみてみたいのでtrueにして"次へ"
後からわかったことですがadminのメールアド未入力だとエラーが出ますのでご入力ください。

<img width="2730" alt="スクリーンショット 2018-03-14 16.10.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/772fbfbc-ae2b-57b6-f24f-7b2a47ebc916.png">

ドキュメントにはオプションページは"次へ"を押下的な記述があるのでそのまま押すことにしました。
次ページでは"AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。"にチェックマークを入れ"作成"を押下。

### 作成物

"作成"を押すと一気に色々な物が作成されます。
用途は勝手ながら私の名前からの推測です

#### s3

今回の設定で作成されるs3バケットは下記の通りでした。

| バケット名       |   用途(推測) |    備考    |
|-----------------|------------------|------------------|
| demo-source-xxxxxxx | 元動画のアップロード用 | |
| demo-mp4destination-xxxxxx | 変換されたmp4の出力用 | |
| demo-logs-xxxxx | ログ用 ||
| demo-abrdestination-xxxxx | HLS、DASH用 | バケットポリシーも作成される |

#### CloudFront

| Name       |   用途(推測) |    備考    |
|-----------------|------------------|------------------|
|demo-abrdestination-xxxxx |demo-abrdestination-xxxxxがオリジン| |

#### その他

たくさんのLambda関数やStep関数やIAMロールが作成されますが、CloudFormationスタック作成後興味がある方はご確認ください。
ソースコードはこちらで公開されています - https://github.com/awslabs/video-on-demand-on-aws

# 動画変換実行

1. s3://demo-source-xxxxxxx　に動画をアップロード
2. email通知をもらう(Workflow started)
3. 32分後完了email通知をもらう

## 成果物

元動画 - Video (h.２６４,1920x1080,３．９mbps,fps 29.97) audio(AAC、48000hz、ステレオ) ファイルサイズ(141.2MB)

| name |コンテーナ|video | audio |
|----------|----------|--------|-------|
|demo_720p|mp4 |h.２65,1280x720,fps 25 6.7mbps| AAC、48000hz、ステレオ |
|demo_1080p|mp4 |h.２６5,1920x1080,fps 25 8.6mbps| AAC、48000hz、ステレオ |
|demo.m3u8 | HLS マスター  | |
|demo_270p.m3u8 | HLS | h.264,480x270, fps 14.985, 522kbs | AAC、48000hz、ステレオ |
|demo_360p.m3u8 | HLS | h.264,640x360, fps 29.97, 1.4mbps | AAC、48000hz、ステレオ |
|demo_540p.m3u8 | HLS | h.264,960x540, fps 29.97, 3.8mbps | AAC、48000hz、ステレオ |
|demo_720p.m3u8 | HLS | h.264,1280x720, fps 29.97, 5.5mbps| AAC、48000hz、ステレオ |
|demo_1080p.m3u8 | HLS | h.264,1920x1080, fps 29.97, 9.4mbps | AAC、48000hz、ステレオ |
|demo.mpd | DASH マスター  | |
|demo_270pinit.mp4| DASH | h.264,640x360, fps 14.985, 400kbps |  |
|demo_360pinit.mp4 | DASH | h.264,640x360, fps 29.97, 1.2mbps |  |
|demo_540pinit.mp4 | DASH | h.264,960x540, fps 29.97, 3.5mbps |  |
|demo_720pinit.mp4 | DASH | h.264,1280x720, fps 29.97, 5mbps|  |
|demo_720pinit.mp4 | DASH | h.264,1280x720, fps 29.97, 5mbps|  |
|demo_audioinit.mp4 | DASH | | AAC、48000hz、ステレオ 128kbps |

avc->hevc変換でなぜビットレートが上がるのか...

# 削除

削除は簡単でCloudFormationのスタック削除でほぼ全て消えます。
消えないのは確認した限りですとs3バケットとその中身でした。

# 最後に

AWS Answersのテンプレを利用することで簡単にサーバーレスな環境ができるのがかなり便利でした。
そのまま使うのもありかもしれませんがソースコードも提供されているのでカスタマイズもできそうです。

作成して内容を参考にするだけでも有益ですが。