【ZeroRange WebRTC】ICE 服务器列表解析(KVS WebRTC)

ICE 服务器列表解析(KVS WebRTC)

本文独立解析 KVS WebRTC 返回的 ICE 服务器列表,帮助你快速理解 STUN/TURN 的各类 urlstransport 参数、username/credential 凭证的用途与时效,以及在真实网络中的选择与回退策略。


1. 示例(日志摘录)

复制代码
[INFO] [MASTER] ICE servers: [
  {
    "urls": "stun:stun.kinesisvideo.us-west-2.amazonaws.com:443"
  },
  {
    "urls": [
      "turn:35-89-75-127.t-ae7dd61a.kinesisvideo.us-west-2.amazonaws.com:443?transport=udp",
      "turns:35-89-75-127.t-ae7dd61a.kinesisvideo.us-west-2.amazonaws.com:443?transport=udp",
      "turns:35-89-75-127.t-ae7dd61a.kinesisvideo.us-west-2.amazonaws.com:443?transport=tcp"
    ],
    "username": "...",
    "credential": "..."
  }
]

2. 字段与语义

  • stun:...:443

    • 用途:向 STUN 服务器查询"对外可见的 IP/端口",生成 srflx 候选以提升直连成功率。
    • 端口:443 在企业网络下更易被放行(多数环境仅开放 80/443 的对外访问),也更容易通过代理/负载均衡;配合 turns(TLS)可利用 TLS 握手与 SNI 进行合规审计与放行。
  • turn:turns:

    • turn: 表示不加 TLS 的 TURN(控制通道明文 TCP/UDP)。
    • turns: 表示 TURN over TLS(控制通道走 TLS,典型端口 443),更适合严格防火墙/代理环境。
  • ?transport=udp|tcp(中继媒体承载)

    • 指代"中继候选的底层承载类型",与 WebSocket 无关:
      • transport=udp:媒体通过 UDP 中继,队头阻塞小、实时性好。
      • transport=tcp:媒体通过 TCP/TLS 中继,适用于 UDP 全阻的环境,延迟更高。
  • usernamecredential

    • TURN 的临时凭证(Long-Term Credential 风格),由 KVS 按通道/时间窗口下发,带 TTL;用于 Allocate/Refresh/ChannelData 等交互。
    • 过期后需重新获取 ICE 配置;系统时钟必须准确,否则可能出现"未生效/已过期"。

3. 选择与回退(ICE 策略)

  • 默认策略(iceTransportPolicy=ALL):
    • 优先 host(本机地址)与 srflx(STUN 反射),失败时再选 relay(TURN)。
    • 在 relay 中优先 turn/turns ... transport=udp,若 UDP 不通则回退 turns ... transport=tcp
  • 强制中继(iceTransportPolicy=RELAY):
    • 仅收集 TURN 候选,牺牲直连的低延迟换取更稳的可达性(企业网络/跨网场景常用)。

4. 可达性与端口(企业网络场景)

  • 使用 443 提升穿越率:STUN/TURN 都使用 443 能显著提高在仅开放 80/443 的网络中的成功率。
  • 防火墙与代理:DPI/代理可能重置长连接;turns:...(TLS)更易通过策略检查;若 UDP 全阻则使用 turns ... transport=tcp

注意事项:

  • 443 并不保证 UDP 可用:很多企业只放行 TCP/443,会阻断 UDP/443;此时需回退到 turns ... transport=tcp 才能保证可达性。
  • 安全设备可能进行 TLS 检查(解密)、限制 CONNECT 或设置闲置超时;应按代理/防火墙要求发送心跳(Ping/Pong)与合理的保活策略,避免被动断开。

5. 成本与延迟的权衡

  • 直连 P2P:媒体不经中继,云侧不承担媒体带宽;延迟最低。
  • TURN 中继:A→TURN→B 两段转发,云侧承担双向带宽与出网费用;tcp/tls 路径存在队头阻塞,整体延迟更高。
  • 取舍:稳定性/可达性 ↑ ↔ 时延/成本 ↑。

6. 实务建议

  • 保持系统时钟准确,避免临时凭证异常;凭证过期时及时重新获取 ICE 配置。
  • 区域一致:确保 Region 与信令/通道一致,降低跨区时延与出网成本。
  • 默认直连:维持 ALL 策略,能直连就直连;企业网络预备 turns/udpturns/tcp 两种中继变体。
  • 带宽自适应与可靠性:启用 TWCC/REMB、合理码率;用 RTCP NACK/PLI 与短 GOP 提升可恢复性。
  • 资源管理:无人观看及时释放信令与 TURN 分配,节省中继成本。

7. 术语速查

  • host/srflx/relay:本地/服务器反射/中继候选。
  • TURN/turns :中继服务;turns 意为 TLS 保护的 TURN 控制通道。
  • transport=udp|tcp:中继媒体的底层承载类型(UDP 优先,TCP 为退路)。
  • DTLS/SRTP :握手建密钥、媒体加密;与是否走 udp/tcp(承载)是两个层级。

相关推荐
换个昵称都难11 小时前
webrtc源码解析概要介绍
webrtc
换个昵称都难12 小时前
WebRTC 完整调用流程(前端纯 JS 实现,最简可运行)
webrtc
换个昵称都难1 天前
webrtc 拥塞控制GCC 和PCC
webrtc
Cxiaomu1 天前
React接入WebRTC实时视频实践
react.js·音视频·webrtc
AndyHuang19761 天前
WebRTC 强制 Relay 模式下 TCP 重连失败深度排查与优化实战
webrtc
换个昵称都难1 天前
webrtc pacing 平滑发包模块
webrtc
换个昵称都难2 天前
webrtc 音频混音介绍
音视频·webrtc
换个昵称都难2 天前
webrtc QOS-RemoteBitrateEstimator接收端带宽估计(1)
webrtc
换个昵称都难2 天前
webrtc QOS-RemoteBitrateEstimator接收端带宽估计-四个实例(2)
webrtc
都在酒里2 天前
【极致低延时】香橙派部署 MediaMTX 实现 WebRTC 推流,延时仅 500-800ms,比局域网 ffmpeg 拉流快近 10 倍!(附踩坑全记录)
linux·arm开发·ffmpeg·webrtc·orangepi·嵌入式软件