Amazon Linux 2上でWowzaサーバーをセットアップしてみた

お久しぶりです。streampackのfadoです。汗ばむ時期がまたやってきてしまいました。手洗い、うがいの習慣に、十分な水分補給もプラスしないといけなくなりますね。さて、今回は`Wowza Streaming Engine`の導入について記事にしたいと思います。そもそもどうやってセットアップするの？という初心者向けにライセンスの取得からサーバーへのインストールに加え、配信と視聴テストに至るまで簡単に解説させて頂きます。

#注意事項
* `AWS`環境上で構築しています。
* `Wowza Streaming Engine`(以下`Wowza`)は有料ですが**30日間の通常版**か**180日間のDeveloper版**のTrialライセンスを申し込むことができます。
* この執筆時点ではWowzaの最新バージョン**4.8.13+1 (build 20210527172944)**を利用しています。
* AMIで提供されているプリビルトではなくクリーンインストールからのセットアップとなります。
* インスタンスサーバーは`Amazon Linux 2`を対象にしていますが`CentOS 7`でも同じ手順を踏めばセットアップ可能です。

#始める前に
* `Wowza`はカスタマイズ可能であらゆるマルチデバイスへ高品質のビデオ、オーディオをストリーミングすることのできる信頼性の高いメディアサーバソフトウェアです。
* ライセンス取得にはWowzaアカウントが必須です。アカウントをお持ちでない場合、https://auth.wowza.com/login から新規作成して下さい。
* Wowzaのこちらの[記事](https://www.wowza.com/docs/how-to-troubleshoot-wowza-streaming-engine-installation#networ)を参考にインスタンスサーバーのSecurity Groupにポートを許可して下さい。
* 一台のインスタンスサーバーにつきなるべく複数バージョンの`Wowza`を起動させないようにして下さい。
* `Wowza`をインストール予定のインスタンスサーバーがWowzaが推奨の動作環境に適しているかどうか[こちら](https://www.wowza.com/products/streaming-engine/specifications "動作環境")からご確認下さい。

#手順
##Wowzaのライセンスを申請
Trial版には２種類ございます。それぞれの利用可能期間と制限について下記をご確認下さい。

[通常版](https://www.wowza.com/pricing/trial "通常版")
[Developer版](https://www.wowza.com/media-server/developers/license "Developer版")

今回は長く利用できる[Developer版](https://www.wowza.com/media-server/developers/license "Developer版")からライセンスを申請します。申請後数分以内に登録のメールアドレスに送信されます。セットアップ時に必要なのでライセンスキーは事前に控えておきましょう。

##Wowzaインストーラーをダウンロード
ログイン済みの`Wowza`のポータルからLinux 64-bit版のインストーラーをダウンロードします。

![スクリーンショット 2021-06-17 13.29.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/c0c6865e-f59e-a74a-9554-cae98d0b4f33.png)

##セットアップ
1.対象インスタンスサーバーにアップロードして実行権限を付与します。

```
$ sudo chmod +x WowzaStreamingEngine-4.8.13+1-linux-x64-installer.run
```

2.インストーラーを実行します。色々聞かれますが指示に従って進みます。

```
$ sudo ./WowzaStreamingEngine-4.8.13+1-linux-x64-installer.run
```

* 契約内容を同意するかどうか - 全て**「y」**にします
* `Wowza Streaming Engine Manager`(管理画面コンソール）のログイン名とパスワードを好きなものに設定します。後ほどログインのため忘れないように控えましょう。
* ライセンスキーを記入する - 登録メールに送信されたライセンスキーを入れます
* `Wowza`サービスがサーバー起動時に自動起動にするかどうか - 利用状況に合わせて選択します

3.`Wowza Streaming Engine`と`Wowza Streaming Engine Manager`サービスが起動されたことを確認します。

```
$ ps axu|grep jav[a]
root     30538  4.5 17.1 4406972 681676 ?      Sl   14:03   0:21 /usr/local/WowzaStreamingEngine/java/bin/java -Xmx1553M -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:SurvivorRatio=1 -server -Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxremote=true -Dcom.wowza.wms.runmode=service -Dcom.wowza.wms.native.base=linux -Dlog4j.configurationFile=/usr/local/WowzaStreamingEngine/conf/log4j2-config.xml -Dcom.wowza.wms.AppHome=/usr/local/WowzaStreamingEngine -Dcom.wowza.wms.ConfigURL= -Dcom.wowza.wms.ConfigHome=/usr/local/WowzaStreamingEngine -cp /usr/local/WowzaStreamingEngine/bin/wms-bootstrap.jar com.wowza.wms.bootstrap.Bootstrap start
root     30559  4.5  9.5 3653528 381628 ?      Sl   14:03   0:21 /usr/local/WowzaStreamingEngine/java/bin/java -cp :/usr/local/WowzaStreamingEngine/manager/lib/lib-jaxb/istack-commons-runtime-3.0.11.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-jaxb/jakarta.activation-1.2.2.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-jaxb/jakarta.xml.bind-api-2.3.3.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-jaxb/jaxb-runtime-2.3.3.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-jaxb/txw2-2.3.3.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-tomcat/ecj-3.22.0.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-tomcat/tomcat-annotations-api-9.0.36.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-tomcat/tomcat-api-9.0.36.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-tomcat/tomcat-el-api-9.0.36.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-tomcat/tomcat-embed-core-9.0.36.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-tomcat/tomcat-embed-el-9.0.36.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-tomcat/tomcat-embed-jasper-9.0.36.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-tomcat/tomcat-jasper-9.0.36.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-tomcat/tomcat-jasper-el-9.0.36.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-tomcat/tomcat-jsp-api-9.0.36.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-tomcat/tomcat-juli-9.0.36.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-tomcat/tomcat-servlet-api-9.0.36.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-tomcat/tomcat-util-9.0.36.jar:/usr/local/WowzaStreamingEngine/manager/lib/lib-tomcat/tomcat-util-scan-9.0.36.jar:/usr/local/WowzaStreamingEngine/manager/lib/wms-tomcat-9.0.36.jar -Djava.security.egd=file:/dev/./urandom -Dcom.wowza.wms.ConfigURL="" -Dcom.wowza.wms.ConfigHome=/usr/local/WowzaStreamingEngine/manager -Djava.io.tmpdir=/usr/local/WowzaStreamingEngine/manager/temp -Djava.net.preferIPv4Stack=true -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/usr/local/WowzaStreamingEngine/manager/conf/tomcat-log4j.properties -Dlog4j.configurationFile=/usr/local/WowzaStreamingEngine/manager/conf/log4j2-config.xml -Dlogback.configurationFile=/usr/local/WowzaStreamingEngine/manager/conf/logback-config.xml launch.Main --prefix=/enginemanager --defaultWebApp=/enginemanager --tempDirectory=/usr/local/WowzaStreamingEngine/manager/temp --webroot=/usr/local/WowzaStreamingEngine/manager/temp --warfile=/usr/local/WowzaStreamingEngine/manager/lib/WMSManager.war --httpPort=8088 --config=/usr/local/WowzaStreamingEngine/manager/conf/tomcat.properties --ajp13Port=-1 --directoryListings=false
```

* 手動でサービスを起動させる場合

```
$ sudo systemctl start WowzaStreamingEngine.service
$ sudo systemctl start WowzaStreamingEngineManager.service
```

* 手動でサービスを停止させる場合

```
$ sudo systemctl stop WowzaStreamingEngine.service
$ sudo systemctl stop WowzaStreamingEngineManager.service
```

* 手動でサービスを再起動させる場合

```
$ sudo systemctl restart WowzaStreamingEngine.service
$ sudo systemctl restart WowzaStreamingEngineManager.service
```

* サービス状況を確認する場合

```
$ sudo systemctl status WowzaStreamingEngine.service
$ sudo systemctl status WowzaStreamingEngineManager.service
```

##Wowza Streaming Engine Managerにログイン

1.ブラウザで下記URLを開きます。
http://[WowzaサーバーのPublic IPアドレス]:8088/enginemanager 

そうすると下記画面が表示されますがここではソース認証を設定ぜずに**「Skip Intro」**で先に進みます。もしアクセス時にエラー等が出た場合、Security Groupの見直しをしてみるといいかもしれません。

![スクリーンショット 2021-06-17 15.18.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/8a9a65d0-a88b-0150-d99c-fa8489aea638.png)


2.先ほどセットアップ時に設定したログイン情報でログインします。

![スクリーンショット 2021-06-17 15.26.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/2d6ef9b3-d84a-c686-3035-47f72532c807.png)

3.ログイン後、次のようにWowzaのホーム画面が表示されます。

![スクリーンショット 2021-06-17 15.29.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/95fa325b-0a0c-af6e-e3aa-427d1e1c6428.png)


4. **「Server」** -> **「About」**タブで`Wowza`の基本情報(ライセンス制限やJavaのバージョン等)が記載していて各種の内容を確認ができます。

![スクリーンショット 2021-06-17 15.35.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/30152b88-065d-9014-f959-62372734e924.png)


5. **「Applications」**タブから新規**Applications**の追加ができます。ただし、今回はTrialのDeveloper版なので**Live HTTP Origin**と**VOD HTTP Origin**は利用できません。

![スクリーンショット 2021-06-17 15.38.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/ba098a87-ef26-5716-27e0-eef088964c0f.png)

##配信と視聴のテスト
1.既存のLiveアプリケーションでRTMP配信をしてみます。今回はソース認証を行いませんので**「RTMP Sources」**と**「RTSP Sources」**をデフォルトの有効から無効化にしておきます。

**＊ソース認証とはセキュリティーのために配信先からWowzaサーバーに配信を開始する際に認証をかけること**

* 変更後

![スクリーンショット 2021-06-17 17.08.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/d6e1ee3c-6f59-f065-5cd4-db8540a98612.png)

**＊変更後はApplicationを再起動して下さい。**

2.配信側の準備をします。
今回はビデオ録画と生放送用の無料でオープンソースのソフトウェアである[OBS](https://obsproject.com/ja "OBS")を使って配信をしてみたいと思います。ちなみに私がいつも配信検証で利用しているフリー動画素材は[こちら](http://www.caminandes.com/ "Caminandes")です。

* OBSの配信設定画面

![スクリーンショット 2021-06-17 17.31.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/8e99503b-23a6-87a6-27fc-9e72079cd05e.png)

**「Start Streaming」**をクリックすれば配信開始です！

![スクリーンショット 2021-06-17 17.37.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/986ab592-e5d8-99f0-95d3-e990e7ebf7a1.png)

OBSではなくffmpegで配信してみたい方は下記コマンドで配信可能です。

```
$ ffmpeg -re -stream_loop -1 -i sample.mp4 -vcodec copy -acodec copy -flags +loop-global_header -f flv rtmp://[WowzaサーバーのPublic IPアドレス]/live/test
```

3.Wowza管理画面コンソール上でストリームが入っていることを確認
**「Applications」** -> **「Incoming Streams」**タブで下記のように現在入ってきているストリームが表示されます。もし入ってきていない場合、配信側からのPublic IPアドレスが許可されていることを確認しましょう。

![スクリーンショット 2021-06-17 17.50.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/b617136f-1c79-f360-1896-95a78d03783c.png)

4.視聴をします。
**Applications**の**「Test Playback」**をクリックすれば、どのプロトコルに対してどのURLで視聴できるか確認することができます。

![スクリーンショット 2021-06-17 17.56.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/d62ca942-4821-ccb1-5061-a50d91ca8ce2.png)

このままだと**Server**のIPアドレスがプライベートIPアドレスになっていたり、**Stream**がMyStreamとなっていたりで必要に応じて修正します。

![スクリーンショット 2021-06-17 18.22.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/68c96aa6-0fc4-ea82-b90b-f97216b46459.png)

* Server: `Wowza`サーバーのPublic IPアドレスを指定
* Application: 既にliveアプリケーションなのでこのまま
* Stream: 先ほどの`OBS`の配信設定でいうと**Stream Key**を指定

###HLSプロトコルで視聴してみます。
Safariでの視聴

http://[WowzaサーバーのPublic IPアドレス]:1935/live/test/playlist.m3u8

![スクリーンショット 2021-06-17 18.00.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/49ad0b77-3cee-440a-a429-c9c8c4464494.png)

###RTMPプロトコルで視聴してみます。
[VLC](https://www.videolan.org/vlc/index.ja.html] "VLC")での視聴

rtmp://[WowzaサーバーのPublic IPアドレス]:1935/live/test

![スクリーンショット 2021-06-17 18.26.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/23065725-51ce-230f-a087-9e06819d6a63.png)

##まとめ
実際仕事で使ってみて`Wowza`はとても万能なメディアサーバソフトウェアだなと思いました。現時点では出力としてのListenerモードには対応していませんが入力としてSRTプロトコルでの配信も可能です。その上、様々な機能を備えています。その中に擬似ライブ配信ができるスケジュール機能とライブストリーミングを他のターゲットに中継させるStream Target機能があります。気になる方は私が以前に書きました[スケジュール機能](https://qiita.com/afadhli/items/bf270ce674e92717776a "スケジュール機能")と[Stream Target機能](https://qiita.com/afadhli/items/47f2be882ab9bb94e2c2 "スケジュール機能")の記事を合わせてお読み頂けますと嬉しいです。このご時世だからこそライブ配信のニーズが益々高まる中、これからWowzaがどんな新機能を盛り込んでくれるのかとても楽しみです。

#参考文献
https://www.wowza.com/docs/how-to-install-and-configure-wowza-streaming-engine