Help us understand the problem. What is going on with this article?

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人くらいで厳しくなってくる)
sublimer
諸事情により、記事は全てはてなブログに移行しました。 All articles has moved to hatena blog due to various reasons.
https://sublimer.hatenablog.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした