问题标签 [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 数据通道不适用于多连接
我用数据通道编写了一个 webRTC 连接脚本。我只想为我的应用程序使用数据通道。当我一对一连接时,这工作正常。如果我使用多个连接,则不会创建数据通道。
例如:假设User A
,User B
并User C
已连接到应用程序。连接时数据通道工作正常User A -> User B
。在此连接之后,如果我尝试过,User A -> User C
则数据通道不会在User C
侧面打开。这是我目前面临的问题。
这是用于 webRTC 连接和数据通道创建的代码。
数据通道回调是
创建数据通道的函数
创建报价
为报价创建答案
设置 ICE 候选和答案
通过以下方式向对等用户提供要约的步骤
用户
- 创建 RTC 对等连接对象
peerConnection
creating_data_channel()
通过调用函数创建数据通道create_offer_to_user()
通过调用函数创建报价
对等用户
- 收到 offer 请求后,peer 将通过
create_answer_for_user()
函数创建答案。
每次与对等方连接后,我都会按dataChannel.close()
方法关闭数据通道。
在双方 ICE 和 Answer 将通过update_ice_candidate()
和received_answer_from_user()
功能完成
这可以按预期进行User A -> User B
连接。我可以在用户 A 和用户 B 中看到浏览器控制台日志消息dataChannel.OnOpen
(我对用户和对等方都使用 Firefox。)但是当我连接时,我只能在用户 AUser A -> User C
中看到控制台日志消息。不在用户 C 中。dataChannel.OnOpen
最初我收到了一些与 ICE 相关的其他错误。那是
和
我已经iceRestart
在报价中修复了这些错误。
在此修复后,我看不到该错误,但现在数据通道未在另一侧打开。
现在我怀疑 ICE 候选人流程。代码有问题吗?为什么这适用于user A->B
而不适用于user A->C
?请问有什么建议吗?
javascript - 使用 DataChannel 时 WebRTC ICE 失败
我正在构建一个需要对等 2 对等通用数据进行通信的应用程序,而 webRTC 似乎是一种不错的方法。但是,当尝试与 DataChannel 建立 p2p 连接时,我不断遇到特定网络上的 ICE Candidate 失败。但在同一个网络上,MediaChannel p2p 连接工作正常。
即使在以下 repo 的最小改编中, https://github.com/fireship-io/webrtc-firebase-demo,datachannel变体也不起作用。
怀疑它与 TCP 而不是 UDP 有关,但不允许 tcp 候选者并不能解决问题。
DataChannel 不起作用但 MediaChannel 起作用的原因是什么?该网络是大学公共网络。我们使用 firebase 作为信号服务器。谷歌 STUN 服务器。
HTML 由 callButton 组成,它将 ICECandidates + offer 推送到信令服务器,并生成一个 ID,该 ID 可用于通过 answerButton 从不同的实例进行连接。
处理大部分 webRTC 连接的 js 片段,其中pc
是 RTCPeerConnection 实例:
DataChannel 不起作用但 MediaChannel 起作用的原因是什么?
webrtc - 是否可以仅在对等调用 CreateAnswer 时调用 CreateDatachannel?
我正在编写一个使用 webrtc nativeapi 与浏览器通信的程序,浏览器发起一个提议,我的程序回答它。
在我的需要中,浏览器端不发送任何流,我不希望浏览器端调用 CreateDataChannel函数,它只提供一个报价,然后等待,等待我的程序中只有一个数据通道。
问题是:在我的程序中,当接收到报价消息时,它首先调用 CreateDatachannel,然后处理报价消息,调用 SetRemoteDescription 和 CreateAnswer。这不起作用,我的数据通道没有成功建立,数据通道的状态保持在状态。在connecting
浏览器端,ondatachannel 事件从未调用过。
那么,CreateDatachannel 是否只能在 CreateOffer 端调用?
编辑:这是我创建的程序的报价:
PS:如果浏览器端调用 CreateDatachannel 创建一个虚拟数据通道,一切正常,浏览器 ondatachannel 事件被触发,它可以从我的程序接收消息。
代码非常简单。我的程序,创建对等连接和数据通道:
工艺报价:
浏览器端:
node.js - 使用 DataChannel 的 NodeJS WebRTC 应用程序在生产服务器中不起作用
我使用 NodeJS 和 WebRTC 创建了一个简单的点对点应用程序,用于一对多直播应用程序。
到目前为止,它正在我的本地主机上运行,但是当我将应用程序部署在 Google Cloud Platform 上的生产 VM 服务器上时,我无法使用peer.createDataChannel()
. 或者至少这是我看到的问题,因为它没有抛出任何错误。
服务器.js
流光.js
在我的本地主机上,当主机 ( streamer.js
) 启动流媒体时,服务器Host: Data Channel Opened
在控制台和主机的浏览器上输出,我看到了带有消息的 toast Server: Peer-to-peer data channel has been created.
。但是,当我在生产服务器上尝试应用程序时,服务器不会在控制台上记录该应用程序,并且主机的浏览器也不会打开 toast 并显示数据通道已创建的消息。
浏览器控制台和服务器控制台都没有错误,所以我真的不知道问题出在哪里。
webrtc - 清除 WebRTC 数据通道队列
我一直在尝试将 WebRTC 数据通道用于游戏,但是,在玩 50-70 秒后,我无法在不达到队列大小限制 (8KB) 的情况下持续发送实时玩家数据。
因为数据需要是实时的,我对乱序的数据没有用处。我已经使用以下属性初始化了数据通道:
MDN 文档说缓冲区不能以任何方式更改。
无论如何我可以在不超过缓冲区空间的情况下持续发送数据吗?我不介意清除缓冲区空间,因为它只包含随时间阻塞的数据。
注意:数据一直在传输,直到缓冲区大小超过 8KB 空间。
编辑:我忘了补充一点,这个问题只有在双方位于不同的网络上时才会发生。当两者都在同一个局域网内时,没有缓冲(我想是因为带宽更高)。我尝试添加多个数据通道(8 个并行)。然而,这只增加了故障再次发生之前的时间。所有 8 个缓冲区都已满。我还尝试在每次缓冲区接近满时创建一个新通道,并在关闭前一个已满的 DC 时切换到新的 DC,但我发现缓冲区空间是困难的方式(阅读MDN Docs中的注释)不会立即释放,而是尝试传输缓冲区中的所有数据,从而占用宝贵的带宽。
提前致谢。