WebRTC

WebRTCを調べてみた

More than 1 year has passed since last update.

※自分の調査メモ

自分のプライベートIPの確認

↓このサイトにアクセスすると、自分のプライベートIPアドレスが分かります。
http://ip-api.com/
普通、プライベートIPは分からないはずなのにどうやっているのか?
WebRTCが使われています。
このip-api.com、githubでソースが公開されており、なんとシングルページのhtmlです。
https://github.com/vladc/ip-api.com
source.htmlの中のget_internal()という関数でプライベートIPを取得しています。

2者間でカメラの映像をやり取りする

simpleWebRTCというライブラリを使うとムチャクチャ簡単にできます。
https://simplewebrtc.com/
このページのトップに書かれているわずかなhtmlとJavaScriptをコピペするだけ。
(htmlはhttpsのサイトに置かないとカメラが使えないので注意)

ただし、プロダクションで使うにはSTUNサーバやシグナリングサーバを自前で立てる必要があり、そこが面倒そうです。
simplewebrtcのデフォルトで設定されているのはこれ:
シグナリングサーバ:https://github.com/andyet/signalmaster
STUN&TURNサーバ:https://github.com/otalk/restund

TURNサーバのホスティングもあるらしい。
https://xirsys.com/simplewebrtc/

テキストチャットのデモ

デモ
https://www.webrtc-experiment.com/text-chat/
ソースコード
https://github.com/muaz-khan/WebRTC-Experiment/tree/master/text-chat

Atomのteletypeをパケットキャプチャしてみたところ

WebRTCは基本的にUDPベースです。
片方のAtomでキーを入力する度にパケットが送られているようです。そのとき必ず応答パケットも送られるので、ACKをしてるのだと思います。
UDPはパケットの到達順序も保証されないですが、SCTP(UDP+TCPみたいなもの)を使っているので、到達順序は保証されるようです。

teletypeのソースをgrepしてみたところ、必ず使っているはずの RTCPeerConnection などがありませんでした。atom本体の方に組み込まれているのだろうか?

同一LAN内のマシンで通信する場合

STUNによるNAT越えの説明を読む限り、一度ルータを出てグローバルIPを使って通信しそうと思ったのですが、ちゃんとプライベートIPで通信していました。

For More Info

WebRTC Advent Calendarが参考になりそう
https://qiita.com/yusuke84/items/286f569d110daede721e