AWS WebRTC:获取ICE服务地址(part 2): ICE Agent的作用

上一篇,已经获取到了ICE服务地址,从返回结果中看,是两组TURN服务地址。

拿到这些地址有什么用呢?接下来就要说到WebRTC中ICE Agent的作用了,返回的服务地址会传给WebRTC最终给到ICE Agent。

ICE Agent的作用:

1、收集候选地址(ICE Candidates),包括 host、srflx、relay、prflx:

类型 来源说明
host 本地 WebRTC自己通过系统网络接口直接获取的。
srflx 使用 STUN 服务器,发现 NAT 映射后的公网 IP
prflx 在通信过程中由对端反推出的 IP(较少见)
relay 使用 TURN 服务器,提供中继服务

2、测试连接性(connectivity checks):尝试不同的候选对组合

ICE Agent 通过发送 STUN Binding Request 检查候选对(candidate pair)的可连通性。

  • STUN Binding Request 是 ICE 用来做连接性检测的标准机制。

  • 无论对端 candidate 是哪种类型(host、srflx、relay),只要能够被访问,它就可以接收到并响应 STUN 消息。

  • 检查是否连通 = 看是否能收到 STUN Binding Response。

  • 虽然 relay 类型的候选地址是由 TURN 服务 提供的,但它本质上依然支持 STUN Binding Request 的收发,作为 ICE 的连接性检测机制的一部分。

3、优选路径(nominating best candidate pair):优先使用能直连的、延迟最小的路径;当直连失败时,才使用 TURN 中继。

会按 ICE 优先级 测试连接路径,比如:

  • Host ↔ Host

  • Host ↔ srflx

  • srflx ↔ srflx

  • relay ↔ relay(最慢,最贵)

通常优先选择 非中继的直连链路(即 P2P)。

补充说明一下,收集候选地址(candidates)指的是仅收集本端(local)的候选地址,包括 host、srflx、relay,将这些候选地址通过信令通道(比如 SDP)发送给对方,就是说本地收集完成后,WebRTC 应用会通过 SDP(Session Description Protocol) 把这些 candidates 发送给对端。

4、接收。对端候选地址的获取来自信令过程,对端收集完自己的候选地址后,会通过信令通道传送过来(在 SDP 中或者通过 trickle ICE 逐步发送),本地 ICE Agent 会接收到这些对端候选,并将其组合成 candidate pairs(候选对)进行连接性检测。

这时候我对比了一下,iOS app端的打印日志:

bash 复制代码
[iOS-P2P:2f214551-*****A1100*****] ICE servers retrieved - Count: 3
2025-05-19 15:48:29.611+0800 [Open Stream] ✅✅✅ INFO className:Channel+Tracker fuction:logP2PEvent(_:details:)  line:25 
 [iOS-P2P:2f214551-C2E2DA110017952] ICE[1/3] - turn:***-***-***-***.t-*****.kinesisvideo.cn-****-*.amazonaws.com.cn:443?transport=udp, turns:***-***-***-***.t-*******.kinesisvideo.cn-*****-*.amazonaws.com.cn:443?transport=udp, turns:***-***-***-***.t-*******.kinesisvideo.cn-****-*.amazonaws.com.cn:443?transport=tcp
2025-05-19 15:48:29.612+0800 [Open Stream] ✅✅✅ INFO className:Channel+Tracker fuction:logP2PEvent(_:details:)  line:25 
 [iOS-P2P:2f214551-*****A1100*****] ICE[2/3] - turn:**-***-***-***.t-********.kinesisvideo.cn-****-*.amazonaws.com.cn:443?transport=udp, turns:**-***-***-***.t-*******.kinesisvideo.cn-****-*.amazonaws.com.cn:443?transport=udp, turns:**-***-***-***.t-*********.kinesisvideo.cn-***-*.amazonaws.com.cn:443?transport=tcp
2025-05-19 15:48:29.613+0800 [Open Stream] ✅✅✅ INFO className:Channel+Tracker fuction:logP2PEvent(_:details:)  line:25 
 [iOS-P2P:2f214551-C2E2DA110017952] ICE[3/3] - stun:stun.kinesisvideo.*.amazonaws.com:443

iOS app的日志中是有stun返回的,为什么boto3请求却没有返回呢,查了一下:

AWS 的 WebRTC Signaling Channel 默认不提供 STUN Server,只靠 TURN 来确保连接可靠性。

  1. AWS 官方设计如此:

    • AWS 的 get_ice_server_config() 接口返回的 IceServerList 默认只包含 TURN server。

    • 这些 TURN server 本身就能提供中继功能(比 STUN 更通用),AWS 更倾向于提供自己可控的服务。

  2. AWS 文档说明:

    The returned ICE server list contains TURN-only servers. STUN servers are not included in this API.

我问了一下iOS开发同学,确实在本地配置了STUN server:

objectivec 复制代码
stun.kinesisvideo.{数字}.amazonaws.com

下一篇:AWS WebRTC:获取ICE服务地址(part 3)介绍STUN服务和TURN服务的作用。

相关推荐
大哥您好1 小时前
QEMU 11.1.2 多架构编译指南(x86_64 / aarch64 / riscv64)
linux·服务器
Gauss松鼠会2 小时前
高斯数据库(openGauss)的物理存储结构
运维·服务器·数据库·sql·opengauss·经验总结
Android系统攻城狮2 小时前
Linux Gstreamer深度解析之gst_audio_ring_buffer_prepare_read调用流程与实战(七十四)
linux·运维·服务器·gstreamer音视频·音视频进阶
杨云龙UP3 小时前
PostgreSQL 18.4 数据库整库迁移实战:pg_dump 备份与 pg_restore 恢复完整操作手册
运维·服务器·数据库·postgresql·pg_dump·pg_restore
我科绝伦(Huanhuan Zhou)3 小时前
Linux 通用压力测试脚本合集:磁盘 + 网络
linux·网络·压力测试
聚美智数4 小时前
网站HTTP状态查询-SEO优化
网络·网络协议·http
treesforest4 小时前
数据包是如何找到回家路的?
网络·智能路由器·nat·ip归属地查询
土星云SaturnCloud4 小时前
土星云智慧服务区方案:AI视觉+边缘计算+视频存管一体化的全场景智能化落地解析
服务器·人工智能·ai·边缘计算
有毒的教程5 小时前
Linux底层存储路由配
linux·运维·网络
是真的小外套5 小时前
第9章:网络层安全协议 IPSec 学习笔记
网络·网络协议·tcp/ip