Wowza Streaming EngineのStream Targets機能について

こんにちは、streampackのfadoです。気付けば11月になりました。今日は寒いのかなと思ったら強い日差しで急に暑かったりしますよね。服装選びに困っているという方もいらっしゃるのではないでしょうか。僕はまだまだ半袖で平気な季節です！あついといえば今自分の中で熱いのは動画ストリーミングサーバーのWowza Streaming Engineです（えっ今更？！）。というわけでこの度はWowza Streaming Engineについて記事にしたいと思います。

#背景
Ant Media Server(以下Antサーバー）に続き、Wowza Streaming Engine(以下Wowzaサーバー)にも触れる機会があました。Wowzaサーバーの一つの機能としてStream Targetsというものがありますがどういった機能なのか、設定方法などを検証してみましたので簡単に説明させて頂きます。

#構成
OBS(RTMP) -> Wowzaサーバー(RTMP)  -> Antサーバー -> WebRTC(ブラウザー)

今回は配信ソフトとしてOBS Studio(以下OBS）を使います。RTMPストリーミングをし、WowzaのStream Targets機能でAntサーバーに再配信し、AntサーバーのWebRTC経由でブラウザ視聴するという流れになります。

#環境
Ant Media ServerとWowza Streaming Engineの環境について

- 検証はAWS上で実施しました。
- AntサーバーとWowzaサーバーは各ベンダーが用意したAMI(AWS Marketplace)から構築したものです（ライセンス費用が発生しますのでご注意ください）
- AntサーバーとWowzaサーバーの構築に関しては割愛させて頂きます（Antサーバーについては[前回の記事](https://qiita.com/afadhli/items/89045cdc48c9df535255 "Ant Media Serverを用いてWebRTCによる超低遅延ストリーミング配信")をご参照頂ければと思います）
- サーバーのバージョン：
    - Ant Media Server: Enterprise Edition 1.8.1 20190828_1051
    - Wowza Streaming Engine: Wowza Streaming Engine Pro 4 for Amazon EC2 4.7.7 build20181108145350 License

#手順

##Antサーバー

- IPアドレス：パブリックIPアドレス or ELB名
- ポート：1935/tcp
- Application名： WebRTCAppEE

##Wowzaサーバー
①Wowza管理画面→Applications→ Add ApplicationからApplicationを作成します。
![スクリーンショット 2019-11-06 14.45.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/f37a1b0a-1a65-5f18-4758-866a2fb5947d.png)

②LiveのLiveを選択します。

③作成したApplicationをクリックし、Stream Targetsを選択します。
![スクリーンショット 2019-11-06 14.45.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/e9233e19-7cc9-7434-ebb9-4d1e126064d1.png)

④Add Stream TargetからAdd Stream Target
![スクリーンショット 2019-11-06 14.52.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/65876ed9-a052-c8aa-9681-e716709151fe.png)

⑤今回はDestinationへのRTMPの再配信なので「Generic Target Destinations」のRTMPを選択
![スクリーンショット 2019-11-06 14.55.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/b43ac9c4-002e-3e46-1ab7-43f6f649dd6a.png)


⑥Destinationの情報を自分の環境に合わせて適宜に記入します。完了したら「Add this target」で追加します。

Stream Target Name: Ant Media Server
Source Stream Name: wowza　（OBSで指定したストリームキー）
Destination Application Name: WebRTCAppEE 
Destination Application Instance: antmedia　（このインスタンス名は
でAntサーバー上にて表示されます）
Destination Host: Ant Media ServerのパプリックIPアドレス　or ELB名
Destination Port: 1935
Destination Stream Name: test　（このストリーム名でAntサーバー上にて表示されます）
User Name: 今回は不要
Password: 今回は不要

![スクリーンショット 2019-11-06 15.20.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/9704d39d-8a41-c080-0e4e-1eaae4515a25.png)


⑦Targetを作成後、Stream Targetを有効化しないといけません。
![スクリーンショット 2019-11-06 15.32.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/2d50f3aa-c3b7-47cf-2a57-27afc70bda4d.png)

■有効化後
![スクリーンショット 2019-11-06 15.33.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/c8f2d691-1db7-8c71-eb12-ff5aab8955e3.png)

■有効化後にWowzaサービスの再起動が必要です。
![スクリーンショット 2019-11-06 15.33.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/60fdb4c7-beff-3444-4bcf-9b20f4368c13.png)


＊検証が安易になるため、ApplicationのSource Securityの設定で「RTMP Sources」をOpen（no authentication required）に変更します（Wowzaサービスの再起動が必要）

##OBSからRTMP配信をする
![スクリーンショット 2019-11-06 15.29.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/6b8e0ef1-d3a3-012d-08e2-282894ec1806.png)

#動作確認
■Wowzaサーバーでの確認：RTMPストリームが問題なくWowzaサーバーに到着した場合、Stream TargetのStatusがActiveに切り替わります。StatusがWaitingとなっている場合はOBSソフト -> Wowzaサーバーへの接続に問題がある、StatusがErrorの場合はWowzaサーバー -> Antサーバーへの接続に問題がある、という可能性が考えられるので設定に不備がないか再度ご確認下さい。
![スクリーンショット 2019-11-06 15.38.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/607727e0-e22e-fe3a-c3c6-66b273bca12a.png)

■Antサーバーでの確認：WebRTCAppEEのAPPLICATIONSでWowzaからのストリーム名が表示されていれば再配信は成功です。
![スクリーンショット 2019-11-06 15.37.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/a943bd0e-989a-1b91-225a-d5c0f206243f.png)

■ブラウザからWebRTC視聴をします。

URL: https:// Ant Media ServerのパブリックIPアドレス/WebRTCAppEE/player.html

![スクリーンショット 2019-11-06 15.49.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/42766f28-bad0-e912-1d12-cc3ffaa18943.png)


#遅延
遅延についてどれほどあるのか気になりましたので計測してみました。WebRTCにおける遅延は0.5秒〜1秒未満とのことですが上記構成でこのような結果となりました。超低遅延にまでは及ばないですが1秒ほどの遅延を実現させることができました！

![スクリーンショット 2019-11-08 10.23.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/a069af33-dfba-b0fb-da7d-09f383946cfc.png)

#結論
- WowzaのStream Targets機能を使えばライブストリーミングを別のDestination（複数でも可）に再配信させることができます。対応するプロトコルも豊富でMPEG-TS,RTMP,RTPなどサポートされています。
- 設定自体も簡単で自分で試したところ、特に苦戦した箇所はございません。
- AntサーバーのようにsourceとしてUDPをサポートしていない場合、WowzaからRTMPで再配信すればmpeg-ts/udp -> WebRTCを実現できます。こちらは近いうちにテストして記事にできたらなと思っております。

参考
https://www.wowza.com/docs/how-to-stream-to-another-wowza-streaming-engine-instance
https://www.wowza.com/docs/how-to-use-rtmp-to-distribute-live-streams
https://obsproject.com/ja