AWS MediaServicesについて

#AWS Elemetnalとは
まずは一読
[初心者向け] AWS MediaServices の役割をライブ配信ワークフローと照らし合わせながら理解する
https://dev.classmethod.jp/articles/aws-mediaservices-role-with-live/
　
> AWS MediaServices は、主に AWS 上で動画配信を行うために使用されるサービス

* AWS Elemental MediaConnect
    * 信頼性と柔軟性が高く、安全なライブビデオの転送
* AWSElemental MediaLive
    * ブロードキャストとマルチスクリーンビデオ配信のために入力をライブ出力に変換する
* AWS Elemental MediaPackage
    * ライブおよびオンデマンドのビデオコンテンツの作成とパッケージ化
* AWS Elemental MediaStore
    * ライブやオンデマンドのメディアワークフロー向けにビデオアセットを作成および保存する
* AWS Elemental MediaTailor
    * サーバー側の広告挿入を使って、ビデオコンテンツをパーソナライズし、収益化する
* AWS Elemental MediaConvert
    * オンデマンドブロードキャストとマルチスクリーン配信のためのファイルベースのビデオアセットを準備する

##OTT（Over-The-Top）
> インターネット経由で動画コンテンツ等のサービスを提供する企業の事を OTT（Over-The-Top）

##動画配信ワークフローとは
1 エンコード
　撮影された生の動画ファイルはサイズが膨大であるため、それをユーザに届けるにはファイルサイズを適切に小さくする

> 圧縮する際のアルゴリズムの事をコーデックと呼びます。

<img width="644" alt="スクリーンショット 2020-05-25 18.54.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/d2b19db5-400d-3989-f188-7dfe5c8ee3c7.png">

> また、ユーザがコンテンツを再生する環境は様々であるため、各環境に対応したコンテンツを生成する必要があります。

これをパッケージングと呼ぶことが多いです。


> パッケージングには、各環境に対応する為のコンテンツ生成だけではなく、コンテンツを保護する為にDRMの仕組みを入れたり、広告のメタデータを埋め込むなど、様々な役割が内包されます。

* DRM(Digital Rights Management, DRM)
    * デジタル著作権管理

<img width="713" alt="スクリーンショット 2020-05-25 18.56.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/be8d6072-1871-bd53-0372-3876aa4cf7e7.png">

> ユーザからのリクエストに素早く応える為に、コンテンツを保管しておく場所も必要になってきます。これをオリジンと呼びます。

<img width="708" alt="スクリーンショット 2020-05-25 18.56.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/862a1028-6bdb-b8f2-dcc9-4ad6a6f1a037.png">


> AWS MediaServices は、上記における各仕組みを AWS 上で提供し、動画配信ワークフローを実現するためのサービスとなります。

##AWS 上でのライブ配信ワークフロー

> 動画配信のソースとしては、大きく分けてライブと VOD（Video on Demand）が挙げられる

###コンテンツを AWS に転送
> 大抵のケースで生の撮影データはサイズが膨大な為、AWS にコンテンツを転送する前にオンプレミス側で圧縮（エンコード）する必要があります。

<img width="709" alt="スクリーンショット 2020-05-25 18.58.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/6a092095-12df-6cd0-8131-012e0879a855.png">

> AWS に転送される前にオンプレでエンコードされたコンテンツについて、AWS ドキュメント上では Mezzanine Stream（メザニンストリーム）と表現される

Mezzanine」には「中間」といった意味合いがある

> また、オンプレ側で使用するエンコーダーとして、AWS は Elemental Live と呼ばれる物理エンコーダーを提供しています。

<img width="705" alt="スクリーンショット 2020-05-25 19.00.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/d8b053e6-e90c-f336-ffb0-f1e6135fb0a3.png">

> ここで、オンプレから転送されて来る Mezzanine Stream を AWS 側で受ける際に使用できるサービスが AWS Elemental MediaConnect

###エンコード〜パッケージング〜オリジン
> AWS に動画を取り込んだら、ファイルを圧縮（エンコード）し、各再生環境に応じてコンテンツを変換（パッケージング）し、一連の処理が完了したコンテンツをオリジンに格納

<img width="709" alt="スクリーンショット 2020-05-25 19.05.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/39868efd-f262-7610-47f1-a44969c9991a.png">

####AWS Elemental MediaLive
<img width="715" alt="スクリーンショット 2020-05-25 19.08.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/4599af73-cde8-47b7-9ead-c860d1939597.png">

> MediaLive によって、オンプレから来た動画ファイルが、私たちがよく目にする H.264 などのコーデックに変換されます。

また、MediaLive の主な役割はエンコードですが、HLS 形式で出力するなど、パッケージングも行う事が出来ます。

####AWS Elemental MediaPackage

> 基本的に、MediaLive でエンコードされたファイルを受け取り、パッケージング処理を行います。

<img width="706" alt="スクリーンショット 2020-05-25 19.09.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/9e5e26b8-418b-e188-a5e9-aa1e0229e72b.png">

#####MediaPackage パッケージング処理
* ジャストインタイム（JIT）パッケージング
* DRM や 広告挿入との連携

######ジャストインタイム（JIT）パッケージング
> パッケージングによって、様々な再生環境に対応するコンテンツが生成<img width="707" alt="スクリーンショット 2020-05-25 19.14.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/a5ea6e4b-c73d-cf0e-79ee-c1297c77b003.png">


<img width="437" alt="スクリーンショット 2020-05-25 19.12.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/e970b726-2dd6-136d-0dcf-bdcafc3db75e.png">


> ただし、複数の再生環境に対応するパッケージングファイルを用意してしまうと、オリジンサーバーの容量を圧迫してしまいます。

<img width="700" alt="スクリーンショット 2020-05-25 19.12.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/9cec51e0-5809-a2ae-f3f5-fac8e86f4e1f.png">

> そこで、パッケージング前のコンテンツのみを保持しておき、リクエストに応じて都度パッケージング処理をする事によってオリジンの負荷を下げる仕組みがジャストインタイムパッケージングです。

######DRM や 広告挿入との連携

> 他にも、デジタル著作権保護（DRM）や、広告挿入なども MediaPackage はサポートしています。

今回は記事ボリュームの都合上取り上げていませんが、MediaTailor と連携する事で広告挿入の仕組みを実現できます

> MediaStore は、ライブ動画の様に頻繁に更新&参照されるコンテンツに特化したオブジェクトストレージです。
####AWS Elemental MediaStore
> AWS 上でライブコンテンツのオリジン機能を提供するサービスが、AWS Elemental MediaStore です。

MediaStoreをS3よりも整合性の強いストレージとして理解する
https://dev.classmethod.jp/articles/aws-elemental-mediastore-mediastore-immediate-consistency/

####MediaLive / MediaPackage / MediaStore 使い分け

#####MediaLive + MediaStore
ユースケースとしては、DRM や広告挿入などパッケージングに不要で、かつコンテンツの再生環境も限られている（HLSだけとか）場合にはこの構成で十分

<img width="281" alt="スクリーンショット 2020-05-25 19.18.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/49b7e502-ade0-822b-70ee-d76f58a1acac.png">

#####MediaLive + MediaPackage
> MediaLive にてエンコードのみを行い、パッケージングとオリジンの機能は MediaPackage で実現する構成

<img width="277" alt="スクリーンショット 2020-05-25 19.19.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/7e6bde7b-c1ff-dfb5-025d-07a106c163fc.png">


> 基本的には、MediaLive + MediaStore の構成をベース検討し、やりたい事（複数デバイス対応、DRM、広告挿入、etc）が達成出来ない場合には MediaPackage の使用を検討する、という流れが良いのではないでしょうか。

###CDN
<img width="707" alt="スクリーンショット 2020-05-25 19.21.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/cdf33411-e928-9e7d-3f34-77422b89d2ad.png">