RTCIceCandidate:relatedAddress 属性

RTCIceCandidate 接口的 relatedAddress 只读属性是一个指示中继候选者或反射候选者的关联地址的字符串。

如果候选者是主机候选者(即其 address 属性是远程对等方的真实 IP 地址),则 relatedAddressnull

relatedAddress 字段的值是通过传递给 RTCIceCandidate() 构造函数的 candidateInfo 选项对象设置的。你不能直接在选项对象中指定 relatedAddress 的值,如果对象的 candidate 属性行(a-line)格式正确,该值将自动从其中的 rel-address 字段提取。

ICE 本身根本不使用关联地址和关联端口;它们仅用于分析和诊断的目的,并且可能会被安全系统阻止(获取),因此不要对它们的非空值有所依赖。

一个包含候选者关联地址的字符串。对于对等端和服务器反射候选者,关联地址(和关联端口)是该服务器或对等端反射候选者的基础。对于中继候选者,关联地址和关联端口设置为 TURN 服务器选择的映射地址(和端口)。

对于主机候选者,relatedAddressnull,这意味着该字段未包含在候选者的属性行中。

使用说明

尽管 ICE 本身不使用关联地址,但关联地址包含在 ICE 候选者中。通过观察各种类型的候选者及其地址和关联地址之间的关系 relatedAddress 可用于调试目的。relatedAddress 也可被服务质量(QoS)机制使用。

下面是由 STUN 服务器发现的 ICE 候选者的 SDP 属性行描述:

a=candidate:4234997325 1 udp 2043278322 192.0.2.172 6502 typ srflx raddr 198.51.100.45 rport 32768 generation 0

远程地址,relatedAddress,是文本 "raddr" 后面的点分割的 32 位地址(IPv4)或冒号分隔的 64 位地址(IPv6),本例中 relatedAddress 的值为 198.51.100.45

示例

在此示例中,检查了候选者的类型(type),然后根据候选者类型呈现了调试输出,包括候选者的 iprelatedAddress

js
switch (candidate.type) {
  case "host":
    console.log(`主机候选者的 IP 地址为 ${candidate.ip}`);
    break;
  case "srflx":
    console.log(
      `服务器反射候选者的基地址为 ${candidate.relatedAddress};可达 ${candidate.ip}`,
    );
    break;
  case "prflx":
    console.log(
      `对等端反射候选者基地址为 ${candidate.relatedAddress};可达 ${candidate.ip}`,
    );
    break;
  case "relay":
    console.log(
      `由 TURN 服务器分配中继候选者地址 ${candidate.relatedAddress};可达 ${candidate.ip}`,
    );
    break;
}

规范

Specification
WebRTC: Real-Time Communication in Browsers
# dom-rtcicecandidate-relatedaddress

浏览器兼容性

BCD tables only load in the browser

参见