何をしたのか
- WebRTCゲートウェイ「Janus」をインストールし、サンプルを動かしてみました。
Janusとは
Janus: the general purpose WebRTC Gateway
- 汎用WebRTCゲートウェイ
- ビデオ通話などの機能はプラグインとして提供されている
- SFU/MCUなどもプラグインとして提供されている。
早速インストール
実行環境
- さくらのVPS
- CPU2コア
- メモリ1GB
- OS Ubuntu 16.04 LTS
依存パッケージをインストール
$ sudo apt-get install libmicrohttpd-dev libjansson-dev libnice-dev \
libssl-dev libsrtp-dev libsofia-sip-ua-dev libglib2.0-dev libopus-dev \
libogg-dev libcurl4-openssl-dev pkg-config gengetopt libtool automake
後述するドキュメントの生成を行うのであれば以下のパッケージもインストール
$ sudo apt-get install doxygen graphviz
WebSocketを使う
$ git clone https://github.com/warmcat/libwebsockets.git
$ cd libwebsockets
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" ..
$ make && sudo make install
janusのダウンロード、インストール
$ git clone https://github.com/meetecho/janus-gateway.git
$ cd janus-gateway
$ sh autogen.sh
コンパイル時のオプションを見てみる
$ ./configure --help
オプション | 意味 |
---|---|
--enable-docs | ドキュメントを生成 |
--enable-post-processing | 録画時に生成されるファイルをwebmなどに変換するツールの有効化 |
--prefix | インストールするディレクトリを設定 |
コンパイル
$ sudo ./configure --enable-post-processing --enable-docs --prefix=/usr/local
エラー発生
configure: error: Package requirements (
libsrtp >= 1.5.0
) were not met:
No package 'libsrtp' found
libsrtp2.0.0をインストール
$ wget https://github.com/cisco/libsrtp/archive/v2.0.0.tar.gz
$ tar xfv v2.0.0.tar.gz
$ cd libsrtp-2.0.0
$ ./configure --prefix=/usr --enable-openssl
$ make shared_library && sudo make install
気を取り直して再挑戦
$ sudo ./configure --enable-post-processing --enable-docs --prefix=/usr/local
またエラーが発生
No package 'libavutil' found
No package 'libavcodec' found
No package 'libavformat' found
sudo apt-get install libavutil-dev libavformat-dev
で不足しているパッケージをインストール
再々挑戦
$ sudo ./configure --enable-post-processing --enable-docs --prefix=/usr/local
$ sudo make
$ sudo make install
$ sudo make configs
これでインストールできました。
動かしてみた
- Video Roomを動かしてみた。
- 設定ファイルの最後の行を以下のように変更した。
/usr/local/etc/janus/janus.plugin.videoroom.cfg
record = true
rec_dir = /home/hoge/
- これで録画が有効になる
jsファイルの修正
/janus-gateway/html/videoroom.js
if(window.location.protocol === 'http:')
server = "http://" + window.location.hostname + ":8088/janus";
else
server = "https://" + window.location.hostname + ":8089/janus";
/janus-gateway/html/videoroom.js
var server = [
"ws://" + window.location.hostname + ":8188",
"/janus"
];
janus起動
$ /usr/local/bin/janus
- デーモンとして起動する場合
$ /usr/local/bin/janus -b --log-file=/var/log/janus.log --pid-file=/var/run/janus.pid
結果
- 1:1で通信
- 通信量は1人当たり約500kbps
- サーバー側のCPU負荷は2%/人くらい
録画したファイルをwebmに変換
$ /usr/local/bin/janus-pp-rec /home/hoge/videoroom-1234-user-video.mjr /home/hoge/sample.webm
- ファイルサイズは録画時間3分に対して、約4.6MBでした。
生成されたドキュメント
- ドキュメントは、
janus-gateway/docs/html/
にhtmlファイルが生成されます。
まとめ
- SFUはもう少し重いと思っていましたが、結構負荷は軽い印象でした。
- 片方向の配信であれば、100人程度は余裕でできそうな感じです。
- janusはかなり活発に開発が行われているうえ、slackの音声通話などでも利用されているらしいです。
- 意外と簡単に動かせたので、WebRTCで多対多の通信をしたいときに使ってみるとよいかと思います。(P2Pだと4~5人くらいで厳しくなってくる)