4

Я хочу отправить потоковые данные (в виде последовательности ArrayBuffer) от расширения Chrome на Chrome App, так как Chrome message API (включает в себя chrome.runtime.sendMessage, postMessage ...) не поддерживает ArrayBuffer и массивы JS имеют низкую производительность, я должен попробовать другие методы. В конце концов, я нашел WebRTC более RTCDataChannel, может быть хорошим решением в моем случае.WebRTC: не удалось отправить ArrayBuffer по каналу данных в хроме

мне удалось отправить строку через 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.

+0

Прогресс в этом вопросе? Сейчас я нахожусь в подобной лодке. Передача данных через. WebRTC в Chrome с использованием строк очень медленный. –

+0

@ NickJennings получил решение, см. Мой ответ. – Imskull

ответ

3

Я изменил мой код, теперь все работало удивительно:

  1. удалены RtpDataChannels опции при создании RTCPeerConnection (ДА, удалить RtpDataChannels вариант, если вы хотите, канал передачи данных, какой волшебный мир!)
  2. на. приемник сторона: нет необходимости createDataChannel, вместо этого, обрабатывать onmessage, onxxx с помощью event.channle из pc.ondatachannel обратного вызова:

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

event.channel :-) – jesup

+0

Спасибо @lmskull за ответ на ваш вопрос, вы решили мою проблему. Для тех, у кого есть такая же проблема: вы не должны создавать те же каналы на стороне отправителя и получателя, но просто используйте ondatachannel для получения каналов, созданных с другой стороны (также работает с несколькими каналами). Пример: https://github.com/webrtc/samples/blob/master/src/content/datachannel/basic/js/main.js – janesconference

Смежные вопросы