Firefox不允许启动不可靠的WebRTC dataChannel?

时间:2018-08-31 13:21:11

标签: firefox webrtc sctp

在此示例中,尽管我已经测试了其他实现以及我自己的实现,但我使用的是简单对等。创建数据通道似乎是一个问题。

simple-peer的github页面上的示例已经过稍微修改和使用:https://github.com/feross/simple-peer

var init = location.hash === '#1';
var config = {reliable:true, maxRetransmits:0, ordered:false};

var p = new SimplePeer({ initiator: init, trickle: false, channelConfig: config })
console.log(p);
p.on('error', function (err) { console.log('error', err) })

p.on('signal', function (data) {
  console.log('SIGNAL', JSON.stringify(data))
  document.querySelector('#outgoing').textContent = JSON.stringify(data)
})

document.querySelector('form').addEventListener('submit', function (ev) {
  ev.preventDefault()
  p.signal(JSON.parse(document.querySelector('#incoming').value))
})

p.on('connect', function () {
  console.log('CONNECT')
  console.log(p);
  console.log(p._channel);
  if(init){
    for(let i=0;i<100;i++){
        p.send(JSON.stringify(i));
    }
  }
})

var rec = 0;
p.on('data', function (data) {
  rec++;
  console.log('data: ' + JSON.parse(data));
  if(!init){
     p.send(data);
  }
  if(rec >= 100){
    console.log("got all");
  }
})

使用Firefox(61.0.2 x64)发起连接时,即使试图使用unliable:false,ordered:false和maxRetransmits:0将其设置为不可靠,该连接也被强制为可靠。仅正确使用了ordered属性。 检查连接对象时,不会显示maxRetransmits和maxRetransmitTime设置。如果您使用Chrome连接到Firefox连接,则Chrome中的maxRetransmits和maxRetransmitTime都将设置为65535。

如果您使用Chrome启动连接并使用Firefox连接,则该连接将在Chrome和Firefox中以无序和不可靠的方式打开,并且在Chrome中的maxRetransmits为0。

这是一个错误,还是在使用Firefox浏览器启动连接时设置连接以支持不可靠的数据通道时缺少了什么?

1 个答案:

答案 0 :(得分:4)

是的,这是在Firefox跟踪的here中非常不幸的错误,导致0maxRetransmits的{​​{1}}值都被忽略。 Firefox 62已修复该问题。如果必须支持Firefox <62,可以通过将maxPacketLifeTime设置为maxPacketLifeTime来解决此问题。但是,由于Chrome版本do not support maxPacketLifeTime较旧,因此只能在Firefox中执行此操作。是的,很乱。

请注意,RTCDataChannelInit dictionary中没有1成员。 RTCDataChannel interface上也没有reliable属性。两者都已被删除很久了。