【问题标题】:webrtc: failed to send arraybuffer over data channel in chromewebrtc:无法通过 chrome 中的数据通道发送数组缓冲区
【发布时间】:2015-04-15 06:46:11
【问题描述】:

我想将流数据(ArrayBuffer 的序列)从 Chrome 扩展程序发送到 Chrome 应用程序,因为 Chrome message API(包括 chrome.runtime.sendMessagepostMessage...)不支持 ArrayBuffer 和JS数组性能不好,我只好尝试其他方法。最终,我发现 WebRTC over RTCDataChannel 对我来说可能是一个很好的解决方案。

我已成功通过RTCDataChannel 发送字符串,但是当我尝试发送ArrayBuffer 时,我得到了:

code: 19
message: "Failed to execute 'send' on 'RTCDataChannel': Could not send data"
name: "NetworkError"

这似乎不是bandwidths limits 问题,因为即使我发送了一个字节的数据,它也失败了。这是我的代码:

pc = new RTCPeerConnection(configuration, { optional: [ { RtpDataChannels: true } ]});
//...
var dataChannel = m.pc.createDataChannel("mydata", {reliable: true});
//...
var ab = new ArrayBuffer(8);
dataChannel.send(ab);

在 OSX 10.10.1、Chrome M40 (Stnble)、M42(Canary) 上测试;在 Chromebook M40 上。

我已经为 WebRTC here 提交了一个错误。

【问题讨论】:

  • 曾经在这个问题上取得任何进展吗?我现在在一条类似的船上。通过传输数据。在 Chrome 中使用字符串的 WebRTC 非常慢。
  • @NickJennings 得到了解决方案,请参阅我的答案。

标签: google-chrome google-chrome-extension webrtc google-chrome-app rtcdatachannel


【解决方案1】:

我修改了我的代码,现在一切正常:

  1. 在创建 RTCPeerConnection 时删除了 RtpDataChannels 选项。(是的,如果你想要数据通道,删除 RtpDataChannels 选项,多么神奇的世界!)
  2. 在接收方:不需要createDataChannel,而是使用来自pc.ondatachannel 回调的event.channle 处理onmessageonxxx

    pc.ondatachannel function(event)
        var receiveChannel = event.channel;
        receiveChannel.onmessage = function(event){
            console.log("Got Data Channel Message:", event.data);
        }; 
    };
    

【讨论】:

  • 感谢@lmskull 回答您的问题,您也解决了我的问题。对于任何有相同问题的人:您不应该在发送方和接收方创建相同的通道,而只需使用 ondatachannel 来获取在另一端创建的通道(也适用于多个通道)。这里有一个例子:github.com/webrtc/samples/blob/master/src/content/datachannel/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多