メディアサーバーKurento+Node.jsを動かしてみる
概要
オープンソースのWebRTCメディアサーバー・KurentoをGCE上に構築し、チュートリアルを試してみました。 構築手順等を書いていきます。
動機
昨年末、社内のキャンペーンで使用する 生放送配信システムを自前で作ろうという話になりました。 当初、WebRTCを用いた1対多数の配信システムを手元のMBPで完結させて配信していた。 しかし、接続数が20を超えてくると配信しているMBPにかなりの負荷がかかった。 配信に駆り出された使用されていない老MBPはお死にになられました。 ということで、メディアサーバーを立てて、MCUを実現したいなと思ったのでとりあえず、勉強がてらKurentoを触ってみました。
Kurentoとは
KurentoはオープンソースのWebRTCメディアサーバーです。多人数でのテレビ会議や、生放送の配信などに使え、録画の機能もあるようです。JavaやJavaScriptをクライアントとして使用できます。内部はCで書かれているようです。 今回は、Node.jsでチュートリアルを動かしてみました。
KurentoとWebRTCに関して、こちらの資料が勉強になりました。
www.slideshare.net環境
GCE環境
マシンタイプ:n1-standard-1(vCPU x 1、メモリ 3.75 GB)
→ メディアサーバーと使用するにはスペック的にかなりショボいかと。。。
OS: Ubuntu 14.04 LTS (64 bits)
→ Kurento Media Serverを動かす必須環境のようです。
Kurento Media Server のインストール
echo "deb http://ubuntu.kurento.org trusty kms6" | sudo tee /etc/apt/sources.list.d/kurento.list wget -O - http://ubuntu.kurento.org/kurento.gpg.key | sudo apt-key add - sudo apt-get update sudo apt-get install kurento-media-server-6.0
kurento-media-serverが起動しています。
STUNサーバーの設定
STUNとは、異なるNAT環境下どうしでもWebRTCを実現する仕組みです。STUNサーバーはNATの外側から見える端末の情報(グローバルIPやUDPのポート)を教えてくれます。取得した自らの情報をシグナリングサーバーを用いて、端末間で交換します。今回、シグナリングサーバーは、後ほど出てくるNode.jsのサーバに含まれています。
STUNサーバに関しては、チュートリアルのページに利用可能なサーバーのIPとポートが掲載されていたので
、(http://www.kurento.org/docs/6.1.0/installation_guide.html)そちらを使用させていただきました。
下記ファイルを修正。
/etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini
stunServerAddress=54.172.47.69 stunServerPort=3478
TURNサーバーに関しては、設定していません。
Tutorial: Hello Worldを動かす
チュートリアルそのまま http://www.kurento.org/docs/6.1.0/tutorials/node/tutorial-1-helloworld.html
Node.jsとBowerのインストール
curl -sL https://deb.nodesource.com/setup | sudo bash - sudo apt-get install -y nodejs sudo npm install -g bower
チュートリアルのソースを落としてくる
git clone https://github.com/Kurento/kurento-tutorial-node.git cd kurento-tutorial-node/kurento-hello-world npm install npm start
この際、server.js
では下記のようになっているため、
GCEのインスタンスのポートを開けておく必要があります。
今回は、そのまま8443と8888を解放しました。
var argv = minimist(process.argv.slice(2), { default: { as_uri: 'https://localhost:8443/', // アプリケーション用 ws_uri: 'ws://localhost:8888/kurento' // シグナリング用 } });
https://<インスタンスのIP>:8443/
上記にアクセスし、start
をクリックすると、ウェブカメラからの映像とKurento Media Serverと通して配信された映像が映し出されるかと思います。start
を押しても映像が映らない場合は、一度stop
してもう一度試すと、映し出されました。
感想
その他のチュートリアルも触ってみたのですが、1対1、1対多数、多数対多数など、拡張性が容易そうです。 また、画像処理を含むチュートリアルを動かしてみると、配信の時間のズレがかなりあったので、サーバーのスペックがある程度必要そうです。