LoginSignup
55
39

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-08-07

何をしたのか

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
39