问题标签 [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 投票
2 回答
728 浏览

javascript - RTCDataChannel send() 是同步/阻塞调用吗?

我正在尝试通过 WebRTC 分块发送文件,我想知道是否可以创建一个回调函数以在RTCDataChannel.send()完成发送文件的每个块后调用。

RTCDataChannel.send()同步/阻塞调用吗?如果是这样,我的回调可以在.send().

如果.send()是异步/非阻塞,那么这将变得棘手,因为它似乎不.send()接受回调函数,我想避免使用缓冲区和超时。

0 投票
0 回答
146 浏览

javascript - Firefox RTCDataChannels 未连接

我正在尝试在 Chrome 和 Firefox 之间创建 RTCDataChannel 连接。

我参考了 Mozilla 提供的示例。

http://mozilla.github.io/webrtc-landing/data_test.html

DataChannel 是在 createOffer 方法之前创建的,但它在 Firefox 中不起作用,但在 Chrome 中可以正常工作。

  • Chrome(提供者)数据通道与另一个 Chrome(应答者)浏览器的建立有效。
  • Chrome(提供者)与 Firefox(应答者)建立数据通道不起作用。
  • Firefox(提供者)数据通道与另一个 Firefox(应答者)浏览器的建立不起作用。
  • Firefox (offerer) 与 Chrome (answerer) 建立 DataChannel 有效。

为了让 Firefox DataChannel 在 Firefox 中工作,是否有任何类型的要求?

在创建 DataChannel 之前调用 GetUserMedia。

PS:经过多次检查,我意识到SDP没有打开任何m=应用程序端口或通道。可能是什么问题呢?

缺失的行:

0 投票
1 回答
2093 浏览

javascript - WebRTC ICE candidate in Firefox

At the moment, I am playing around with WebRTC. My goal is to setup a datachannel between two browsers. Chrome-Chrome is working well. Now I am playing with Firefox-Firefox. Here is a MEW from my current code:

As soon setLocalDescription is called, the function onicecandidate is called (as expected). In Chrome 36 the event.icecandidate is something like:

In Firefox the event.icecandidate is just null. But I need to send that ICE candidate over the signaling channel to establish the connection.

0 投票
0 回答
975 浏览

javascript - WebRTC:在已建立的对等连接上添加冰候选错误

我正在研究 webRTC。我在 peer1 和 peer2 之间创建了一个 peerconnection,并在其上创建了数据通道。一切顺利。

然后我希望在这个 PeerConnection 的基础上添加视频流。根据这个问题,我在数据通道上发送报价和答案。但是当我发送冰候选人时,我收到了这个错误:

Failed to execute 'addIceCandidate' on 'RTCPeerConnection': The ICE candidate could not be added.

这是任务序列:

  1. peer1 创建对等连接并在其上创建数据通道
  2. peer1 创建报价并设置本地会话描述
  3. peer1 通过 websocket 向 peer2 发送报价
  4. peer2 接收报价,然后创建对等连接,在其上创建数据通道并设置远程会话描述
  5. peer2 创建答案并设置本地会话描述
  6. peer2 通过 websocket 向 peer1 发送答案
  7. peer1 接收答案并设置远程会话描述

然后我像这样添加流:

  1. peer1 获取本地用户媒体并将其添加到 peerconnection
  2. peer1 创建报价并设置本地会话描述
  3. peer1 通过数据通道向 peer2 发送 offert
  4. peer2 接收提议并设置远程会话描述,然后获取本地用户媒体并将其添加到 peerconnection
  5. peer2 创建答案并设置本地会话描述
  6. peer2 通过数据通道向 peer1 发送应答
  7. peer1 接收答案并设置远程会话描述

这里有什么问题吗?这个错误什么时候会发生?

感谢您的任何评论!

ps: 原谅我英语不好

0 投票
1 回答
588 浏览

ios - webRtc Hybrid应用程序是否在IOS上运行

我想使用 rtc.io 之类的 sdk 开发 IOS 应用程序 我想知道基于 javascript 的混合应用程序是否会在 IOS 上运行?IOS 原生 webRTC 数据通道应用程序开发是否有可用的免费 SDK?

0 投票
2 回答
3906 浏览

javascript - 使用 webRTC 在两个对等点之间创建和使用数据通道

我正在尝试使用 WebRTC 设置对等文件共享系统。我可以在每一侧打开一个数据通道,但我不能从一个用户向另一个用户发送消息。此外,如果一个节点关闭通道,另一个节点则仅针对该用户触发 onclose 事件。

使用 webRTC 设置和使用数据通道的正确方法是什么?

你能告诉我我的代码有什么问题或遗漏吗?

更新:

在那里找到了解决方案:http: //www.html5rocks.com/en/tutorials/webrtc/basics/

0 投票
2 回答
374 浏览

javascript - WebRTC 和数据视图。如何发送动态字节数?

您可以通过 WebRTC DataChannel 发送 DataView。来源: https ://groups.google.com/forum/#!topic/discuss-webrtc/JlU2ItCJuZU

这很好,因为从那时起就没有必要总是发送整个 ArrayBuffer。但是.. 您不能动态更改 DataView 的 byteLength (这对我来说是个大惊喜,因为 DataView 就像一个指向 ArrayBuffer 的指针,只有专门的 API)。

所以你仍然不能发送任何长度的字节,而不是每次都创建新的 DataView。(由于 GC,这个想法很糟糕)。

任何想法如何通过 WebRTC 发送任意长度的字节,而无需每次都创建新的 DataView?

0 投票
2 回答
3155 浏览

javascript - 在 webrtc 中创建和传输自定义媒体流

我想使用 canvas 元素作为 webrtc 通信的视频部分的媒体流源,任何方向都会有帮助,在网上搜索,没有找到太多讨论这个话题的资源

*长背景故事*

问题是,我无法直接从相机发送视频,这是我在显示之前处理视频(一些图像处理内容,超出此问题的范围)的要求的一部分。

以前,在其他对等方的浏览器上<video>,我没有使用标签直接显示视频,而是对隐藏的画布元素进行了一些处理,然后将详细信息复制到另一个画布(我使用了 settimeout 来保持绘图,这给出了illusion of live video)。

现在,客户端希望在传输视频之前完成处理,所以我使用 webrtc 直接传递音频流(之前音频和视频都是通过 webrtc 发送的)。对于视频流,我有两种解决方案:

脚步:

  1. 在本地对等点处理视频,在隐藏的画布上绘制。容易的部分。

  2. 使用 timeout 重复捕获图像数据并传输
    a) using websockets( yes, goes through server),这带来了可怕的延迟并最终导致浏览器崩溃。
    b) using RTCDataChannel,它的性能要好得多,但有时会无缘无故地失败。我还遇到了其他几个问题(例如,由于发送 jpeg 而不是 webp,所以使用了额外的带宽)。

另一个主要问题是因为我使用了超时:当我切换标签时,另一边的帧速率下降。

那么,有什么方法可以将隐藏的画布用作媒体流源,而不是我手动进行呢?

0 投票
1 回答
252 浏览

javascript - RTC 数据通道的不稳定行为

我正在使用 RTC 数据通道在两个对等方(两个 chrome 浏览器,一个 windows pc n 另一个 mac)之间200kb每次(使用超时)传输数据(大约)。100ms

由于某种原因,突然无缘无故,一般在大约 5 分钟后,其中一个 peer 停止接收数据,再过一段时间,另一个 peer 也停止接收数据。

经过大量调试,我发现两个peer都还在传输数据,从网络流量分析,很明显对方机器正在接收数据,但是浏览器没有调用channel.onmessage

我的代码的一部分:

是否有一些已知的错误导致这种情况,或者是因为我同时在同一通道上从两个对等方传输大量数据?


编辑

显然,当我更改为单通道时,我使用了两个数据通道(一个用于每个方向的传输)。它停止工作的速度要快得多。

这听起来很愚蠢,但是当我清除控制台(在chrome浏览器中)时,该浏览器上的数据接收几乎立即停止(但机器仍然接收数据)。

0 投票
1 回答
1371 浏览

webrtc - 创建通过 SCTP 而不是 RTP 发送数据的 DataChannel

我正在尝试使用 WebRTC 创建文件共享站点。

我的测试环境:

Chrome 金丝雀 42.0.2275.0 Mac 10.10 (14A389)

代码:

我正在分块数据并以我指定的任何延迟发送每条消息的任何大小。当我拥有var optionalRtpDataChannels = {optional: [{'RtpDataChannels': true}]};并将该对象传递给new RTCPeerConnection(servers, optionalRtpDataChannels);. 但是,这对于文件共享网络应用程序来说太慢了,我想使用 WebRTC DataChannels 来做到这一点。

我尝试了这个 SO 答案中的建议通过 RTC 数据通道发送图像数据,但没有运气。它表明,如果我忽略RtpDataChannels: truedata.send() 将被限制为 64KB/s 而不是 3KB/s(由我的测试确认)的选项,这是 RTP 被限制的选项。

关于如何以超过 3KB/s 的速度通过 DataChannel 发送更大文件的任何想法?