4

我想将流数据(作为 的序列ArrayBuffer)从 Chrome 扩展发送到 Chrome 应用程序,因为Chrome 消息 API(包括chrome.runtime.sendMessagepostMessage...)不支持ArrayBuffer并且 JS 数组的性能很差,我必须尝试其他方法。最终,我发现 WebRTCRTCDataChannel在我的情况下可能是一个很好的解决方案。

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

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

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

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 提交了一个错误。

4

1 回答 1

4

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

  1. RtpDataChannels创建时删除选项RTCPeerConnection。(是的,RtpDataChannels如果您想要数据通道,请删除选项,多么神奇的世界!)
  2. 在接收方:不需要createDataChannel,而是使用from回调处理onmessageonxxxevent.channlepc.ondatachannel

    pc.ondatachannel function(event)
        var receiveChannel = event.channel;
        receiveChannel.onmessage = function(event){
            console.log("Got Data Channel Message:", event.data);
        }; 
    };
    
于 2015-03-03T08:50:56.643 回答