問題タブ [rtcpeerconnection]

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.

0 投票する
0 に答える
24 参照

javascript - RTCDataChannel は正常に開きますが、実際には開いていません

クローズ イベントを発行する先行データ チャネルに応答して、RTCDataChannel を再度オープンしようとしています。

多くの場合、新しいチャネルを開くことができない場合があることを理解しています。createDataChannelこの場合、失敗するだろうと思っていました。または、iceConnectionState失敗を示すように変化し、接続をリセット/放棄することができました。

2 つのブラウザー タブを使用して、このロジックをテストしました。まず、2 つのタブでチャネルを開くことができます (ネゴシエーションが成功し、チャネルが開き、データ転送がサポートされます)。次に、1 つのタブを閉じます。残りのピアのチャネルは期待どおりに閉じますが、私の楽観主義はcreateDataChannel成功し、新しいチャネルはopenイベントを発行します。ピアが接続されていなくても、チャネルを介して無期限に送信できます (データはどこにも行きません)。readyStateも残ってい"open"ます。これは、他のタブが閉じられた数分後に当てはまります!

なぜこのチャネルが正常に開かれたのか途方に暮れています。ピアが閉じられた後もそれiceConnectionStateが残っていることに気付きました。disconnectedこれは、failed将来の候補の到着を除外する方法がないため、状態に決して到達しない Chromium のバグに関連しているようです。ただし、iceConnectionStatedisconnected.

ピア接続が のときにデータ チャネルを作成できるのはなぜdisconnectedですか? .send()エラーが発生しないのはなぜですか? 接続が の場合、どうすればopenチャンネルを取得できdisconnectedますか? この状況を回避する最善の方法は何ですか?

ありがとうございました!

Chrome 89.0.4389.76 でテスト済み