MediaLive->MediaStoreでライブ配信するには

こんにちはhagi@streampackです。
今回はMediaStoreを利用したMediaLive配信につきまして記述します。

####MediaStoreとは？

[AWS](https://aws.amazon.com/jp/mediastore/)ではこのように説明しています。

>AWS Elemental MediaStore は、メディア向けに最適化された AWS ストレージサービスです。このサービスにより、ライブストリーミングによる動画コンテンツ配信に必要なパフォーマンス、整合性、低レイテンシーを実現できます。

####MediaPackageとの違いは？

MediaPackageはMediaLiveからのHLSストリームを受けて複数の他のフォーマットで配信したり場合によっては提供するストリームを変えたりすることが可能です。
いわゆるパッケジングをするサービスとなります。
MediaStoreはストレージなのでMediaLiveの出力を変えず、MediaStore直またはCloudFrontなどから配信するために利用します。
イメージとしてはs3に格納するのと同じです。

#はじめに

[MediaLive+MediaPackage](https://qiita.com/khagi/items/afa5dc1ecab5d5fc524b)とセットアップ方法は似ているのでMediaLiveの説明は非常に簡易になっております。

# 構成

MediaLive + MediaStore

# MediaStore

MediaLiveでデスティネーションが２つ必要なのでまずはMediaStoreのコンテナーを作成。
MediaPackageの時はchannelが２つ必須でしたがMediaStoreのコンテナーは１つでも可能。

## コンテナー作成

AWSのコンソールにログインを行い右上に表示された、”Create Storage Container”で作成したいコンテナー名を入れ"Create Container"を押下。

<img width="402" alt="スクリーンショット 2018-02-16 16.03.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/30e31673-53de-dd8f-3bfd-473cf6c8fbff.png">

以上！

といいたいとこですが実はこれではアクセスができない。

## Container Policyの編集

### Containerをクリック

<img width="1604" alt="スクリーンショット 2018-02-16 16.13.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/564e5c2f-9100-725b-8694-a82ffc4df79a.png">

### Container Policyを編集

例など詳細は[こちら](https://docs.aws.amazon.com/ja_jp/mediastore/latest/ug/policies-examples.html)をご参考ください。

誰でもhttpsで見れるようにしたいので[`Example Container Policy: Public Read Access over HTTPS`](https://docs.aws.amazon.com/ja_jp/mediastore/latest/ug/policies-examples-public-https.html)を利用
**”region"、"owner acct number"、"container name"は環境に合わせてご設定ください。**

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadOverHttps",
      "Effect": "Allow",
      "Action": ["mediastore:GetObject", "mediastore:DescribeObject"],
      "Principal": "*",
      "Resource": "arn:aws:mediastore:<region>:<owner acct number>:container/<container name>/*",
      "Condition": {
        "Bool": {
            "aws:SecureTransport": "true"
        }
      }
    }
  ]
}
```

#MediaLive 設定

MediaLiveは[ここ](https://qiita.com/khagi/items/afa5dc1ecab5d5fc524b#medialive)の設定を行い、HLS Group Destination A/Bの設定はMediaStoreのコンテナーにする。

設定を先出しすると下記のような形となります。
<img width="1028" alt="スクリーンショット 2018-02-16 17.04.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/4869c574-1ca2-7186-7161-331bf572b6fb.png">


##URL

URLはMediaStoreのコンテナーのData Endpointを利用。

<img width="1600" alt="test.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/a1e26ce1-9af1-987a-8599-534f2181c7fb.png">

さらに、httpsではなくmediastoresslにする必要があります。

```
Destination A mediastoressl://XXXXXXXXXXXXXX.data.mediastore.ap-northeast-1.amazonaws.com/destA/test
Destination B mediastoressl://XXXXXXXXXXXXXX.data.mediastore.ap-northeast-1.amazonaws.com/destB/test
```

上記設定の場合配信先は下記となります。

```
Destination A https://XXXXXXXXXXXXXX.data.mediastore.ap-northeast-1.amazonaws.com/destA/test.m3u8
Destination B https://XXXXXXXXXXXXXX.data.mediastore.ap-northeast-1.amazonaws.com/destB/test.m3u8
```

同一のendpointを指定できないのでフォルダーを指定することでDestination AとBを別にしつつマニフェストを同じ名前の”test”としています。

# 最後に

これでMediaLive＋MediaStoreの設定は完了です。
今回はMediaStoreのコンテナーを一つにしましたがこれには利点がいくつかあると思います。
例えば、

- CloudFront ディストリビューションは一つでいい
- MediaStoreはAWSのダッシュボードからもファイルを確認したり削除することができるので管理がしやすいかもしれない
- Liveのデータファイルが全て入っているのでVODとしても提供可能だがライブごとにコンテナーを分ければ管理がしやすい

などなど

ちなみにコンテナーはファイルが入った状態では削除できないかつファイルを一気に削除することができないのでスクリプトなどを利用するかダッシュボードで一ずつポチポチするしかないです。