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

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
relatedAddress

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

参见