RTCIceCandidate: candidate 属性

Baseline 已广泛支持

此功能已成熟,可跨多种设备和浏览器版本使用。自 2017 年 9 月以来,它已在浏览器中提供。

RTCIceCandidate 接口上只读的 candidate 属性会返回一个详细描述该 candidate 的字符串。RTCIceCandidate 的其他大部分属性实际上是从这个字符串中提取出来的。

可以通过传递给 RTCIceCandidate() 构造函数的对象的 candidate 属性,或者传递给 RTCPeerConnection.addIceCandidate() 方法的对象中的 candidate 属性来配置此属性。

一个描述 candidate 属性的字符串,直接取自 SDP 属性 "candidate"。candidate 字符串指定了 candidate 的网络连接信息。如果 candidate 是一个空字符串 (""),则表示已到达 candidate 列表的末尾;这个 candidate 被称为“结束标记”。

候选字符串的语法在 RFC 5245, section 15.1 中进行了描述。对于如下 a-line (属性行):

a=candidate:4234997325 1 udp 2043278322 192.0.2.172 44323 typ host

相应的 candidate 字符串的值将是:"candidate:4234997325 1 udp 2043278322 192.0.2.172 44323 typ host"

在所有条件都相同的情况下,用户代理总是优先选择具有最高 priority 的候选。在上面的示例中,优先级是 2043278322。属性之间都用单个空格字符分隔,并且顺序是固定的。此示例候选的完整属性列表是:

示例

在此示例中,我们看到一个函数,它接收一个 SDP 字符串作为输入,该字符串包含在信令过程中从远程对等方收到的 ICE candidate。

js
function handleNewIceCandidate(candidateSDP) {
  const candidateObj = new RTCIceCandidate(candidateSDP);

  myPeerConnection.addIceCandidate(candidateObj).catch({
    /* handle the error thrown by addIceCandidate() */
  });
}

此处显示的 handleNewIceCandidate() 函数会将收到的 candidate 的 SDP 文本传递给 RTCIceCandidate(),以返回一个 RTCIceCandidate 对象,该对象代表了该 candidate。

然后将新的 candidate 传递给 RTCPeerConnection.addIceCandidate(),以便将 candidate 添加到 WebRTC 将要用于建立连接的 candidate 列表中。

规范

规范
WebRTC:浏览器中的实时通信
# dom-rtcicecandidate-candidate

浏览器兼容性