AWS MediaLiveを使って見た

こんにちは、動画チームのhagi＠[streampack](https://cloudpack.jp/service/option/streampack.html)です。

#はじめに
東京リージョンにMediaLiveがきたので試して見ることに。
発表当時はノースバージニアを試したが今回は東京のをテスト。

2/8 にMediaLiveにedit機能が追加されていることを確認しましたのと”黒い画面”を停止する方法もありましたので追記/編集いたします。

#構成
今回の構成はMediaLive->MediaPackageの構成で作ることにする。
実際配信する際はおそらくCDNを利用すると思われますがMediaLiveはCloudFrontのオリジンになれなし、MediaStoreは東京リージョンにない。

とはいえ今回はCDNの設定は省きます。

# MediaPackage

MediaLiveでデスティネーションが２つ必要なのでまずはMediaPackageのチャンネルを二つ作成。

## Channel作成

<img width="929" alt="スクリーンショット 2018-01-30 11.53.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/9c0f2c04-b69a-93cb-7699-a398b86be11a.png">

1. チャンネルを作成
2. 必須は”ID” - 用途がわかりやすいIDが良い。ここではdemoAとしました。
3. Descriptionはチャンネルの説明
4. ”Input type”はまだHLSのみ

## Endpoint 作成

endpointは配信するURL作成。
今回はデフォルト設定で行くのでIDだけを入力してあとは割愛

<img width="2001" alt="スクリーンショット 2018-01-30 11.58.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/9a54712e-8e73-9ca3-6004-8f8adb921cb3.png">

Saveを押下するとendpointが作成されてURLが表示される。

<img width="2396" alt="demoA.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/d40ccc4c-ede7-66cd-d167-28c82f61d71a.png">

MediaLiveでは”Input URL”、”Username”、”Password”が必要

## MediaLiveではMediaPackageのデスティネーション(Input URL)が二つ必要なので上記手順を再度行う。

結果、異なるInput URLが２つできた

<img width="1669" alt="demoAB.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/5f190542-7aec-22a0-9f85-57c3c217ab34.png">

# MediaLive

<img width="1616" alt="スクリーンショット 2018-01-30 12.30.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/6707edf7-8526-3c5b-9c25-8aeaaf8d711d.png">

## General Info

<img width="1023" alt="medialive_general.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/a53d5379-5d80-47c8-c107-b35de53ac64a.png">


1. ”Channel name” を入力 - チャンネルの用途がわかりやすい名前がおすすめ
2. ”IAM role”の作成または既存のIAM roleの指定

## Channel Input

"Create input"を押下
<img width="1413" alt="スクリーンショット 2018-01-30 13.17.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/ac9771d9-1f6b-460d-ecb1-6075ef657e91.png">

### Input details

1. ”Input name”に入力の名前を入力 
2. ”Input type”でエンコーダーからの配信方式を入力 - 今回はPCからrtmpで配信を行う予定なのでrtmp(push)を選択

### Input security group

rtmp送出先のセキュリティーグループを設定可能
今回は全てから受け付けるため、0.0.0.0/0で作成後選択

### Input destinations

rtmpのendpointを作成

**なぜかApplication nameだけでも登録はできるがApplication instanceが無いと受け付けない**
> For RTMP PUSH inputs, you must specify two destination application names and instances.

今回は下記を設定

application name: live
application instance : demoA, demoB

**application instanceはストリーム名となります。**


するとendpoint rtmp://XXX.XXX.XXX.XXX:1935/live/demoA と endpoint rtmp://XXX.XXX.XXX.XXX:1935/live/demoB が作成されます。

<img width="914" alt="channel_input.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/eed7a467-b705-a206-448b-8397d66d0583.png">

## Channel template

今回はライブ配信には既存のテンプレートをLive eventを利用

<img width="1022" alt="スクリーンショット 2018-01-30 15.58.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/f779032e-fc8e-a06a-dc10-af8453a826fb.png">

するとOutputsが作成されます。

## Outputs

<img width="573" alt="スクリーンショット 2018-01-30 15.59.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/5f61b128-9487-d6a2-328e-4dec19b5880a.png">

### HD

#### Output groupsの HD(HLS)を押下

#### HLS group destination A

1. "HLS group destination A"にMediaPackage demoA情報を入力

   URL:Input URL
　　　　　　Username：Username
　　　　　　Password：”Create AWS Elemental MediaLive parameter”を選択後 "Name"には任意の名前を入力。Password valueはMediaPackageのパスワードを入力

2. Create AWS Elemental MediaLive parameterを押下

<img width="1038" alt="demoA_out.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/b23a09c8-9ddd-b510-5fc3-2cbd871489d9.png">

#### HLS group destination B

上記同様"HLS group destination B"にMediaPackage demoB情報を入力

### Create channelを押下

# 確認

以前書いたのですがrtmpの投げ方はこちら([でどうやってrtmpを投げるの？](https://qiita.com/khagi/items/b99f5a36846d9ab65daa#でどうやってrtmpを投げるの))をご確認ください。

まずはMediaLiveで作成したチャンネルをスタート！

## 送出先情報

送出先につきましてはどちらでも両方でも問題ありません。
実際demoAとdemoBは全く関係ありません。

**demoAの入力はdestination Aに出力され、demoBはdestination Bに出力されます。
特にfailoverが構成されているとか両系で流さないと行けないわけでは無いです。**

ただ設定する際にdestinationが２つ必要なのです。

あまり意味が無いように思えますがDNSなりでダイナミックにストリームも変更できるかもしれません。
もしくはマニフェストを編集して両方含めるとかとか。。。

下記記事では簡易な”failoverぽいこと”の手順を記述しています。
気になるようでしたらご参考ください。

[MediaLiveでストリームの冗長化ぽいことをするには](https://qiita.com/khagi/items/c898c0877241564659ae)

### demoA

URL(MediaLive Channel inputより）：rtmp://XXX.XXX.XXX.XXX:1935/live/
ストリーム名：demoA

### demoB

URL(MediaLive Channel inputより）：rtmp://XXX.XXX.XXX.XXX:1935/live/
ストリーム名：demoB

## 視聴情報

HLSの生ストリームなのでSafariやEdgeで確認することができる。AndroidもChromeだと視聴可能

### demoA

MediaPackageで作成したdemoAのEndpoint

https://XXXXXXXXXXXXXXXXX.mediapackage.ap-northeast-1.amazonaws.com/out/v1/XXXXXXXXXXXXXXXXXXXXXXXX/index.m3u8

### demoB

MediaPackageで作成したdemoBのEndpoint

https://XXXXXXXXXXXXXXXXX.mediapackage.ap-northeast-1.amazonaws.com/out/v1/XXXXXXXXXXXXXXXXXXXXXXXX/index.m3u8

# 最後に

MediaLiveを使って見て非常に設定が簡単である印象を受けました。

~~ただ編集オプションが無いので一度作成したチャンネルを変更したければCloneするしか無いと思います。
たCloneした場合でも元で使っているinputが利用できなくなる。
そのためoutput設定を保存するか、チャンネルをdelete後すぐにCloneすれば設定は持っていけるが少々めんどくさい。
またdestinationが２つ必要なのはもしかしして起動したら２個分料金取られるんだろうなと個人的に思いました。~~

追記：
channelのedit機能があり作成されたchannelの編集が可能です。
またHLSの設定で”Input Loss Action”をEMIT_OUTPUT->PAUSE_OUTPUTに設定することによってrtmp送出がとまった際デファルトの黒い画面が流れず、停止し入力を受け付けていない場合も課金は発生しないとのことです。

<img width="812" alt="スクリーンショット 2018-02-09 11.38.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/226670/c5e9c1e7-5b81-a5c1-e21e-ac2b829a9849.png">