やりたいこと
監視カメラなどの映像をスマートフォンで確認する場合、カメラのIPアドレスを指定したり、WebRTCを利用したりしてP2Pで直接メディアストリームを受信する方法が利用できます。ただ、カメラ映像を複数ユーザーが同時視聴したい場合、ネットワークやカメラのスペック上難しい場合がありサーバーで経由する必要があります。
今回はStreaming ServerをAWS上に立ててサーバー経由でのライブストリーミングを試作し、遅延時間を実測してみたいと思います。
Streaming Server
以下にStreaming Serverの比較が掲載されている。
https://en.wikipedia.org/wiki/Comparison_of_streaming_media_systems
今回は対応プロトコルが多いWowza Streaming Engineを利用して試作を行う。
https://www.wowza.com/
Wowza Streaming Engineの立ち上げ
Wowzaのページで試用版のライセンスを購入します。アカウントの作成が必要です。
https://www.wowza.com/free-trial
登録が完了すると以下のようなメールでライセンスキーが発行されます。
Market Placeで"Wowza"と入力して検索。
https://aws.amazon.com/marketplace
試用ライセンスを利用するので、2段目の"Bring Your License”を選択します。
セットアップウィザードを進めて、デフォルトでインスタンスを起動。デフォルトではWowzaで推奨の"m3.large"が選択されます。
Wowza Streaming Engineの設定
http://[EC2のPublic DNS]:8088/enginmanagerで設定画面に接続可能です。
初期IDは"wowza"、パスワードは起動したインスタンスのID(i-xxxxxx)となります。
ログイン直後にSouce Authenticationの設定が求められると思います。これは、カメラが映像をStreaming Engineに送信するための認証設定で後に必要となります。設定した情報は、Sever -> Source Authenticationで確認できます。
Applicationを選択し、Liveを選択します。今回はiPhoneをカメラとして利用しますので、GoCoderを選択し、Host Server / Host Portの情報を確認しておきます。
GoCoderの設定
iPhoneもしくはAndroidでGoCoderアプリケーションをインストールします。アプリケーション起動後にWowza Streaming Engineの以下の3項目の設定を入力して下さい。
- Host - 先ほど確認したサーバーのIPアドレスとポートナンバー
- Application - liveとストリーム名を選択
- Source Authentication - 先ほど設定したユーザ名とパスワード
上記の設定完了後に赤丸を押して配信を開始して下さい。
動作確認
まずRTMPのストリームが1本入っていることを確認します。
右上のTest Playersを選択し、About HLSを選択するとURLが表示されるので、URLでブラウザで確認します。そうするとライブ映像の確認ができました。
遅延時間の計測
両方向のネットワークがLTEであることもありますが、Camera ==RTMP==> Wowza Streaming Engine ==HLS==> Web Browserの経路ではほぼ40秒の遅延があることがわかりました。
HLSの場合もともと通信の安定性を考慮したプロトコルで低遅延のプロトコルではありません。10秒ごとのチャンクに切られて、遅延が15秒から45秒という仕様通りの挙動が確認できました。
HLS以外のプロトコルを選択することで遅延は減らせられそうです。以下のWowzaのページにも詳細が記述されています。RTMPもしくはWebRTCを選択するということになりそうです。