nest: `_blank` 経由で https ←→ http 通信できるか検討
WebRTCのためのシグナリングには主にWebSocketが使われる。しかし、WebSocketはsecure contextを持つoriginからは wss://
なTLS経由のソケットしか張れず、このためには通信先が PKI的に セキュアである必要がある。
実際にはWebRTCのシグナリングにWebSocket必須であるということは無く、(ブラウザから操作可能な)任意のトランスポートを使える。
で、トランスポートとして、URLのhash部分を経由して httpsなサイトから _blank
な a
を開く → https → http → https → ... のようにピンポンする通信が使える気がする。httpsのサイトに戻るたびに、Session storageにデータを書き込み、 storage
イベント を待ち合わせることで遷移を進められる。
WHIP や WHEP ではダメなの?
WHIP/WHEPは POST
起点なので https サイトから http サイトに仕掛ける良い方法が無い。
単純な遷移はできた
window.location.href
を書き換えるとページとhashの両方を書き換えられる & この遷移には特に制約は無いようだ。Hashは(現代的なブラウザであれば)50kは行けるらしいので、
Hash部分に署名したjsonを入れても十分に余裕のあるサイズだろう。
JWSしてICE candidateを送りたい
まぁnode-joseで適当に。。
... Trickle ICEって無効化できないのかな。。
一旦 Gather が終わるまで待ってみる
onGatheringStateChange
のハンドラを書いて、 "complete"
になるまで待ち合わせるようにしてみた。ブラウザのWebRTCだとその時点のSDPを取ってそのまま返却すれば良いんだけど、 node-datachannel
にはその機能が無いっぽいのでcandidatesは一旦配列に貯めてブラウザ側で解釈する方向にした。
ちゃんと配列になっている。