AWS × wowza streaming engine を使ってライブ動画配信

# 概要
awsとwowza streaming engineを利用したライブ配信の構築手順をまとめます。
awsのアカウント登録とインスタンス立ち上げについては大まかに省略します。

# wowzaとは？
ざっくり言うと様々な規模のライブ配信とオンデマンド配信に対応した動画ストリーミングサーバを提供しているサービスです。

詳しくはwikipediaなどで見たほうがわかるかと。省略します。
https://ja.wikipedia.org/wiki/Wowza_Streaming_Engine

# 配信までの流れ
- wowza streaming engineのライセンス取得
- AWSインスタンス立ち上げ
- wowzaサーバの立ち上げ
- wowza配信用アプリのダウンロード
- wowza streaming engine managerにて配信設定

# wowza streaming engine ライセンス取得
流れは以下の通り。
有料版だと1インスタンスごとに一ヶ月あたり$65かかります。

- [wowza media systems](https://www.wowza.com/free-trial)に登録
    - お試しであればFreeでも問題ないでしょう
- ライセンスキーが記載されたメールが届く
    - wowza server起動時に登録します

# EC2インスタンスの起動
AWSを利用してwowzaサーバを構築する場合、コミュニティAMIを利用してwowza streaming engineが入っているインスタンスを起動することも可能です。
以下ではそのコミュニティAMIを利用したインスタンスの起動の流れで進めます。
（コミュニティAMIを利用しないwowzaサーバ構築の流れは簡単に本ページ最後のその他にまとめます）


- EC2ダッシュボードにて、インスタンスの作成をクリック
- 続いて以下のステップで進める
    - STEP1: AMI選択
    ※AMIを使う場合はマーケットプレイスからAMIIDを取得しないとインスタンス作成できない
        - コミュニティAMI->wowzaで検索
        - 以下のAMIを選択。すでにライセンス契約しているのでbyolを選択。byolは「Bring Your Own License」の意味。
         ![スクリーンショット 2015-12-29 11.06.55.png](https://qiita-image-store.s3.amazonaws.com/0/116407/bef2abee-e9c1-1f70-d8a7-cf8f4d53d037.png)
    - STEP2: インスタンスタイプの選択
        - 配信サーバなので有料のm4.largeを立ち上げました。無料のインスタンスでもお試しであればできるかと思います。
    - STEP3: 削除保護とモニタリングだけチェック、ほかはデフォルト
    - STEP4: ストレージの追加
        - デフォルト設定
    - STEP5: インスタンスのタグ付け
        - つけたいタグがなければ適当に
    - STEP6: セキュリティグループの設定
        - wowzaの説明書にも記載がありますが、AWSの設定で以下のポートを開放しておかないと配信できません。
        <img width="1005" alt="スクリーンショット 2016-03-14 16.47.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/116407/c438342d-f635-f426-b43d-ef9e4a5c048d.png">

        - インスタンス作成完了

# wowzaサーバの起動
- 起動したインスタンスにsshで接続
- wowza権限でライセンスファイルを修正

```
[ec2-user]$ sudo su wowza
[wowza]$ cd /usr/local/WowzaStreamingEngine/conf
[wowza]$ cp Server.license Server.license.bak
[wowza]$ vi Server.license
> AWSに接続する際と同じpemファイルの内容をそのまま上書きする
```
- 起動（ライセンスが通っていればライセンスキーの入力を求められるので、送られてきたメールのキーを入力）

```
[ec2-user]$ sudo su
[root bin]# ./startup.sh
......
Configure logging: file:///usr/local/WowzaStreamingEngine/conf/log4j.properties
INFO server server-start Wowza Streaming Engine 4 Trial Edition (Expires: XXX XX, 2014) 4.0.1 build10615 -
INFO server comment - Server License Key: XXXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
INFO server comment - Maximum Connections: 10
.....
```
- 起動時に「アドレスは既に使用中です」が出て起動できなくなる

```
INFO server comment - RESTServer: Bind attempt ([any]:8087)
WARN server comment - RESTServer: Bind failed, try again ([any]:8087): java.net.BindException: アドレスは既に使用中です|at sun.nio.ch.Net.bind0(Native Method)|at sun.nio.ch.Net.bind(Net.java:433)|at sun.nio.ch.Net.bind(Net.java:425)|at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)|at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)|
```
- 8087を使用したプロセスが立ってそうなので確認してkillする

```
$ sudo lsof -i:8087
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    2399 root   85u  IPv4  11755      0t0  TCP *:simplifymedia (LISTEN)
$ sudo kill 2399
```
- 再度startup.shを実行してwowza server startすることを確認
- http://[publicDNS name]:1935へブラウザでアクセスして、以下のような情報が表示されることを確認

```
Wowza Streaming Engine 4 Trial Edition (Expires: XXX XX, 2014) 4.0.1 build10615
```

# engine managerの設定
wowzaサーバを起動するとブラウザ上からengineマネージャーにアクセスできるようになります。
engineマネージャを利用することで簡単に配信設定を行うことができます。

- http://[publicDNS name]:8088/enginmanagerにブラウザでアクセス
- 承認を求められるので以下入力
    - user : wowza
    - pass : AWSインスタンスのID
- マネジメントが起動
- Source user Name and Password でユーザ作成
- ダッシュボードページへ
<img width="753" alt="スクリーンショット 2016-03-14 16.59.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/116407/cc7e6b1e-8ff0-55d1-2ea8-168137bc8663.png">

# 配信テスト用「Wowza GoCoder」をダウンロード
配信はwowza社が提供しているiphoneアプリ「wowza GoCoder」で可能です。
https://www.wowza.com/products/gocoder
このアプリを使うことで、iphoneで撮影した映像を立ち上げたwowzaサーバに送ることができます。

# 配信テストしてみる

- マネジメントページ上部タブの「Application」を選択し、適当に作成する
    - 設定はデフォルトで作成
- 上部ページの「Sources Live page」をクリックしてエンコーダーの設定
    - 「Wowza GoCoder」を選択
- Application Connection Settingsに記載されている設定でアプリ側の設定も揃える
- Wowza GoCoderにて撮影開始、アプリケーションの「Incoming Streams」にライブ中のStreamが表示される
- 「Test Players」を選択し、ライブ中継が再生できることを確認


# その他のメモ
- 有料のAWSインスタンスを立ち上げっぱなしにしておくと結構な金額がかかります。配信を行っていない時間帯はインスタンスを停止しておいたほうがよいでしょう。
- コミュニティAMIを利用しない場合
    - Wowza Streaming Engineのインストーラーを直接以下からdownloadしてインスタンスに設置します。
    - https://www.wowza.com/pricing/installer
    - インストーラーを起動させるとライセンスを要求されるので、メールで送られてきたライセンスを入力します。
    - その後のwowzaサーバ起動から配信設定までの流れは同じです。