AWS MediaLive から MediaPackage に出力 (2019/3/8 新機能)

いつの間にか桜がほぼ満開なことに気がついた streampack 木村です。

さてさて MediaLive の output group に新たに `MediaPackage` が追加されました。

https://aws.amazon.com/jp/about-aws/whats-new/2019/03/aws-elemental-medialive-simplifies-sending-live-streams-to-aws-elemental-mediapackage/

これまでも `HLS` から `webdav` もしくは `basic put` で MediaPackage に出力することは可能でしたが、destination で Credential 情報を入力しないといけないので少々面倒でした。
これで便利になるかと思いきや、普通に使っている人は <font color="Red">2019/3/27 現在、ユーザーガイド記載の方法だけではエラーで失敗します。</font>

その他、**お作法**もあるのでやり方を纏めてみました。

ユーザーガイド
https://docs.aws.amazon.com/medialive/latest/ug/creating-mediapackage-output-group.html

# Add output group 

はい、以下のように `MediaPackage` が追加されているのでこれを選択して進めます。

<img width="796" alt="スクリーンショット 2019-03-27 13.44.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/44fd9d3a-6da2-987f-de75-0e86aa49ad42.png">

## MediaPackage group

入力するのは MediaPackage であらかじめ作成しておいた `channel ID` のみです。 
エンドポイント URL やユーザー名/パスワードの入力は必要ありません！

<img width="802" alt="スクリーンショット 2019-03-27 13.50.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/d36503f3-3741-6fd0-19c8-0ebe6587de34.png">

## Stream settings

あとは HLS 出力設定をおこなうのですが、ここで**お作法**。
`Frame Rate` と `Aspect Rate` の項目で `INITIALIZE_FROM_SOURCE` は選択することができず、`SPECIFIED` にして任意の値を入力してあげる必要があります。

## Frame Rate

以下の項目を設定する必要があります。

| ITEM       |      Value | 
|:-----------------|:------------------|
| Framerate Control| SPECIFIED | 
|Framerate Numerator|任意の値|
|Framerate Denominator|任意の値|

例えば 30fps なら、
Framerate Numerator を 30
Framerate Denominator を 1

29.97fps なら
Framerate Numerator を 30000
Framerate Denominator を 1001

にします。

<img width="475" alt="スクリーンショット 2019-03-27 13.53.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/a2991e30-72df-f69a-c294-225a4d0e6114.png">


## Aspect Ratio

こちらは `PAR Control` を `SPECIFIED` にすれば他の項目は未入力でも設定可能です。

<img width="483" alt="スクリーンショット 2019-03-27 13.52.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/6cf5e5ed-8ccd-a09b-68e4-45c2391365c5.png">

その他、エンコードに必要な項目を入力し `Update channel` でチャンネルが作成できます。

# 配信エラー

しかしながら、このまま流しても前述のとおり<font color="Red">エラー</font>となり配信できません。

<img width="1086" alt="スクリーンショット 2019-03-27 13.58.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/b9bc745a-c870-f9e0-a6b1-09a3d5e777c7.png">

# 回避方法

ロール `MediaLiveAccessRole` にポリシー `AWSElementalMediaPackageReadOnly` をアタッチする。

要は MediaLive で普通に使っているロールからは MediaPackage の Credential 情報にアクセスできない為、読み取り権限を付与しようということです。

## MediaLiveAccessRole

IAM ページから MediaLiveAccessRole を探します。

<img width="1255" alt="スクリーンショット 2019-03-27 15.13.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/3cec4688-b3e0-fd27-6985-f863cc2d5284.png">

割り当てられてるポリシーを確認します。

<img width="1106" alt="スクリーンショット 2019-03-27 13.57.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/92f03e67-a352-4a54-14ce-10092067f3f1.png">

`ポリシーをアタッチします` で `MediaPackage` 関連のポリシーを探し、`AWSElementalMediaPackageReadOnly` を選択してアタッチします。

<img width="1399" alt="スクリーンショット 2019-03-27 15.22.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/9a773680-ad54-472b-ee4d-1dd906db49db.png">

ロールに新ポリシーが適用されていることを確認して準備完了です。

<img width="1362" alt="スクリーンショット 2019-03-27 15.23.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/e070212f-d616-3a66-e001-e6c0c698dbcc.png">

あとは通常通りライブを入れるとエラー無しで配信可能となります。

<img width="1006" alt="スクリーンショット 2019-03-27 14.21.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/17ef2346-0676-15b9-e595-4863461ca83e.png">

# 最後に

MediaServices 関連は気がつくと新機能が増えてたりします。
上記の機能も MediaLive を弄って気がついたのですが、当初はユーザーガイドにもまだ記載がなく自分で適当に設定してもエラーで動かなかったので AWS さんに問い合わせて教えてもらいました！