ローカルのネイティブアプリにWebRTCできるかNW.jsで実験
... そもそも何でこれ可能なんだろうな。。GoogleはTCP/UDPソケットを直接操作できるDirect sockets API https://github.com/WICG/direct-sockets/ を提案しているもののMozillaには却下 https://github.com/mozilla/standards-positions/issues/431 されている。
もちろん、ローカルにWebRTCできるのとTCP/UDPソケットが直接作成できることの間にはそれなりの溝はある(既存のアプリがimplicitに侵害されることが無い)。でも(HTTPSサイトの場合TLS強制なので)一応真面目な証明書を持っていないと繋がらないWebSocketと比べると大分距離があるような。。
ただDirect Sockets APIの必要性の提案を見てもピンと来るものは無かった。Webページ単体のMUAを作ることに何の意味が。。?シグナリングを経ないと接続できない = パーマネントなアドレスが無い ってのはそうかなとは思ったけど。
ひとまず、いきなりlibdatachannelで試すのではなく最初はNW.jsで力弱く試すのが良い気がしている。いやまぁElectronでも良いんだけど。。
まずはブラウザ同士
今回シグナリングサーバとしてはAyame laboを使ったけど、SDKのドキュメント https://openayame.github.io/ayame-web-sdk/modules.html が何故か中身が無くて試行錯誤することに。。
dataChannelだけを使う場合、
- 両端で
createDataChannel
する - 片方は非nullの返り値を得るので、それを
dataChannel
とする - もう片方は一旦
null
を受けるので、datachannel
イベントの発火を待って、それをdataChannel
とする
という処理が必要だった。
これをFirefox ←→ Edgeで繋いでみたところ edge://webrtc-internals/ (Edge側) や about:webrtc (Firefox側) を見た感じちゃんと繋がったようなのでまぁネイティブでも上手くいくでしょう。。ちゃんとローカルの 192.168.0.xxx を使って接続できているようだ。