Update: (2021.3.10) Kurento 6.16.0に対応
Ubuntu 18.04 LTS ServerをPCにセットアップして、Kurentoの2021年2月時点の最新版(v6.16.0)をインストールします。また、Mac上にKurento Clientのサンプルアプリケーションをインストールして動かしてみます。
Kurentoについて
KurentoはオープンソースのWebRTCメディアサーバーです。ビデオ通話やテレビ会議などのメディアストリーミング機能を持つWebアプリケーションを構築する仕組みを提供しています。Kurento以外にも、このようなWebRTCメディアサーバーには色々とありますがKurentoの特徴の一つは、MCUによるビデオ会議アプケーションの構築ができることにあると思います。
Kurentoの構成
Kurentoのシステムは、メディアストリームの処理を行うKurento Media Server(KMS)と、Kurento Media Serverの各種制御を行うKurento Clientから構成されます。
Kurento Media Serverは、メディアエレメントと呼ばれるオブジェクトをブロックのように数珠つなぎに接続して構成したメディアパイプラインを内部に作成します。個々のメディアエレメントは、WebRTCエンドポイント、オーディオ/ビデオミキサー、メディアレコーダーのような個別の機能を提供するモジュールです。Kurentoのメディアエレメントは、Gstreamerのエレメントがベースになっていて、独自のエレメントを作成して追加することも可能です。Kurento Media Serverは、エレメントやパイプラインの構築/制御などを行うAPIを提供していて、Kurento ClientからKurento Protocolと呼ばれるJSONメッセージにより制御することができます。
Kurento Media Server自体はC++/C言語で記述されますが、Kurento Clientは、JAVA、ブラウザ上のJavaScript、または、node.jsで記述されたサンプルが提供されています。
Kurentoを動作させる環境
Kurento Media Serverは、Ubuntu上で動作します。Kurento 6.16.0は、Ubuntu16.04LTSと18.04LTSでの動作が保証されています。ホストPCにDockerやVirtual Boxを使ってUbuntuの仮想環境を作成し、その上でKurentoを動作させることも可能ですが、KurentoをMCUで動作させる場合はCPUで映像/音声ストリームのトランスコーディングや合成処理を行うことになるので、そこそこのマシンパワーを割り当てる必要があるでしょう。
今回は、物理PC上にUbuntuとKurento Media Serverを動作させ、Kurento ClientはMac上で動作させる方法を試します。
Kurento Media Serverのセットアップ
Ubuntuのインストール
USBメモリにUbuntu 18.04 Server LTSをセットアップして動かす方法について説明します。詳細な手順は省いてポイントだけメモします。
-
USBメモリを準備
- インストールメディア用USBメモリ (Server版Ubunutuなら1GBもあればよい。今回は4GBを使用 )
- UbuntuをインストールするUSB (8GBもあればよさそう。今回は32GBを使用)
-
Ubuntuのダウンロード
-
ダウンロードしたISOイメージを書き込んだインストールメディア用USBを作成
- Macで作成したので、書き込みにはbalenaEtcherを使いました。(約3分)
-
インストールメディア用USBからPCを起動
- 念の為、SSDやHDDに誤って書き込んでしまわないように、PCのBIOS設定で内蔵のSSD/HDDをDisableしてから作業しました。
- SSHをEnableにしてGithubからpublic keyをインストールすると、起動後にSSHでリモートからログインが可能になります。ここでSSHを設定しない場合は、起動後に適宜SSHをインストールします
-
インストールする
- インストール終了後、インストールメディア用USBを抜いてPCを再起動(約5分)
-
Ubuntuの初期設定
-
SSHでリモートからログインできるようにする(インストール時に設定されていれば不要です)
-
プロンプトを整える
-
など
-
Kurento-media-serverのインストール
ここからは、Ubuntu Serverにログインしての作業になります。
Kurento Doc > Installation Guide > Local Installationに手順の記載されていますので、ここの手順通りにインストールを行っていきます。
インストールされてなければGnuPGをインストールします。
sudo apt-get update && sudo apt-get install --no-install-recommends --yes \
gnupg
Kurentoのリポジトリをシステムに追加します。今回は6.16.0をインストールするのでリポジトリとして、http://ubuntu.openvidu.io/6.16.0
を追加しています。
# Import the Kurento repository signing key
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5AFA7A83
# Get Ubuntu version definitions
source /etc/upstream-release/lsb-release 2>/dev/null || source /etc/lsb-release
# Add the repository to Apt
sudo tee "/etc/apt/sources.list.d/kurento.list" >/dev/null <<EOF
# Kurento Media Server - Release packages
deb [arch=amd64] http://ubuntu.openvidu.io/6.16.0 $DISTRIB_CODENAME kms6
EOF
kurento-media-serverをインストールします。
sudo apt-get update && sudo apt-get install --no-install-recommends --yes \
kurento-media-server
以上で、kurento-media-serverのインストールは終了です。このインストール方法はシステムへの初回のインストール時にのみ有効です。Kurentoバージョンアップを行う場合は、一旦今インストールされているkurento-media-serverを削除してから新たにインストールする必要があります。
kurento-media-serverの起動と停止
kurento-media-serverをインストールすると、システムサービスに登録されて自動起動されるようになっています。
ps -fC kurento-media-server
UID PID PPID C STIME TTY TIME CMD
kurento 6415 1 0 Feb02 ? 00:00:00 /usr/bin/kurento-media-server
プロセスを停止するときは、
sudo service kurento-media-server stop
プロセスを再開するときは、
sudo service kurento-media-server start
リブート後の自動起動を停止する場合は、
sudo systemctl disable kurento-media-server
自動起動を再設定する場合は、
sudo systemctl enable kurento-media-server
kurento-media-serverそのものをカスタマイズしたい場合は、自動起動とプロセスを停止して、手動で起動するようにしましょう。
kurento-media-serverのバージョン表示
kurento-media-serverを-v
オプション付きで起動すると、バージョンを表示することができます。
$ kurento-media-server -v
Kurento Media Server version: 6.16.0
Found modules:
'core' version 6.16.0
'elements' version 6.16.0
'filters' version 6.16.0
起動するときに読み込むmoduleのバージョンも表示されます。デフォルトでは'core'、'element'、'filters'というモジュールを読み込んで起動することがわかります。
MacにKurento Clientをセットアップする
Kurento Clientとして、Kurento Tutorialのアプリケーションを動作させます。公式のページ では、Ubuntuを前提にKurentoのTutorialを動作させていますが、Macでもほぼ同様の操作で動くようです。
KurentoのTutorialには、JAVA版、Browser JavaScript版、Node.js版の3種類がありますが、ここではサポートするサンプルアプリケーションの種類が多いJAVA版を動作させてみます。
JAVA版Tutorialのインストール
はじめに、Java JDKとMavenをインストールしておきます。入ってなければ、gitもインストールが必要です。
brew update
brew upgrade
brew install openjdk maven
次にJava版のTutorialのソースコードをダウンロードします。
git clone https://github.com/Kurento/kurento-tutorial-java.git
cd kurento-tutorial-java
git checkout master
kurento-tutorial-java
フォルダには、"Hello World"をなど数種類のサンプルコードがそれぞれのフォルダに収められています。
サンプルのHello Worldを動かしてみる
Hello Worldサンプルは、Kurentoを使ってブラウザからメディアトラフィックのループバックを試すサンプルアプリケーションです。
cd kurento-hello-world
mvn -U clean spring-boot:run \
-Dspring-boot.run.jvmArguments="-Dkms.url=ws://<Host Address>:8888/kurento"
<Host Address>
のところに、kurento-media-serverが動作するホストのIPアドレスまたはホスト名を記述します。初回だけ各種ライブラリをダウンロードするのでしばらく時間がかかります。
アプリケーションがエラーで終了してしまう場合は、kurento-media-serverとの通信がうまく行っていない可能性があります。ホストアドレスが正しいか、ホストとの通信ができるか、ホスト上でkurento-media-serverが動作しているかを確認してください。
次にブラウザ(chromeを推奨)をひらいて、https://localhost:8443
にアクセスします。途中、ブラウザからセキュリティ警告がでますが、無視してアクセスしてください。
真ん中にある緑のStartボタンを押すと、ループバック処理が開始されます。
次のサンプルであるmagic mirrorを動かそうとしてみる
Kurentoの公式Tutorialでは、次のサンプル・アプリケーションして"WebRTC magic mirror"というサンプルアプリが紹介されています。結論からすると、このサンプルアプリはUbuntu 18.04LTSにkurentoをインストールしたときは、うまく実行できません。動作させるには、KurentoをUbuntu 16.04LTS上で動作させる必要があります。
やってみようとすると、こうなります。動かし方はHello worldのときと同じで、サンプルアプリのフォルダに移動して、mvnコマンドで起動します。
cd ..
cd kurento-magic-mirror
mvn -U clean spring-boot:run \
-Dspring-boot.run.jvmArguments="-Dkms.url=ws://<Host Address>:8888/kurento"
ここまでは、問題なく動作するのですが、ブラウザからhttps://localhost:8443
にアクセスしてStartボタンを押しても映像が帰ってきません。こういうときは、kurento-media-serverのログを見て、何が起こっているかを確認してみましょう。
Kurentoのデバッグログを見る方法
kurento-media-serverはデフォルトでは、/var/log/kurento-media-server/ フォルダにログを出力します。一連の操作が完了してからここに記録されたログを参照してもよいのですが、kurento-media-serverをコンソールから起動すると、リアルタイムにログ情報が標準出力に出力されます。ログのレベルは環境変数GST_DEBUG
に記述して変更することができます。
一旦、service で起動しているkurento-media-serverを停止させて、環境変数の設定後にGST_DEBUGで設定できます。kurento-media-serverのホストにログインして以下を実行します。
# Ubuntuにログインして実行
sudo service kurento-media-server stop
export GST_DEBUG="1,Kurento*:5"
kurento-media-server
このようにデバッグレベルを指定してから起動するとKurento Protocol上での通信も含めてコンソールにログ情報が表示されます。もう一度、Macからmvnコマンドでサンプルアプリを起動して。ブラウザでhttps://localhost:8443
を開いてStartボタンを押します。ログを読むと以下のログが見つけられるでしょう。
OpenCV Error: Unspecified error (The node does not represent a user object (unknown type?)) in cvRead, file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/persistence.cpp, line 6628
原因は、Kurentoが古いUbuntuにのみ実装されたOpenCVの機能を使おうとしていてエラーになっているからのようです。(詳細は、こちらの議論を参照。)これを正常に動作させるためには、今のところ、古いUbuntuにKurentoをインストールし直すしかないようです。
正常に動くとこのように、人の顔を認識して頭の上に帽子の映像を重ね合わせてからループバックしてくれます。
ビデオ通話のサンプルを動かす
最後に1対1のビデオ通話のサンプルを動かしてみましょう。サンプルアプリは、kurento-one2one-call
フォルダの中にあります。起動の方法は同じです。
cd ..
cd kurento-one2one-call
mvn -U clean spring-boot:run \
-Dspring-boot.run.jvmArguments="-Dkms.url=ws://<Host Address>:8888/kurento"
ブラウザを2つ起動して、それぞれ、https://localhost:8443
にアクセスします。
それぞれのブラウザで名前を登録してから、通話したい相手の名前を入れて'Call'するとビデオ通話ができます。
また、同じLAN上の別のPCでブラウザを開いてKurento Clientが動作するホストIPアドレスを指定して、https://<ip address>:8443
にアクセスしてCallすると、離れたPCとのビデオ通話が可能です。
まとめ
UbuntuをセットアップしたPCにKurento Meida Serverをインストールしました。また、MacにKurentoクライアントのサンプルコードをインストールして動作させることができました。次回はKurentoの特徴であるMCUを使ったビデオ会議のサンプルを作成してみます。