RTCPeerConnection: canTrickleIceCandidates 屬性
RTCPeerConnection 介面的只讀屬性 canTrickleIceCandidates 返回一個布林值,該值指示遠端端點是否能夠接收 “涓流式” ICE 候選(trickled ICE candidates)。
ICE 涓流(ICE trickling)是指在初始的 offer 或 answer 已傳送給對方之後,繼續傳送 ICE 候選的過程。
此屬性僅在呼叫 RTCPeerConnection.setRemoteDescription() 後設置。理想情況下,您的信令協議會提供一種檢測涓流支援的方法,這樣您就不需要依賴此屬性。WebRTC 瀏覽器始終支援涓流 ICE。如果不支援涓流,或者您無法得知其支援情況,您可以檢查此屬性是否為假值,然後在 iceGatheringState 的值變為 "completed" 之前,再建立併發送初始 offer。這樣,offer 將包含所有候選。
值
如果遠端端點能夠接收涓流式 ICE 候選,則返回 true;如果不能,則返回 false。如果尚未建立遠端端點,則此值為 null。
注意:此屬性的值在本地端點呼叫 RTCPeerConnection.setRemoteDescription() 後確定;ICE 代理使用提供的描述來確定遠端端點是否支援涓流式 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 |
瀏覽器相容性
載入中…