RTCPeerConnection: canTrickleIceCandidates 属性
canTrickleIceCandidates
是 RTCPeerConnection
接口的一个只读属性,它返回一个布尔值,指示远程对等体是否可以接受 trickled ICE 候选。
ICE trickling 是在初始 Offer 或 Answer 已经发送到另一个对等体之后,继续发送候选的过程。
此属性仅在调用 RTCPeerConnection.setRemoteDescription()
后设置。理想情况下,您的信令协议提供了一种检测 trickling 支持的方法,这样您就不需要依赖此属性。WebRTC 浏览器始终支持 trickle ICE。如果 trickling 不受支持,或者您无法确定,您可以检查此属性的虚假值,然后等到 iceGatheringState
的值更改为 "completed"
后再创建和发送初始 Offer。这样,Offer 就包含所有候选。
值
如果远程对等体可以接受 trickled ICE 候选,则为 true
;如果不能,则为 false
。如果没有建立远程对等体,则此值为 null
。
注意:此属性的值是在本地对等体调用 RTCPeerConnection.setRemoteDescription()
后确定的;提供的描述由 ICE 代理用于确定远程对等体是否支持 trickled ICE 候选。
示例
js
const pc = new RTCPeerConnection();
function waitToCompleteIceGathering(pc) {
return new Promise((resolve) => {
pc.addEventListener(
"icegatheringstatechange",
(e) =>
e.target.iceGatheringState === "complete" &&
resolve(pc.localDescription),
);
});
}
// The following code might be used to handle an offer from a peer when
// it isn't known whether it supports trickle ICE.
async function newPeer(remoteOffer) {
await pc.setRemoteDescription(remoteOffer);
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
if (pc.canTrickleIceCandidates) return pc.localDescription;
const answer = await waitToCompleteIceGathering(pc);
sendAnswerToPeer(answer); //To peer via signaling channel
}
// Handle error with try/catch
pc.addEventListener(
"icecandidate",
(e) => pc.canTrickleIceCandidates && sendCandidateToPeer(e.candidate),
);
规范
规范 |
---|
WebRTC:浏览器中的实时通信 # dom-rtcpeerconnection-cantrickleicecandidates |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。