问题标签 [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.

0 投票
1 回答
687 浏览

socket.io - Socket.io vs RTCDataChannel,作为信令服务器?

我是新来的 !

我正在为需要文本+视频聊天的聊天应用程序工作。我最初探索了Socket.io,发现开发基于文本的聊天应用程序 (WEB) 非常方便。

在探索视频聊天元素时,我遇到了WebRTC -RTCDataChannel用于跨连接的对等方发送任意数据。

我的聊天服务器(最好是 NodeJS)将为对等方提供连接,同时保存文本聊天历史记录。

困惑

我也应该使用Socket.io -MyChatServer 作为信令服务器吗?[可能吗?],或者

我应该使用 RTCDataChannel 作为信令服务器吗?, 或者

只需忘记 Socket.io 并为两者考虑 WebRTC!

提前致谢 :)

0 投票
1 回答
66 浏览

error-handling - 何时调用 RTCDataChannel.onerror?

我正在制作一个使用 WebRTC 传输数据的程序。我想实现 RTCDataChannel.onerror 因为我想处理一个错误事件。

我阅读了下面的文档,但解释是模棱两可的。我想要有关该错误的更多具体信息。我想知道调用此方法时会发生什么。

https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel/onerror

0 投票
2 回答
2803 浏览

webrtc - WebRTC 信道可靠性

我想检查一下我对 WebRTC 数据通道的理解是否正确,特别是可以通过改变字典的ordered&maxRetransmitsmaxPacketLifeTime属性来实现的不同类型的通道。RTCDataChannelInit我的以下假设是否正确:

  1. 创建一个可靠有序的通道,如 TCP,但基于消息而不是流:
  1. 创建一个可靠无序的通道(应该maxRetransmitsmaxPacketLifeTime也应该指定以实现可靠性?)
  1. 创建一个不可靠无序的通道,例如 UDP
  1. 创建一个不可靠“有序”的通道,即如果在较晚的消息之后到达,较早的消息将被丢弃
0 投票
1 回答
3152 浏览

javascript - 带有手动信令的 WebRTC 数据通道,请举例?

我真的很难获得一个 WebRTC 数据通道示例的完整示例,我可以复制/粘贴它并且它可以工作。

我想要一个带有手动信令的 WebRTC 数据通道的 Javascript 示例,即当示例加载时,它在一个文本框中提供信令数据。我手动复制数据(突出显示、复制)并将其粘贴到对等的窗口中,该窗口有一个文本框来接受该信令数据。我相信信令数据中需要有一个“答案”,因此也需要有相应的文本框等待该输入。谢谢你。

请问这个例子可以使用谷歌的免费 STUN 服务器吗?

我对一点一点的示例感到非常困惑,我想要一个包含 HTML 和 Javascript 的文件(请不要使用 CSS 或 JQuery)。代码仅在 Chrome 上运行就足够了。谢谢。

0 投票
1 回答
753 浏览

javascript - 强制 UDP 用于 Webrtc 对等连接

我在 Chrome 中使用 webrtc RtcPeerConnection API。

我当地的 SDP 报价是这样的

我认为如果 UDP 不工作,它会尝试 TCP。

但!我不希望 TCP 和 TCP 连接会导致异常,如何从本地 SDP 报价中删除 TCP 线路?

0 投票
1 回答
3086 浏览

webrtc - 用于高带宽应用的 WebRTC 数据通道

我想通过 WebRTC 数据通道发送单向流数据,并且正在寻找最佳配置选项(高带宽、低延迟/抖动)以及其他人在此类应用程序中预期比特率的体验。

我的测试程序发送 2k 的块,带有 2k 的 bufferedAmountLowThreshold 事件回调并再次调用 send 直到 bufferedAmount 超过 16k。在 Chrome 中使用它,我在 LAN 上实现了 ~135Mbit/s,从/到远程连接实现了 ~20Mbit/s,两端都有 100Mbit/s 的 WAN 连接。

这里的限制因素是什么?

如何查看数据是否真正直接点对点,或者是否使用了 TURN 服务器?

我的最终应用程序将使用 Android 上的 google-webrtc 库——我只使用 JS 进行原型设计。我可以在库中设置一些选项来加快比特率,而这是我在官方 JS API 中无法做到的吗?

0 投票
0 回答
214 浏览

javascript - Webrtc 媒体流正在工作,但数据通道关闭(根本不启动)

我正在尝试启动从本机客户端到 Web 浏览器的桌面屏幕流式传输。当我开始连接时,sdp 交换正常并且媒体流按它应该开始。但是数据通道会立即触发“关闭”事件。据我了解,数据通道应该在 sdp 交换之前创建,并且我将协商设置为 false。所以它应该自动通知其他对等方这个通道并启动数据通道。但这不是我的情况。

我尝试了许多不同的方法,例如使用选项设置数据通道或使用或不使用选项的对等连接。

我错过了什么吗?

以下是来自 Web 浏览器的启动器代码。

0 投票
1 回答
324 浏览

tcp - 将 coTurn TCP 分配与 DataChannel 一起使用

我已经配置了一个 coturn 服务器,我需要将它与 DataChannel 一起用于聊天应用程序。

我试图达到一个可以让 coturn 服务器为我提供 tcp 分配的地步。

我正在使用RTCPeerConnectionJS 客户端的标准调用,提供轮流 URI、用户名和凭据。

我在 URI 参数中提供的传输是 TCP ?transport=tcp

有了这一切,我总是收到一个 UDP 分配,服务器记录 ChannelBind 请求(基于 UDP)

问题:

在使用中继服务器的情况下,如何通过 webRTC 客户端实现 TCP 分配,以保证聊天应用程序的正确数据传输?

0 投票
0 回答
2668 浏览

javascript - WebRTC 错误:无法设置远程报价 sdp:无法应用 0 的描述:无法设置 RTCP 多路复用器

我正在尝试在手机和浏览器之间建立 WebRTC 数据通道。50%的时间它工作。50% 的时间它不会工作。错误消息将显示为:

这是什么意思?

错误源自这里:

console.log(pc[d.sender]):

控制台日志(m):

在哪里:

0 投票
1 回答
444 浏览

javascript - 无法创建 RTCDataChannel

我正在尝试按照此示例创建 DataChannel。

对于我使用 websockets 的信号,它的行为如下:

(用户 B 不直接向用户 A 发送消息,这是通过带有中间服务器的 websockets 完成的,该中间服务器保存 websocket 会话,为简单起见跳过该部分)

用户 A 的创建报价代码如下:

用户 B 的完整代码如下:

因此,当 A 收到 B 的答案时,它只是:

A的对象:

用户日志

B的对象:

在此处输入图像描述

Firefox 关于:webrtc 错误

我也尝试过但没有成功:

- 在两个用户都建立连接后打开数据通道,什么都没有,没有任何事件被触发,对此有一些更新:

  1. 在两者上创建数据通道后,我总是将 readyState 视为正在连接...在两个客户端上...RTCPeer数据通道错误的图片

- 在 B 上打开数据通道,而 A 仍在等待 B 的响应,数据通道 onclose 事件被触发,甚至没有触发打开事件......

- 使用https://test.webrtc.org/进行测试,结果如下:

在此处输入图像描述

-我也一直在寻找其他问题或类似于我的问题、论坛、博客等......所有从 2 到 5 岁的答案似乎都已经过时并且不起作用......

- 在两侧创建通道,如下所示:

导致OperationError: Id is in use其中一位客户。如果 DOC 声明如下,我如何通过其 ID 加入频道:

或者(true),它们可以在带外协商,双方使用商定的 id 调用 createDataChannel。

如果我必须通过 ID 加入频道,但在创建对象时我得到该 ID 正在使用中,我该如何加入它?

如果我不指定我得到的 idTypeError: id is required when negotiated is true

虽然医生说:

ID:可选 - 通道的 16 位数字 ID;允许的值为 0-65534。如果您不包括此选项,用户代理将为您选择一个 ID。

  1. 添加await pc.addIceCandidate();or await pc.addIceCandidate(null);,在设置两个连接本地和远程描述之后。

  2. 启动了我自己的TURN 服务器,同时打开了 TCP 和 UDP,结果与 Google 的 STUN 服务器相同。

  3. 尝试在iceServer.

  4. 尝试了 Firefox 和 Chrome 最新版本。

问题:

1) 数据通道何时必须开始打开?在两个客户端都进行了协商并且 pc.connectionState 稳定之后?在创建连接对象之后?设置本地描述之前还是之后?