WebRTCをcordovaから使えるようにする PhoneRTCの紹介
このエントリはWebRTC Advent Calendar 2014 - Qiitaの20日目の記事です。
最初に断っておきますと、PhoneRTC使って何か作ってみようとしたんですが、ちょっと自分の実力及ばず、少ない期間でそこまではできなかったので簡単な紹介です。実際に何か作れたらまた紹介します。
PhoneRTC
さてさて、WebRTCは注目されている技術ではありますが、実際に使おうとすると、Safariではまだ使えなかったりします。
ここをなんとかするためには、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 EC2 の Ubuntu インスタンスを作って、それを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で何かを作ってみます!