AWS Media Servicesとは何なのか

こんにちは、アイレットにてcloudpackエバジェリストをしている後藤です。クラウドのみでライブ配信およびオンデマンド配信をサポートする動画ソリューション[streampack](https://cloudpack.jp/service/option/streampack.html)のプロダクトオーナーです。一応💦

さて今回は、最近AWSからリリースされたAWS Media Servicesの概要をまとめて見ようと思います。日本国内で利用されている方がまだまだ少ないのか、意外と日本語による情報がなく、こうしたネタも有効かと思い書いてみることにしました。

（ちなみにこれらは2018年2月時点の情報を元に記載しています）

## AWS Media Services

クラウド上で動画配信を行う全ての方へ向けて開発された、フルマネージドの動画配信ソリューションです。複数のプロダクトからなりたつAWS Media Servicesは、実験的なプロジェクトではなく、ネット上での大規模なライブ配信はもちろん、放送局クオリティの24時間番組配信、また有料の動画サブスクリプションなど、映像ビジネス全般に対応できる機能群を提供しています。

含まれるコンポーネントは5つ。

* 動画変換 *AWS Elemental MediaConvert*
* ライブ配信 *AWS Elemental MediaLive*
* 動画保護などパッケージング *AWS Elemental MediaPackage*
* 動画ファイル向け高性能ストレージ *AWS Elemental MediaStore*
* パーソナライズ・ターゲティング広告 *AWS Elemental MediaTailor*

はて、ここで気になる名前が。

## Elementalって？

![Elemental Website.png](https://qiita-image-store.s3.amazonaws.com/0/21224/fcfc0cde-731e-b07f-6f8e-b423e0d8b0b7.png)

[Elemental](https://www.elemental.com/)とは、実はAmazonが2015年に買収した、放送業界向けの動画ソリューションを提供している会社です。もともとハードウェア込みのアプライアンス製品も出している動画・配信系ソフトウェア業界No.1の会社で、AmazonにJoin後にはクラウド版ということでElemental Cloudというサービスを提供しています（Elemental CloudはソフトウェアをEC2上に展開するようなイメージで、運用については利用者側にゆだねられる形式です）。

参考: [Amazon Web Services to Acquire Elemental](https://www.elemental.com/newsroom/press-releases/amazon-web-services-acquire-elemental)

そのElementalの持つ資産・テクノロジーを、AWSへクラウドらしい進化を遂げてリリースされたものがAWS Media Servicesサービス群となるのですが、全体としての特徴はフルマネージドになった点。これはAWSのサービスとしては当たり前だけどこれまで同カテゴリの製品はほとんど無かったためにインパクトが大きい。

また、重要なのは放送業界クオリティのサービスがフルマネージドで提供され、安価に簡単に利用可能になったというところ。誰でも自由に動画配信の基盤を手に入れることが出来る時代になったということで、もっとみんな盛り上がってよいはず（と勝手に思う）。

## フルマネージド化されたサービス群

![AWS_Media_Services_logo.png](https://qiita-image-store.s3.amazonaws.com/0/21224/e608dc93-0550-f752-ddbc-79fb2282e4aa.png)

先にあげた5つのサービスそれぞれ役割がありますが、基本的には完全にAWSへ統合されて、AWS Management Consoleで操作可能はもちろんのこと、CLIやSDKからの操作も可能になり、CloudFormationなどデプロイツールやその他CIツールなどとも連携がしやすくなり、クラウドらしい使い方が可能になっています。

もちろん料金は使った分だけ。配信時間やデータ量などで課金され、不要であれば止めることもできます。完全にAWSへ統合されたおかげでCloudWatchなどとも連携ができるので、モニタリングしてイベント発生時に追加処理をさせるなどの運用も可能となってます。

フルマネージドなので特に意識することはないけれども、基本すべてのサービスはマルチAZ（Availability Zone）デプロイされていて冗長化されています。

## 各サービスの特徴

各サービスの概要を紹介します。

### <img src="https://qiita-image-store.s3.amazonaws.com/0/21224/c5085f33-6b84-75c2-f018-abaf8287d422.png" width="10%" /> AWS Elemental MediaConvert

任意のフォーマットの動画を、配信向けに最適化されたフォーマットへ自動的に変換してくれるサービス。

利用者は事前に変換環境を構築せずに変換したい動画アセットを用意をして、変換設定と一緒に投入するだけで良い。複数の処理を投げても並列に動作するので処理時間はいつも最短（最適）になる。

もちろんマルチチャンネルオーディオ、グラフィックオーバーレイ、クローズドキャプション、DRMに対応している。

ちなみにElasticTrascoder(ETS)と一部機能的に重複するけど、まだETSは死なないし、一部のフォーマットへの変換などやAWS Key Management Serviceと連携した暗号化などはETSでのみ対応しているのでまだまだ使ってね、とのこと。

参考: [Elemental MediaConvert VS Elastic Transcoder](https://forums.aws.amazon.com/thread.jspa?threadID=268221)

ちなみにオンデマンド配信用の一般的な映像変換ワークフローはこんな感じになります。
<img src="https://image.slidesharecdn.com/ctonightawsmediaservices-171220085910/95/ivs-cto-night-dayaws-media-services-10-638.jpg?cb=1513760689"/>
出典: [https://www.slideshare.net/AmazonWebServicesJapan/ivs-cto-night-dayaws-media-services/10](https://www.slideshare.net/AmazonWebServicesJapan/ivs-cto-night-dayaws-media-services/10)

対応している入力フォーマットは以下の通り。

#### Video（入力）
| コンテナ | ビデオコーデック |
|:--|:--|
| コンテナ無し  | DV/DVCPRO, AVC (H.264), HEVC (H.265), MPEG-1, MPEG-2 |
| AVI | Uncompressed, DivX/Xvid, DV/DVCPRO  |
| Adobe® Flash® | Flash® 9 File, H.263, AVC (H.264) |
| Matroska  |  AVC (H.264), MPEG-2, MPEG-4 part 2, VC-1 |
| MPEG Transport Streams  | AVC (H.264), HEVC (H.265), MPEG-2, VC-1  |
| MPEG-1 | System Streams	MPEG-1, MPEG-2  | 
| MPEG-4 | Uncompressed, AVC Intra 50/100, DivX/Xvid, H.261, H.262, H.263, AVC (H.264), HEVC (H.265), JPEG 2000, MJPEG, MPEG-2, MPEG-4 part 2, VC-1 |
| MXF | Uncompressed, AVC Intra 50/100, DNxHD, DV/DVCPRO, DV25, DV50, DVCPro HD, AVC (H.264), JPEG 2000, MPEG-2, Panasonic P2, SonyXDCam, SonyXDCam MPEG-4 Proxy |
| QuickTime®| Uncompressed, Apple ProRes, AVC Intra 50/100, DivX/Xvid, DV/DVCPRO, H.261, H.262, H.263, AVC (H.264) JPEG 2000, MJPEG, MPEG-2, MPEG-4 part 2 |
| WMV/ASF| VC-1  |

#### Audio（入力）

| コンテナ | 音声コーデック |
|:--|:--|
| Audio Video Interleave | Dolby® Digital, Dolby® Digital Plus™, Dolby® E frames carried in PCM streams, MPEG Audio, PCM |
| Adobe® Flash® | AAC |
| Matroska | AAC, Dolby® Digital, Dolby® Digital Plus™, WMA, WMA2 |
| MPEG Transport Streams | AAC, AIFF, Dolby® Digital, Dolby® Digital Plus™, Dolby® E frames carried in PCM streams, MPEG Audio, PCM, WMA, WMA2 |
| MPEG-1 System Streams | AAC, AIFF, Dolby® Digital, Dolby® Digital Plus™, MPEG, Audio PCM |
| MPEG-4 | AAC, Dolby® Digital, Dolby® Digital Plus™, PCM, WMA, WMA2 |
| MXF | AAC, AIFF, Dolby® E frames carried in PCM streams, MPEG Audio, PCM |
| QuickTime® | AAC |
| WMV/ASF | WMA, WMA2 |

[https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers-input.html](https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers-input.html)

#### Video（出力）
| コンテナ | ビデオコーデック |
|:--|:--|
| MPEG DASH | AVC (H.264), HEVC (H.265) |
|MPEG-2 TS | AVC (H.264), HEVC (H.265), MPEG-2 |
| HLS | AVC (H.264), HEVC (H.265) |
|Smooth (ISMV) | AVC (H.264) |
| MPEG-4 (.mp4) | AVC (H.264), HEVC (H.265) |
| MPEG-4 Flash (.f4v) | AVC (H.264) |
| QuickTime | AVC (H.264), MPEG-2, Apple ProRes (with AIFF audio only) |
| XDCAM | MPEG-2 |
| Raw (コンテナ無し) | AVC (H.264), HEVC (H.265), MPEG-2 |

#### Audio（出力）

| コンテナ | 音声コーデック |
|:--|:--|
| MPEG DASH | Dolby Digital Plus, Dolby Digital, AAC |
| MPEG-2 TS | Dolby Digital Plus, Dolby Digital, AAC |
| HLS | Dolby Digital Plus, Dolby Digital, AAC |
| Smooth (ISMV) | Dolby Digital Plus, Dolby Digital, AAC |
| MPEG-4 (.mp4) | Dolby Digital Plus, Dolby Digital, AAC |
| MPEG-4 Flash (.f4v) | AAC |
| QuickTime | Dolby Digital Plus (with H.264 and MPEG-2), Dolby Digital (with H.264 and MPEG-2), AAC (with H.264 and MPEG-2), WAV (with H.264 and MPEG-2), AIFF (with Apple ProRes) |
| XDCAM | WAV |
| Raw (コンテナ無し) | AAC, WAV |
| Audio Only MPEG-4 | AAC |

[https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers.html](https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers.html)

#### 料金

料金はETS同様、処理する映像のコーデック、サイズ（解像度）、フレームレート毎の単価設定に基づき、映像の尺（長さ）で課金されます。東京リージョンで利用する際の例は以下の通り。

- MEPG-2 Codec で 30fps以下のHDサイズ(720p〜1080p)の場合 1分当たり$0.0272
	- 秒単位で課金（1分以下の場合は60分のいくつと割り算）
	- ミニマムチャージが10秒（10秒以下でも10秒分課金）
	- その他詳細は[こちら](https://aws.amazon.com/mediaconvert/pricing/#Asia_Pacific_.28Tokyo.29)


### <img src="https://qiita-image-store.s3.amazonaws.com/0/21224/08c07993-0b9e-1377-6d5c-c867295df4ee.png" width="10%" /> AWS Elemental MediaLive

テレビやPC、スマートフォンなどマルチデバイス・マルチスクリーン前提のリアルタイム動画配信を実現するための柔軟な機能を提供するサービス。

クラウドらしくライブ配信をするためのチャンネルは数分で準備完了し配信可能に。当然多くのビデオプレイヤーソフトウェアやCDNサービスなどに対応しているため、配信に辺り準備すべき多くのモノがサービスから提供され、配信そのものに集中できるのがすばらしい。

映像・音声の変換はもちろんのこと、字幕機能もサポート。

入力ストリーム冗長化することはできるけど、自動フェールオーバーが無いようで、冗長化必須の現場の場合の対策は別途考える必要がある。惜しい。ちなみにElemental Cloudにはその機能がある。

ちなみにライブ配信用の一般的なワークフローはこんな感じになります。シンプルに MediaLive → MediaPackage という形ですね。

<img src="https://image.slidesharecdn.com/ctonightawsmediaservices-171220085910/95/ivs-cto-night-dayaws-media-services-13-638.jpg?cb=1513760689" />
出典: [https://www.slideshare.net/AmazonWebServicesJapan/ivs-cto-night-dayaws-media-services/13](https://www.slideshare.net/AmazonWebServicesJapan/ivs-cto-night-dayaws-media-services/13)

#### 対応入力フォーマット

##### 入力方法
- RTP (Push)
- RTMP (Push & Pull)
- HLS Pull (HTTP, HTTPS, S3, MediaStore)

##### 対応フォーマット

| コンテナ | 映像コーデック | 音声コーデック |
|:--|:--|:--|
| RTP (MPEG TS) | H.264 (AVC), HEVC (H.265), MPEG-2 | AAC, Dolby Digital, Dolby Digital Plus, MPEG Audio, PCM |
| HLS | H.264 (AVC) | AAC, Dolby Digital, Dolby Digital Plus |
| RTMP | H.264 (AVC) | AAC |
 
 [https://docs.aws.amazon.com/medialive/latest/ug/inputs-supported-containers-and-codecs.html](https://docs.aws.amazon.com/medialive/latest/ug/inputs-supported-containers-and-codecs.html)
 
#### 対応出力フォーマット

##### ファイルベース

| コンテナ | 映像コーデック | 音声コーデック |
|:--|:--|:--|
| MPEG-2 TS | H.264 (AVC) | AAC, Dolby Digital, Dolby Digital Plus, MPEG-1 Layer II |
| HLS | H.264 (AVC) | AAC, Dolby Digital, Dolby Digital Plus |
| Microsoft Smooth | H.264 (AVC) | AAC, Dolby Digital, Dolby Digital Plus |

##### ストリーミングベース

| コンテナ | 映像コーデック | 音声コーデック |
|:--|:--|:--|
| UDP | H.264 (AVC) | AAC, Dolby Digital, Dolby Digital Plus |
| HLS | H.264 (AVC) | AAC, Dolby Digital, Dolby Digital Plus |
| Microsoft Smooth | H.264 (AVC) | AAC, Dolby Digital, Dolby Digital Plus |
 
 [https://docs.aws.amazon.com/medialive/latest/ug/outputs-supported-containers-and-codecs.html](https://docs.aws.amazon.com/medialive/latest/ug/outputs-supported-containers-and-codecs.html)

#### 料金

料金は、処理する映像のコーデック、サイズ（解像度）、ビットレート毎の単価設定に基づき、利用時間で課金されます。なお MediaLive は低額に抑えられる1年間固定利用モデルもあります。

東京リージョンで利用する際の例は以下の通り。

- 入力
	- MEPG-2 でビットレート10mbps以下のHDサイズ(720p〜1080p)の場合 1分当たり$0.0034
		- 分単位で課金、または1年契約の場合には月固定支払いもアリ
		- ミニマムチャージが10分（10秒以下でも10秒分課金）
- 出力
	- H.264 でビットレート10mbps未満、フレームレート30fps以下の場合 1分当たり$0.0207
		- 分単位で課金、または1年契約の場合には月固定支払いもアリ
		- ミニマムチャージが10分（10秒以下でも10秒分課金）
- その他詳細は[こちら](https://aws.amazon.com/medialive/pricing/)

### <img src="https://qiita-image-store.s3.amazonaws.com/0/21224/b75b7799-dd58-3b61-501e-1130e52fa2f6.png" width="10%" /> AWS Elemental MediaPackage

視聴者の環境に合わせてさまざまなフォーマット（エンコード方式やコンテナなど含む）やデータ保護のための暗号化をすることをパッケージングといいますが、その機能をすべて提供してくれるサービスがMediaPackageです。

例えばすべてのPCとスマートフォンで見れるように映像を提供しようとすると、Apple系のデバイス向けにはHLSという形式、そしてその他最新の環境であればMPEG-DASH、古い機種に対応するつもりなら HDS (HTTP Dynamic Streaming)、Smooth Streamingなどもあり得ます。また再生端末の画面解像度やネットワーク回線に合わせた画像クオリティのために複数の画角で映像を準備することが必要です。もっと言えば、コンテンツの保全のために暗号化や著作権保護(DRM)などの対策を含めるとさまざまなアウトプットフォーマットに対応しなければなりません。

配信環境に応じた出力形式バリエーションを生成するためのサービスとして MediaPackage は重要な役割を果たします。

<img src="https://image.slidesharecdn.com/ctonightawsmediaservices-171220085910/95/ivs-cto-night-dayaws-media-services-17-638.jpg?cb=1513760689" />
出典: [https://www.slideshare.net/AmazonWebServicesJapan/ivs-cto-night-dayaws-media-services/17](https://www.slideshare.net/AmazonWebServicesJapan/ivs-cto-night-dayaws-media-services/17)

実際にどのような動きをするか、以下の図を見るとわかりやすいと思います。

![How MediaPackage Works.png](https://qiita-image-store.s3.amazonaws.com/0/21224/6d84ce3e-2792-96c5-bc22-87596426817b.png)
出典: [How AWS Elemental MediaPackage Works](https://docs.aws.amazon.com/mediapackage/latest/ug/what-is-flow.html)


####  チャンネル

MediaLiveまたはその他のエンコーダーから出力されたHLS形式のデータを受け取ってパッケージングします。その設定をするためにチャンネルを作成します。

####  出力（エンドポイント）

出力は3つの形式がサポートされており、エンドポイントを作成することで対応フォーマットの形式で出力する。

- HLS
- Microsoft Smooth Streaming
- MPEG DASH

必要に応じて暗号化やDRM処理なども追加可能。もちろん複数エンドポイントを作って複数のフォーマットで出力することもできます。ABRなどの設定は基本的に入力されるストリームに依存しており新規設定はできないが、一部のビットレートに絞ることは可能になっている。（具体的なユースケースが体感できてない...）

#### 料金

料金は、処理する入力・出力のデータ量（GB）で決まります。

東京リージョンで利用する際の例は以下の通り（シンプル！）。

- 入力
	- 月の利用 1TBまで $0.088/GB
	- 1TB〜499TB $0.070/GB
	- 500TB以上 $0.053/GB
- 出力
	- 月の利用 1TBまで $0.176/GB
	- 1TB〜499TB $0.141/GB
	- 500TB以上 $0.106/GB
- その他詳細は[こちら](https://aws.amazon.com/mediapackage/pricing/)


### <img src="https://qiita-image-store.s3.amazonaws.com/0/21224/f8d32bf3-8391-26e2-59c7-f2985aadcfb8.png" width="10%" /> AWS Elemental MediaStore

映像配信を行う上で、ライブ配信時もオンデマンド配信時も映像のトランスコード時には非常に高速にアクセスできるストレージが必要となります。そこでS3レベルのセキュリティと耐久性を会わせもった MediaStore が登場しました。

高速大量配信時のオリジンとして求められる読み込み性能は当然として、映像データ変換・配信時に求められる書き込み後の読み込み整合性を提供しており S3 だけでは実現できない機能を実現しています。もちろん他の MediaServices とは独立して利用することも可能です。（例: MediaPackage によるパッケージングが不要でパススルーでCDNなどに連携する場合）

#### 料金

料金は、利用したデータ量（GB）（メディア最適化、通常ストレージ）とリクエスト数で決まります。

東京リージョンではまだ提供されてませんので、バージニアの例を。

- メディア最適化の取り込み $0.020/GB
- ストレージ料金 $0.023/GB per month
- PUT (1,000 リクエストあたり) $0.005
- GET または HEAD (10,000 リクエストあたり) $0.004
- DELETE または LIST (1,000 リクエストあたり) $0.005


### <img src="https://qiita-image-store.s3.amazonaws.com/0/21224/6ba0de61-11ba-d8b5-89a5-48df7e142214.png" width="10%" /> AWS Elemental MediaTailor

ネット上での映像配信でのビジネスとして成立させるためには、映像そのもののパーソナライズや広告配信の仕組みが必要となります。さらにこれまでの簡易的なクライアントサイドでの広告配信技術ではユーザーにとって好ましくない再生方法であることを理由に、適切に広告を再生できなくなりつつあるのも事実で、無償・有償さまざまな方法で動画を配信する事業者にとっては選択肢が減る一方でした。

ユーザー毎に適切な広告映像を配信する仕組みとして最近注目を浴びているのはServer Side Ad Insertion(SSAI)という、その名の通り、サーバー側で映像データそのものとして広告を入れてしまう方法です。この方法でクライアント側のプレイヤーなどの機能に関わらず事業者が広告を入れることが可能になります。さらにMediaTailorでは広告サーバーと連携し、パーソナライズされた広告配信やデータが準備できればターゲットへ向けた映像配信などが可能になります。

広告サーバーとの連携図↓
![](https://image.slidesharecdn.com/awselementalmediatailorfcdv2-180127111434/95/aws-elemental-mediatailor-12-638.jpg?cb=1517051756)

参考: [AWS Elemental MediaTailor](https://www.slideshare.net/AmazonWebServicesJapan/aws-elemental-mediatailor)

#### 料金

料金は、基本的には広告の挿入数で決まります。加えて、必要であれば広告映像のトランスコードも行えます。

東京リージョンではまだ提供されてませんので、バージニアの例を。

- 広告挿入料金
    - 1000件の広告挿入あたり月$0.75（500万件まで）
- 広告トランスコード料金
    - 1000件の広告挿入につき、広告トランスコード SD（720p未満） $0.015/分
    - 同様にHD（720p以上）$0.030/分
- その他
    - AWS外のCDN利用を行うとデータ転送料金がかかります


## streampackでの利用
![streampack logo.png](https://qiita-image-store.s3.amazonaws.com/0/21224/00984923-5e9b-211f-d5cc-34d4f2ee4336.png)

現在cloudpackで提供している映像配信ソリューションstreampackは、ETSやElemental LiveなどこれまでのAWSサービスを使って作られています。もちろんその他のオープンソース製品（nginx, ffmpegなど）、そして商用製品（Wowzaなど）も利用していますが、Elementalが本来持つ全ての機能がそろった暁にはリプレースしていきたいと思ってます。

ライブ配信など単機能だけで良い場合にはガンガン案件投入したいですね。なんせElemental Cloudに比べて起動は速い（45分→1〜2分）はCloudWatch連携もあるわで、いろいろ楽になっているので運用時に負担が少なくなるので。

また映像プラットフォームとしての進化のためにKinesis Video Streams、Recognition Videoなんかも使いたい。（今はVideo Indexerで提供中...）


## まとめ

- AWS Media Servicesはフルマネージドの映像関連ソリューション群
- フルマネージドなので構築・運用が非常に楽
- ライブ配信、映像のトランスコード、広告挿入など、ビジネスで使えるサービスたち
- もちろん使って分だけ課金されるのでお得
- ~~東京リージョンでは一部しか使えないので注意（2018年2月時点では MediaConvert と MediaLive のみ~~）**2月8日にすべてのサービスが東京リージョンで使用可能になったようです！**