WebRTCをcordovaから使えるようにする PhoneRTCの紹介

このエントリはWebRTC Advent Calendar 2014 - Qiitaの20日目の記事です。

最初に断っておきますと、PhoneRTC使って何か作ってみようとしたんですが、ちょっと自分の実力及ばず、少ない期間でそこまではできなかったので簡単な紹介です。実際に何か作れたらまた紹介します。

PhoneRTC

さてさて、WebRTCは注目されている技術ではありますが、実際に使おうとすると、Safariではまだ使えなかったりします。

WebRTCが使えるブラウザ一覧

ここをなんとかするためには、PhoneRTCを初めとするWeemoとかそういったプラグインを使ってネイティブアプリにしてしまうという方法があります。

PhoneRTCはCordova plugin の一つで、cordova使っているWebViewアプリならWebRTCが使えるようにしようというプロジェクトです。

Install

実際にはPhoneRTCをinstallするには以下の様にします。
ちなみに言うとほとんどこの資料の翻訳です。

cordova をインストール

$ npm install -g cordova ios-deploy

cordovaのプロジェクトを作る

$ cordova create <name>
$ cd <name>
$ cordova platform add ios android
$ cordova platform add browser --usegit

これで cordovaのプロジェクトができるように成りました。

phonertc pluginを入れる

$ cordova plugin add https://github.com/alongubkin/phonertc.git

一旦phonertcプラグイン完成

この後で色々とやることがあります。

シグナリングサーバーを作る

PhoneRTCのAPIであるcallを実行すると、PhoneRTCはP2Pの接続を確立しようとします。それにはシグナリングサーバーが必要です。シグナリングサーバーはP2Pで接続確立するための必須要素であり、WebRTCを使ったサービスを作るためには必要なサーバーになります。

PhoneRTCはこのシグナリングにsocket.ioかSignalRを使うことを推奨しています。

試しにここではsokcet.ioを使ってみましょう。

socket.ioサーバーの実例はここに上がっています。

TURNサーバーを作る

TURNサーバーはP2Pでメッセージ交換するのに必要なサーバーになります。WebRTCではICEと呼ばれるプロトコルでSTUNサーバーに接続に行きますが、STUNが接続できない時はTURNサーバーに接続が行きます。

PhoneRTCでもこのTURNサーバーが必要なので、TURNサーバーを用意しましょう。

Amazon EC2Ubuntu インスタンスを作って、それをTURNサーバーにしましょう。セキュリティグループで以下のportに穴を開けておいてください。

TCP 443
TCP 3478-3479
TCP 32355-65535
UDP 3478-3479
UDP 32355-65535


SSHで接続して以下のようにしましょう。

$ sudo apt-get install rfc5766-turn-server

coturnにしたければ、

$ sudo apt-get install coturn

でもOKです。

そしたら /etc/turnserver.conf を以下のように設定しておきます。

listening-ip=<private EC2 ip address>
relay-ip=<private EC2 ip address>
external-ip=<public EC2 ip address>
min-port=32355 
max-port=65535
realm=<your domain>

以下の設定もコメントを外して有効にしておきます。

lt-cred-mech
fingerprint 

turnに接続するユーザーを用意しておきましょう。
/etc/turnuserdb.confを編集して、以下の様な書き方で定義しておきます。

username:password

TURN サーバーを起動するには以下のようにします。

$ sudo /etc/init.d/rfc5766-turn-server start

coturnなら以下の通り

$ sudo /etc/init.d/coturn start


ちなみに
phonertcのissueを読んでたら、STUNサーバーの接続で80%が賄えるものの、残りの20%位はTURNサーバーが必要になると言われています。
TURN server is strictly required or optional? · Issue #100 · alongubkin/phonertc · GitHub

STUNだけなら上記の設定は要りませんが、せっかくなのでTURNサーバーも用意しておきました。

次回は実際にPhoneRTCで何かを作ってみます!