firefox - Firefox 不允许启动不可靠的 WebRTC 数据通道?
问题描述
在此示例中,我使用的是 simple-peer,尽管我已经使用其他实现以及我自己的实现进行了测试。这似乎是创建数据通道的问题。
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) 启动连接时,即使尝试使用 unreliable:false、ordered:false 和 maxRetransmits:0 将其设置为不可靠,连接也会被强制为可靠。只有有序的属性被正确使用。检查连接对象时,不会公开 maxRetransmits 和 maxRetransmitTime 设置。如果您使用 Chrome 连接到 Firefox 连接,则在 Chrome 中 maxRetransmits 和 maxRetransmitTime 都将设置为 65535。
如果您使用 Chrome 启动连接,并使用 Firefox 进行连接,则连接将在 Chrome 和 Firefox 中以无序和不可靠的方式打开,并且在 Chrome 中具有 0 maxRetransmits。
这是一个错误,还是我在使用 Firefox 浏览器启动连接时设置连接以支持不可靠的数据通道时遗漏了什么?
解决方案
是的,这是此处跟踪的 Firefox 中的一个非常不幸的错误,导致 和 的值0
都被忽略。它已在 Firefox 62 中修复。如果您必须支持 Firefox < 62,您可以通过设置来解决此问题。但是您应该只在 Firefox 中执行此操作,因为旧版 Chrome不支持. 是的,这是一团糟。maxRetransmits
maxPacketLifeTime
maxPacketLifeTime
1
maxPacketLifeTime
请注意字典中没有reliable
成员。界面上也没有属性。两者都已在很久以前被删除。RTCDataChannelInit
maxRetransmitTime
RTCDataChannel
推荐阅读
- python - PyMongo json_util.dumps 覆盖 ObjectId 表示
- java - 如何在 Camel REST DSL 中使用 restConfiguration 的 producerApiDoc 属性验证标头
- javascript - 如何处理选择中显示的文本?
- ios - UIView 动画在转换到新视图之前快速恢复到原始状态
- angular7 - ExpressionChangedAfterItHasBeenCheckedError PrimeNG 两个单选按钮绑定到相同的属性
- qt - ListView 用动画一一加载元素
- javascript - 如何使用 glitch.com 记录输入?
- postgresql - Minikube 挂载 postgres 数据文件夹
- json - 从 JSON 中解析所有特定的键值并将它们放在一个列表中?
- apache-flink - 在 Flink 的 FlatMapFunction 期间,我可以在分布式缓存中注册文件吗?