Firefox不允许启动不可靠的WebRTC数据通道?
在本例中,我使用的是SimplePeer,尽管我已经用其他实现以及我自己的实现进行了测试。这似乎是创建数据通道的一个问题 simple peer的github页面中的示例已稍微修改并使用:Firefox不允许启动不可靠的WebRTC数据通道?,firefox,webrtc,sctp,Firefox,Webrtc,Sctp,在本例中,我使用的是SimplePeer,尽管我已经用其他实现以及我自己的实现进行了测试。这似乎是创建数据通道的一个问题 simple peer的github页面中的示例已稍微修改并使用: var init=location.hash==='#1'; var config={reliable:true,maxRetransmits:0,ordered:false}; var p=new-SimplePeer({initiator:init,trickle:false,channelConfig:
var init=location.hash==='#1';
var config={reliable:true,maxRetransmits:0,ordered:false};
var p=new-SimplePeer({initiator:init,trickle:false,channelConfig:config})
控制台日志(p);
p、 on('error',function(err){console.log('error',err)})
p、 开启(“信号”,功能(数据){
console.log('SIGNAL',JSON.stringify(数据))
document.querySelector('#outgoing').textContent=JSON.stringify(数据)
})
document.querySelector('form')。addEventListener('submit',函数(ev){
ev.preventDefault()
p、 信号(JSON.parse(document.querySelector('#incoming').value))
})
p、 on('connect',function(){
console.log('CONNECT')
控制台日志(p);
控制台日志(p.\U通道);
if(init){
for(设i=0;i=100){
console.log(“全部获得”);
}
})
当使用Firefox(61.0.2 x64)启动连接时,连接被强制为可靠连接,即使尝试使用不可靠:false、ordered:false和maxRetransmits:0将其设置为不可靠连接。仅正确使用ordered属性。
检查连接对象时,不会显示maxRetransmits和maxRetransmitTime设置。如果使用Chrome连接到Firefox连接,则在Chrome中maxRetransmits和maxRetransmitTime都将设置为65535
如果您使用Chrome启动连接,并使用Firefox进行连接,则在Chrome和Firefox中,该连接都将以无序和不可靠的方式打开,并且在Chrome中有0个MaxRetransmit
这是一个bug,还是在使用Firefox浏览器启动连接时,我在设置连接以支持不可靠的数据通道时遗漏了什么?是的,这是Firefox中一个非常不幸的bug,它导致
0
值被忽略maxRetransmits
和maxpacketlife
。它已经在Firefox 62中修复。如果您必须支持Firefox<62,您可以通过将maxPacketLifeTime
设置为1
来解决这个问题。但是您应该只在Firefox中使用较旧的Chrome版本。是的,这太乱了
请注意,中没有可靠的
成员。上也没有maxRetransmitTime
属性。这两个属性早就被删除了。是的,这是Firefox中一个非常不幸的错误,导致maxRetransmits
和maxPacketLife的0
值被忽略时间
。它在Firefox 62中已经被修复。如果你必须支持Firefox<62,你可以通过将maxPacketLifeTime
设置为1
来解决这个问题。但是你应该只在Firefox中使用较旧的Chrome版本。是的,这很糟糕
请注意,中没有可靠的成员。上也没有maxRetransmitTime
属性。这两个属性早就被删除了
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");
}
})