RTCPeerConnection: thuộc tính canTrickleIceCandidates
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2022.
Thuộc tính chỉ đọc canTrickleIceCandidates của giao diện RTCPeerConnection trả về một giá trị boolean cho biết máy ngang hàng từ xa có thể chấp nhận ICE candidate được gửi dần hay không.
ICE trickling là quá trình tiếp tục gửi candidate sau khi offer hoặc answer ban đầu đã được gửi cho máy ngang hàng còn lại.
Thuộc tính này chỉ được đặt sau khi gọi RTCPeerConnection.setRemoteDescription().
Lý tưởng nhất là giao thức báo hiệu của bạn cung cấp cách phát hiện hỗ trợ trickling, để bạn không phải phụ thuộc vào thuộc tính này.
Trình duyệt WebRTC luôn hỗ trợ trickle ICE.
Nếu trickling không được hỗ trợ, hoặc bạn không thể xác định được, bạn có thể kiểm tra một giá trị false của thuộc tính này rồi chờ đến khi giá trị của iceGatheringState đổi thành "completed" trước khi tạo và gửi offer ban đầu.
Theo cách đó, offer sẽ chứa tất cả candidate.
Giá trị
Một giá trị boolean là true nếu máy ngang hàng từ xa có thể chấp nhận các ICE candidate được gửi dần, và false nếu không thể.
Nếu chưa thiết lập máy ngang hàng từ xa nào, giá trị này là null.
Note:
Giá trị của thuộc tính này được xác định sau khi máy ngang hàng cục bộ gọi RTCPeerConnection.setRemoteDescription();
mô tả được cung cấp sẽ được bộ máy ICE dùng để xác định xem máy ngang hàng từ xa có hỗ trợ ICE candidate được gửi dần hay không.
Ví dụ
const pc = new RTCPeerConnection();
function waitToCompleteIceGathering(pc) {
return new Promise((resolve) => {
pc.addEventListener(
"icegatheringstatechange",
(e) =>
e.target.iceGatheringState === "complete" &&
resolve(pc.localDescription),
);
});
}
// Mã sau có thể được dùng để xử lý một offer từ một máy ngang hàng khi
// chưa biết nó có hỗ trợ trickle ICE hay không.
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); // Gửi tới máy ngang hàng qua kênh báo hiệu
}
// Xử lý lỗi bằng try/catch
pc.addEventListener(
"icecandidate",
(e) => pc.canTrickleIceCandidates && sendCandidateToPeer(e.candidate),
);
Thông số kỹ thuật
| Specification |
|---|
| WebRTC: Real-Time Communication in Browsers> # dom-rtcpeerconnection-cantrickleicecandidates> |