Edited at

WebRTCゲートウェイ「Janus」を使ってみた

More than 1 year has passed since last update.


何をしたのか


  • 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人くらいで厳しくなってくる)