Open2

ローカルのネイティブアプリにWebRTCできるかNW.jsで実験

okuokuokuoku

... そもそも何でこれ可能なんだろうな。。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と比べると大分距離があるような。。

https://discourse.wicg.io/t/filling-the-remaining-gap-between-websocket-webrtc-and-webtranspor/4366

ただDirect Sockets APIの必要性の提案を見てもピンと来るものは無かった。Webページ単体のMUAを作ることに何の意味が。。?シグナリングを経ないと接続できない = パーマネントなアドレスが無い ってのはそうかなとは思ったけど。

ひとまず、いきなりlibdatachannelで試すのではなく最初はNW.jsで力弱く試すのが良い気がしている。いやまぁElectronでも良いんだけど。。

https://www.electronjs.org/ja/docs/latest/development/electron-vs-nwjs

okuokuokuoku

まずはブラウザ同士

https://codepen.io/okuoku/pen/mdjEbbe?editors=0010

今回シグナリングサーバとしてはAyame laboを使ったけど、SDKのドキュメント https://openayame.github.io/ayame-web-sdk/modules.html が何故か中身が無くて試行錯誤することに。。

dataChannelだけを使う場合、

  1. 両端で createDataChannel する
  2. 片方は非nullの返り値を得るので、それを dataChannel とする
  3. もう片方は一旦 null を受けるので、 datachannel イベントの発火を待って、それを dataChannel とする

という処理が必要だった。

これをFirefox ←→ Edgeで繋いでみたところ edge://webrtc-internals/ (Edge側) や about:webrtc (Firefox側) を見た感じちゃんと繋がったようなのでまぁネイティブでも上手くいくでしょう。。ちゃんとローカルの 192.168.0.xxx を使って接続できているようだ。