JavaScript
nodejs
WebRTC
Kurento

Node.js版Kurento GroupCallを使ってみた

はじめに

WebRTCのSFU/MCUであるKurentoには、公式のサンプルがいくつかあります。
その中に、複数人でビデオ会議を行うGroup Callというものがあるのですが、Javaで書かれたものしかなく、また、SFU版のサンプルしかありません。
先日、kurento-group-call-nodeという有志の方が作ったサンプルを見つけたので使ってみたところ、あっさりと動いたので動かし方などを書こうと思います。

実行環境

  • さくらのVPS
    • CPU2コア
    • メモリ1GB
  • OS Ubuntu 16.04 LTS
  • Firefox 59.0.1 64bit

使用ソフトウエア

Node.jsとnpmを使うので、事前にインストールしておいてください。

Kurento Media Serverのインストール

以下のドキュメントにまとまっています。
Kurento Installation Guide - Kurento 6.6.2 documentation

REPO="xenial"
echo "deb http://ubuntu.kurento.org $REPO kms6" | sudo tee /etc/apt/sources.list.d/kurento.list
wget http://ubuntu.kurento.org/kurento.gpg.key -O - | sudo apt-key add -
sudo apt-get update
sudo apt-get install kurento-media-server-6.0

コマンドを順番に実行すればインストールできます。

設定ファイル修正

STUNサーバーの設定をします。

/etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini
stunServerAddress=74.125.23.127
stunServerPort=19302

今回はGoogleが提供しているサーバーを設定しました。

kurento-group-call-nodeのダウンロード

Githubからリポジトリをクローンします。

git clone https://github.com/chapin666/kurento-group-call-node.git
cd kurento-group-call-node

SFU版とMCU版を選ぶ

git checkout sfuでSFU版になります。git checkout mcuでMCU版になります。
両方を使えるのは素晴らしいですね!

Nodeパッケージをインストール

まず、bowerをグローバルインストールしてください。

sudo npm install -g bower

次に、以下のコマンドを実行してください。

npm install
cd ./server/static
bower install

接続するサーバーの設定

./server/index.jsを以下のように修正してください。

./server/index.js
const argv = minimst(process.argv.slice(2), {
    default: {
        as_uri: 'https://<server address>:3000',
        ws_uri: 'ws://<kurento address>:8888/kurento'
    }
});

ここは自分の環境に合わせてください。

実行

以下のコマンドでサーバーが起動します。

node index.js

もしもエラーなどが出る場合は、Kurentoを再起動してください。

sudo service kurento-media-server-6.0 restart

実行結果

SFU版では1:1の通信でCPU使用率が5%前後でした。50~60人くらいは通信出来そうな印象です。
一方、MCU版だと1:1の通信でCPU使用率は100%でした。映像ストリームを合成しているだけあって、負荷は結構大きいです。
受信ストリームを1本だけにしたい場合以外はSFUを使ったほうがよいかと思います。

まとめ

Kurentoはサンプルが豊富で、ドキュメントが充実しているところが気に入っています。
Janusなどと比べると、最近は開発が活発ではないようですが、ふわっちなど、結構いろいろな場所で使われているようなので、今後も頑張ってほしいです。

おまけ

今回使用したkurento-group-call-nodeには、なんとモバイルクライアントがあります!(まだ使ってみていません)
kurento-group-call-react-native
React Nativeで書かれているので、iOSでもAndroidでも動作するようです。
モバイルクライアントまで作っているのは、本当に素晴らしいと思います。