socket.ioとwebRTCでビデオチャット

現在作成したいものがあるために、その予行演習として
nodeのsocket.ioとwebRTC機能を使ってルーム機能付きビデオチャットを作成しています。

現在見た目のセンスのなさと白黒っぷりを無視すれば概ね完成しています。
あとは退室時にwebRTCのPeerConnectionによって接続されたクライアントのマッチング表を更新する作業が残っています。

一旦動作する形になったらまとめて役に立つ形でまとめたいと思っているところです。
やっぱり動くし映像出るので楽しいです。
自分の顔が映るだけなので、微妙な感じもしますけどね。

毎日1〜2時間でコツコツ作業しています。

socket.ioのことを当時あまり知らなかった僕は無駄な実装を多くしていたことを知りました。
冷静に考えれば当たり前なんですけどね、思考停止しすぎていましたね。
便利だと思った機能としては以下

・socket.set("name", value)形式のsetterがある
・socket.idでユニークなidが取得出来る
・room機能がある
・broadcast/multicast機能が備わっている

自分でソケットなど管理用のクラス(っぽいもの)を作成していたり
ユニークIDを生成する関数を作ったり
特定のグルーピングを自分でしたり
その中の人に通信することを自前で作ったり
上記機能を簡易ではありますが、自分で頑張ってたのでとっても無駄な時間を過ごしました。

またルーム内の人を一覧したりと基本的に管理したいデータには当然ながらアクセスできます。

唯一僕の理解力がたらずに良く分からないのが、getterがcallback型なこと。
socket.get("name", function(err, data){
})
という形なんですよねぇ。普通に値をくれればいいのにね?
そして第一引数は現在さらっと無視しています。そのうち調べます。

またwebRTCというウェブ上を探すと、役に立ちそうで微妙に役に立たない情報ばかりでてくる技術。
これもおいおい備考録したいところです。

peerConnectionにstreamをaddするタイミングが微妙に気持ち悪かったりしました(僕は
コネクションが成立してからそこにストリームを追加すると思いきや、それだと通信が上手く確率できないというか、映像が送れなかったりしました。
最初っから追加しておくものみたいです。

また、微妙に良く分からなかったのが
getUserMediaで起動したマイクやカメラの止め方。
探してもあまり出て来ないのでapiを見たところ,stopという関数がありました。
そのまんまですね。

getUserMediaで取得したstreamオブジェクトに対して
stream.stop()でカメラが停止します。
感覚的に気持ち悪いと感じたのは僕だけなんですかね。
ストリームはストリームであってカメラオブジェクトじゃないですからね。
気にしたら負けでしょうかね。もしくはなんか考え方が違うか。

将来的にはSTUNサーバを自分で構築したいです。
googleさんが公開してるサーバが止まったら困るので。