1. 目的
- AWS Wavelengthのメリットは低遅延での通信が可能となること。「低遅延」がイメージできるようなサンプルアプリケーションとして、WebRTCでのビデオ通信などを実現できるソフトウェアである「Janus」をインストールし動作を確認する。
- 無償でWebRTCが試せるソフトウェアを探していたところ、「仕事で WebRTC」というサイトがあり、有償/無償版のソフトウェアの一覧が掲載されていた。無償版のおすすめは「Janus」ということで、それを信じてやってみることとした。
2. やったこと
- AWS Wavelength 上に EC2 インスタンスを作成し、Janus をインストールする。
- 複数のPCやスマホから Janus サーバに接続し、相互にビデオ通信ができることを確認する。
- 単純にEC2インスタンスにJanusをインストールしただけのため、この記事の内容はAWS Wavelengthではなく、AWSの通常のリージョンでも同様に実現可能。
3. 構成図
4. 実施手順
4.1 事前準備
- 構成図のようなインフラ環境を準備する。
- VPC作成
- Wavelength Zoneに紐づくSubnet作成
- Wavelength Zoneで起動するUbuntu 20.04 のEC2インスタンス作成
- EC2インスタンスへのキャリアIP付与
- SecurityGroupの設定(検証のためフルオープン。UDPのポート番号が動的なため)
4.2 Janusの構築
- 公式の導入手順もあるが、「Janusで自前のWebRTCビデオチャットサーバー」が非常に分かりやすいため、基本的にこのサイトの手順に沿ってそのまま実施する。
- 上記のサイトの手順通りに、作成したインスタンス上で以下のような内容を実施する。
- 各種ライブラリ、及びJanusそのもののインストール
- nginx、自己署名証明書の設定
- Janusのhttps対応設定
- AWS上で利用する場合、上記までの手順に加えて、インスタンスに付与されているプライベートIPと、キャリアIPとのマッピングの情報をJanusに対して設定する必要がある。「Setting up Janus WebRTC on AWS」を参考に、Janusの設定ファイル /opt/janus/etc/janus/janus.jcfgの301行目、nat_1_1_mapping = "x.x.x.x" のところに、インスタンスに付与したキャリアIPを設定する。
/opt/janus/etc/janus/janus.jcfg(該当行付近)
# if the Janus is deployed in a DMZ between two 1-1 NAT for internal and
# external users.
nat_1_1_mapping = "x.x.x.x(インスタンスに付与したキャリアIP)"
- Janus を起動する。
$ sudo /opt/janus/bin/janus
4.3 動作確認
- PC(Windows10, auスマホでテザリング)のブラウザから、https://(キャリアIP) にアクセスする。自己署名証明書を使用しているため、「接続がプライベートではありません」のような警告が表示されるが、了解の上アクセスする。
- いくつかのDemo用ツールがデフォルトで用意されているが、「Video Room」が分かりやすい。メニューから 「Demos -> Video Room」 を選択する。
- 「Start」を押してビデオ会議を開始する。
- 参加者名(今回はpcuser)を入力して、「Join the room」を押す。
- 成功すると、「Local Video」として、自分のPCカメラの映像が表示される。もし「Probably a network error, is the server down? [object Object]」というエラーが出る場合、https://(キャリアIP):8089/ に手動でアクセスし、再度自己署名証明書の警告を出して、了解のアクセスをする。(Janusのアプリにアクセスするところからport番号が変わるため、自己署名証明書に対する承認が再度必要になる場合がある)
- スマホからも同じようにアクセスすると、PC側にスマホ側の映像が出る。ビデオ会議のように、相互に映像や音が伝送されることを確認できる。
5. 所感
- WebRTCでの映像伝送の雰囲気が分かるような環境は作ることができた。画面をカスタマイズするなど、もう少し工夫ができるようにしたい。