問題タブ [rtcdatachannel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - WebRTC DataChannel は、Google Chrome で常に「接続中」になっています
webRTC データチャネルを使用して (2 つのクロム タブで) 2 つのローカル ピア間でデータを交換しようとしていますが、常に「接続中」状態のままです。ただし、すべてスムーズに動作するのはFirefoxです。
ここで同様の質問を見つけました-webRTC datachannel is not working in chrome62 but still no working solution
ここに私のコードスニペットがあります:
ボタンをクリックすると、次のエラーが発生します。
Uncaught DOMException: 「RTCDataChannel」で「send」を実行できませんでした: RTCDataChannel.readyState は HTMLButtonElement で「開いていません」
ここでも、すべてが Firefox で問題ありません。chrome://webrtc-internals/機能があるため、現在 chrome を使用していました
javascript - RTCDataChannel は正常に開きますが、実際には開いていません
クローズ イベントを発行する先行データ チャネルに応答して、RTCDataChannel を再度オープンしようとしています。
多くの場合、新しいチャネルを開くことができない場合があることを理解しています。createDataChannel
この場合、失敗するだろうと思っていました。または、iceConnectionState
失敗を示すように変化し、接続をリセット/放棄することができました。
2 つのブラウザー タブを使用して、このロジックをテストしました。まず、2 つのタブでチャネルを開くことができます (ネゴシエーションが成功し、チャネルが開き、データ転送がサポートされます)。次に、1 つのタブを閉じます。残りのピアのチャネルは期待どおりに閉じますが、私の楽観主義はcreateDataChannel
成功し、新しいチャネルはopen
イベントを発行します。ピアが接続されていなくても、チャネルを介して無期限に送信できます (データはどこにも行きません)。readyState
も残ってい"open"
ます。これは、他のタブが閉じられた数分後に当てはまります!
なぜこのチャネルが正常に開かれたのか途方に暮れています。ピアが閉じられた後もそれiceConnectionState
が残っていることに気付きました。disconnected
これは、failed
将来の候補の到着を除外する方法がないため、状態に決して到達しない Chromium のバグに関連しているようです。ただし、iceConnectionState
がdisconnected
.
ピア接続が のときにデータ チャネルを作成できるのはなぜdisconnected
ですか? .send()
エラーが発生しないのはなぜですか? 接続が の場合、どうすればopen
チャンネルを取得できdisconnected
ますか? この状況を回避する最善の方法は何ですか?
ありがとうございました!
Chrome 89.0.4389.76 でテスト済み