检测本地浏览器是否支持ICE涓流
为了支持ICE与任意客户端的trickling,建议信令机制也支持信号的涓流支持。我这么做;一个对等体可以在初始信令握手中包含一个标志,它是否支持trickling,所以远程对等体可以决定涓流。检测本地浏览器是否支持ICE涓流
我遇到的问题是我不知道如何检测当前浏览器是否支持ICE trickling,因此它可以正确设置该标志。我试图用这个作为一个检测机制:
typeof RTCPeerConnection.prototype.addIceCandidate == 'function'
这是可靠的,有最好的,或者是有一个更好的API或方法来查询对ICE-涓涓本地支持?
所有现代WebRTC端点必须支持Trickle ICE。
一个与所述 “滴” 选项 “A =冰选项” 行必须被添加,如[I-D.ietf-ice-trickle]中指定的第4章
另外,从我的的WebRTC规范的阅读,对浏览器是conformant,它必须实现addIceCandidate等
所有这一切燮浏览器WebRTC今天支持滴漏。在Firefox下返回true
(Chrome似乎不正确的信号这一点,但是请放心,它支持涓涓):
new RTCPeerConnection().createOffer({offerToReceiveAudio: true})
.then(offer => console.log(offer.sdp.includes('\r\na=ice-options:trickle')))
.catch(e => log(e));
有趣的是,有一个pc.canTrickleIceCandidates
属性,你可以使用,如果检测远程对等支持trickling,可能是为了支持连接传统系统。下面(在Chrome中,需要追上来规范undefined
)产生在Firefox true
:
var pc1 = new RTCPeerConnection(), pc2 = new RTCPeerConnection();
pc1.onicecandidate = e => pc2.addIceCandidate(e.candidate);
pc2.onicecandidate = e => pc1.addIceCandidate(e.candidate);
pc1.onnegotiationneeded = e =>
pc1.createOffer().then(d => pc1.setLocalDescription(d))
.then(() => pc2.setRemoteDescription(pc1.localDescription))
.then(() => pc2.createAnswer()).then(d => pc2.setLocalDescription(d))
.then(() => pc1.setRemoteDescription(pc2.localDescription))
.then(() => console.log(pc1.canTrickleIceCandidates))
.catch(e => console.log(e));
pc1.createDataChannel("dummy");
好吧,这简化了情况...... :) – deceze
所有支持的WebRTC支持流下的浏览器。 – jib
这似乎与我们测试过的所有相关浏览器都是一样的。然而,在过去的某个时候,似乎并非如此。关于滴漏的大多数信息都是相当过时的,并且来自有争议的时间段。它可以保证浏览器支持它的任何地方;或者再次,有些方法来检测支持? – deceze