Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
34
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@sublimer

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

何をしたのか

  • 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人くらいで厳しくなってくる)
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
34
Help us understand the problem. What are the problem?