AWS MediaLiveでRTMPライブ配信を行う

## やること

MediaLiveでRTMP配信を受けて、MediaPackageでHLSを視聴します。

**手順**
1. MediaPackageでChannelを2個作成する
2. MediaLiveでInputを作成する
3. MediaLiveでChannelを作成する
4. 配信アプリでRTMP配信を行う
5. MediaPackageで視聴を行う

- AWS MediaLive  
RTMPを受信します。
- AWS MediaPackage  
HLSを配信します。
- RTMP (Real Time Messaging Protocol)  
Adobe社。リアルタイムに特化した動画配信プロトコル。ポート1935。
- HLS (HTTP Live Streaming)  
Apple社。拡張子m3u8のプレイリストファイルを介して動画配信が可能。MacのSafari、WinのEdgeで直接視聴できます。

**Memo**
MediaLiveは強制的に2個作成されます。A=100,B=0でも、A=50,B=50でも料金は同じです。たぶん予備が目的かと思います。AWSは様々な理由で止まります。もちろんプロバイダーやローカルの原因もあります。障害が起きて1時間後に復旧しましたではライブ配信は取り返しがつかないので、こういう切り分け可能な仕様にしたのだと思います。この2個セットという発想が好きです。

## 1.MediaPackageでChannelを２つ作成する

<img src='https://qiita-image-store.s3.amazonaws.com/0/253995/6bdfb030-e5cf-6159-659e-a84605931213.png' width=50%>
<br><img src='https://qiita-image-store.s3.amazonaws.com/0/253995/451283e1-8d32-2eb8-e12c-e6dc73ca3155.png' width=50%>

- MediaPackageでチャンネルを2つ作ります。
- URL,Username,Passwordの3つを控えます。

## 2.MediaLiveでInputを作成する 
<img src='https://qiita-image-store.s3.amazonaws.com/0/253995/d6c5b44a-f846-99b0-8bab-513323c13006.png' width=50%>

- Input Type  
RTMP(push)を選びます。
- Input security group  
許可するIPアドレス。（例 123.456.xx.xx/32、0.0.0.0/0）
- Input destinations  
これがURLとKEYになります。上記の例では rtmp://～/test/test1 となり、配信アプリにはURL=rtmp://～/test、KEY=test1 になります。
もしIP縛りがないとき、URLを長くすればいいと思います。

## 3.MediaLiveでChannelを作成する

<img src='https://qiita-image-store.s3.amazonaws.com/0/253995/2c0a8fe4-a471-bdfb-ca5c-5b29e493f0c8.png' width=50%>

- Input
    - IAM role  
MediaLiveAccessRole（あるもの）
    - Input  
作ったもの
    - Channel template  
HTTP Live streaming
- Output
    - HLS group destination A  
URL,User,PassはMediaPackageで作ったもの。一度Parameterを作成することになります。同様にBも作成。
    - Output  
ここでは2本にしました。（960x540 1M, 1280x720 1M）

**Memo**
作成された MediaLive Parameter を削除したい場合、[Ec2]-[パラメーターストア]から削除できます。

## 4.配信アプリでRTMP配信を行う

<img src='https://qiita-image-store.s3.amazonaws.com/0/253995/a048049f-23b6-224e-7e49-954e95e701c4.png' width=50%>

- MediaLiveのChannelをStartさせます。  
注：MediaLiveは停止(idol)でも月1500円ほどかかります。

<img src='https://qiita-image-store.s3.amazonaws.com/0/253995/84bd970b-2b06-a9c0-3918-d64f50aefbb4.png' width=50%>

- フリーソフト OBS を使う場合（Mac or Win）  
rtmp://～/test/test1 のとき、URL=rtmp://～/test、KEY=test1 となります。

<img src='https://qiita-image-store.s3.amazonaws.com/0/253995/c92e0f32-8da4-e136-4313-840928386a4f.png' width=30%> <img src='https://qiita-image-store.s3.amazonaws.com/0/253995/fe3f4ae9-5663-c0a1-04ce-43472685b40c.png' width=30%>

- iOSアプリ It's my Live を使う場合（iPhone or iPad 無料）  
設定画面でRTMPを選び、URLとKEYを入力します。右側の配信ボタンを押し、上部の表示でRtmpの数値が出ればOKです。

## 5.MediaPackageで視聴を行う

<img src='https://qiita-image-store.s3.amazonaws.com/0/253995/195bf851-06f0-257d-d8b6-adfb153ad771.png' width=50%>

- MediaPackageでEndpointを作成して、Playで視聴ができます。

## トラブルシューティング
- セキュリティで許可するIPアドレスを変更しても効かない場合があります。そのときはMediaLiveのInputとChannelを作り直してみてください。
- MediaLiveのHealthで、配信ができていなくてもNetwork In,Outは微妙に増えるので、惑わされないでください。（成功するとケタ違いに増えます）
- 配信アプリを変えたらなぜか配信ができなくなったとき、一度ChannelをStop,Startするといいかもしれません。
- MediaLiveのChannelをStopしても、月額1500円ほどかかることに注意してください。

## これから

AWS MediaLiveを使えば、大手に頼らず中小でもライブ配信ができます。これで月額5千円のサービスを始められたらいいなと思ってましたが、サポート体制を考えると儲けが微妙だ。それならAWSの構築代行の方がいいかもです。
私の次のテーマは機械学習とメタ情報の自動生成。このあたりと組み合わせると、次のステップへ進めるかもしれません。