AWS でライブ配信システムを構築する （３） MediaLive の設定

#1. この記事で扱う内容
この記事では、AWS の各種サービスを使用してライブ配信システムを構築する方法について紹介します。

今回は、MediaLive の設定について紹介します。　MediaLive は、カメラ等から送られてきたライブ動画のデータを自動的にエンコードして出力する AWS サービスです。

記載した内容は、私が開発中に試行錯誤した結果であって、使用する環境や目的によっては必ずしも最善ではないかもしれませんので、その点をご注意ください。

##1-1. システム構成
「[（１）概要](https://qiita.com/mas_yam/items/9d4f491b3a1e310476f0)」に掲載のシステム構成図を参照してください。

##1-2. 環境
- AWS Elemental MediaLive（東京リージョン）


##1-3. 前提
- AWS のアカウントを取得済みであること
- IAM ユーザーを自分で作成できること

#2. MediaLive の設定
##2-1. MediaLive とは？
AWS Elemental MediaLive は、ライブ映像を取り込んでライブ配信に必要な動画処理を自動で行ってくれるリアルタイムエンコードサービスです。

MediaLive では大きく分けて以下の3つの項目を設定する必要があります。

- Channel ： ライブ動画処理のメインの設定
- Input ： カメラで撮影した動画を受信する部分
- Output ： 処理した動画を出力する部分


参照

- [AWS Elemental MediaLive（ライブビデオコンテンツを変換）| AWS](https://aws.amazon.com/jp/medialive/)
- [What Is AWS Elemental MediaLive? - AWS Elemental MediaLive](https://docs.aws.amazon.com/ja_jp/medialive/latest/ug/what-is.html)

【使用料に関する注意】
MediaLive では、使用する Input の数および Output の数、コーデックの種類によって費用が変わってきます。　また、使用していない Channel に対しても費用が発生しますので、未使用時の使用料を節約したい場合は、使用終了後に都度 Channel を削除する必要があります。

参照 ： [料金 - AWS Elemental MediaLive | AWS](https://aws.amazon.com/jp/medialive/pricing/)

##2-2. IAM ユーザーの作成
このページの作業は MedaiLive を管理するための権限を有する IAM ユーザーで行います。

新しく作成した IAM ユーザー、または既存の IAM ユーザーに次のポリシーと以下で作成するポリシーをアタッチします。

- IAM ロール作成用 ： **IAMFullAccess** （AWS 標準のポリシー）
- MediaLive 管理用 ： AWS 標準のポリシーはないので（2019年5月現在）、以下で作成します

※ これらの権限を包含するポリシーがアタッチされた IAM ユーザーがある場合は、そちらを使用してかまいません。

**(1)**
IAM ダッシュボードのメニューからポリシーを選び、「ポリシーの作成」ボタンを押します

**(2)**
「ビジュアルエディタ」タグの「サービスの選択」で、「MediaLive」を選択します。

![fig5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/9ab69f3c-e278-2a66-6b9b-64f390c33bcd.png)

**(3)**
「アクション」で「すべての MediaLive アクション」を選択します。

![fig6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/5a3e7fef-5ac3-323e-4f48-50a64ca9ee0e.png)

**(4)**
「リソース」で「すべてのリソース」を選択ます。

![fig7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/d4275716-8781-c632-d78c-38b9a93121d4.png)

※ 特定のリソースに制限したい場合は、対象となる ARN を指定してください。

**(5)**
「ポリシーの確認」ボタンを押して「ポリシーの確認」画面が表示されたら、適当な名前と説明を入力して「ポリシーの作成」ボタンを押して、作成を完了してください。

**(6)**
使用する IAM ユーザーに、上で作成したポリシーと「IAMFullAccess」をアタッチします。

以降の作業は、ここで用意した IAM ユーザーを使用して行います。

##2-3. Channelの作成
**(1)**
AWS マネジメントコンソールで、検索ボックスに「medial」と入力して表示される「MediaLive」を選択し、MediaLive のダッシュボードを開きます。

**(2)**
MediaLive のダッシュボードを開くと以下の画面が表示されるので、「Create Channel」ボタンを押します。

![fig8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/c5f5219b-2301-f79c-af04-68466c217935.png)

**(3)**
「Channel and input details」画面の「General info」欄で以下の項目を入力します。

- Channel name ： 作成するチャンネルの名前を入力します（ここでは「livetest」とします）
- IAM Role ： このチャンネルが使用するロールを設定します。ここでは「Create role from template」を選択し、「Create IAM role」ボタンを押してください（すでにロールを作成している場合は「Use exsisting role」を選択してください）。

![fig9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/a7e44dd8-93fa-231d-02a8-8a49cc6a4199.png)

「Create IAM role」ボタンを押すと、自動的にロールが作成されて、「Use existing role」が選択された状態になります。

![fig10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/d7d654ba-3b63-11e9-8adf-81590f5d7cb6.png)

**(4)**
「Channel template」欄のTemplateで、ドロップダウンリストの中から「Live event - HLS」を選択します。　選択すると、左側のメニューの「Output groups」欄に「1. HD(HLS)」というグループが追加されます。

![fig11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/f5daa22c-18ea-df33-02ee-07ef19a7c8aa.png)

![fig12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/426a1cd0-a1be-cca0-dd05-b315ec596a21.png)

※ Channel template とは、以降で設定する「Channel class」と解像度ごとのOutputの設定を保存した雛形のことで、標準で7つが用意されています。 それぞれ用意されている解像度が異なるので、用途に合ったものを選択してください。


**(5)**
「Channel class」欄で出力パイプラインの数を選びます。デフォルトでは2つの出力を持つ「STANDARD」になっています。　ここでは「STANDARD」のままにしておきます。

![fig13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/f283d53d-ee6c-27ee-280c-477e86f774ed.png)

※ 出力を1つのみにしたい場合は「SINGLE_PIPELINE」を選択してください

##2-4. Input の作成
カメラからのライブ動画を受け付ける input 部分を作成します。

**(1)**
「Create Channel」画面の左側のメニューにある、「Input attachments」欄の「Add」ボタンを押します。

![fig14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/083bcb38-e483-aac8-f187-62aae173553a.png)

**(2)**
「Attach input」欄が表示されるので、「Create input」ボタンを押します。

※ すでに作成してあるinputを再利用する場合は、「Input」のドロップダウンメニューから当該inputを選択し、「Confirm」ボタンを押して、inputを適用します。

**(3)**
「Create input」ボタンを押すと、「Create input」画面が表示されるので、以下の項目を設定します。

![fig15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/8b217996-15de-16c8-9a26-d5e2b648648f.png)

- Input name ： inputの名前を入力します
- Input type ： MediaLiveが受信するストリーミング形式を選択します。それぞれの使用状況に応じて適切なものを選択してください（今回はRTMP（push）でカメラと接続するので、「RTMP（push）」を選択します）

![fig16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/ae554f26-3be1-fd4b-858e-c012315db990.png)

- Network mode ： MediaLiveとカメラを一般回線を通じて接続する場合は「Public」を、Amazon VPC からMediaLiveに動画を転送する場合は「VPC」を選択します（今回は手元のカメラから動画を転送するので「Public」を選択します）

![fig17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/c6067274-a649-9ccf-6c97-923bdb97b9cb.png)

- Input security group ： Network mode で public を選択した場合は、送信元を制限するために 「Input security group」を作成します。「Create」を選択して、下のテキストボックスに送信元となるホストまたはサブネットを CIDR 形式（192.168.1.0/27 など）で入力し、「Create input security group」ボタンを押します。すでに Input security group を作成しており、それを再利用する場合は「Use existing」を選び、ドロップダウンメニューから当該グループを選択します。

![fig18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/eb4c9d0b-a6ee-fc5a-d64c-acf0b6020115.png)

- Input destinations ： カメラ側で指定する配信先の情報を入力します。2系統（A, B）それぞれに指定することができます。どちらも1つ目のボックス（Application name）にパス、2つ目のボックス（Application instance）に生成される動画ファイルのプレフィックス（生成される動画ファイルの先頭につく文字列）を指定します。ここで指定したパスとプレフィックスを用いて、MediaStoreに「/[パス]/[プレフィックス].m3u8」という形でファイルが保存されます。

**(4)**
必要な項目を入力したら、画面右下の「Create」ボタンを押します。

**(5)**
Attach Input 画面に戻るので、Input で先ほど作成した input を選択し、「Confirm」ボタンを押します。

##2-5. Output の作成
生成された動画ファイルの出力先となる Output を設定します。

**(1)**
Inputの作成で「Create」ボタンを押すと「Create Channel」画面に戻るので、左側のメニューの「Output groups」欄に表示されている「1. HD (HLS)」というグループをクリックします。

![fig19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/3195300a-81c5-7c3a-cf37-be15b1cd6631.png)

**(2)**
動画ファイルの出力先として2つの「HLS group destination」を指定する欄が表示されるので、[AWS でライブ配信システムを構築する （２） MediaStore の設定](https://qiita.com/mas_yam/items/20c8b524ebd87595e88e)　の「2-3. コンテナの作成」で作成した MediaStore のコンテナの endpoint を以下の形式で入力します。

```
mediastoressl://xxxxxxx.data.mediastore.ap-northeast-1.amazonaws.com/[パス]/[プレフィックス]
```

- xxxxxxx.data.mediastore.ap-northeast-1.amazonaws.com ： MediaStore コンテナの endpoint のドメイン名部分
- [パス] ： Input 作成時に「Input destination」で指定したパス
- [プレフィックス] ：Input 作成時に「Input destination」で指定したプレフィックス

![fig20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/892be3e9-aa08-13aa-68d1-1a4d3757ce41.png)

**(3)**
「HLS settings」欄は、今回はデフォルトの設定のまま使用します。

**(4)**
「HLS outpus」欄には、Channel作成の際に「Channel template」で選んだテンプレートに応じて数種類の解像度に応じた出力設定が表示されています。不要な出力がある場合は、当該設定の右側の × ボタンを押して削除してください（ここではデフォルトの設定のままにします）

![fig21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/28b952e9-e1f7-6473-e899-de34c9212ab2.png)

※ 各出力で生成されるファイルは「[プレフィックス]_1080p30_xxxxx.ts」といったファイル名になります。
※ 出力の数だけ費用が加算されますので、テストなどで複数の出力が不要な場合は、適当な出力を１つだけ残して他は削除することをお勧めします。

**(5)**
すべての項目を入力したら、左側のメニューの下にある「Create channel」ボタンを押して、channel の作成を完了します。

![fig22png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/592f7692-8a2f-5c3e-1e3a-701de9870c49.png)

**(6)**
channel一覧画面に移るので、作成したchannelがあることを確認します。channel 作成が完了すると Status が「Idle」に変わります

![fig23png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413038/47a73cee-9df9-d07f-3c82-4f7898cca393.png)


<br/>

以上で MedaiLive の基本的な設定は終わりです。　

ここまでの設定を一通り終えると、ライブ配信を開始することができます。　MediaLive から出力された動画ファイルは MediaStore のコンテナに保存されますので、MediaStore のコンテナに割り当てられた URL にアクセスすることでコンテナ上の動画ファイルを参照することができます。

今回は、ある程度の規模の視聴者を想定して CDN での配信を考えていますので、次の回では MediaStore に保存された動画ファイルを CloudFront を介して配信する方法について紹介します。

# 目次
（１）[概要](https://qiita.com/mas_yam/items/9d4f491b3a1e310476f0)
（２）[MediaStore の設定](https://qiita.com/mas_yam/items/20c8b524ebd87595e88e)
動画ファイルを保管する MediaStore の設定について紹介します。
（３）[MediaLive の設定](https://qiita.com/mas_yam/items/ed01102b8a996bfc5774) : このページ
（４）[CloudFront による配信](https://qiita.com/mas_yam/items/c3d1dde987afa50479d1)
MediaStore に保管された動画ファイルを CloudFront を経由して配信する方法について紹介します。
（５）[MediaLive の設定 その２](https://qiita.com/mas_yam/items/9bdfdb2091fb12ab4c77)
MediaLive でアーカイブを出力する方法、 Railsアプリから Channel を操作する方法、ライブ配信の遅延軽減法について紹介します。