当前位置: 首页 > article >正文

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

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

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

ICE Agent的作用:

1、收集候选地址(ICE Candidates),包括 hostsrflxrelayprflx

类型来源说明
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)的候选地址,包括 hostsrflxrelay,将这些候选地址通过信令通道(比如 SDP)发送给对方,就是说本地收集完成后,WebRTC 应用会通过 SDP(Session Description Protocol) 把这些 candidates 发送给对端。

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

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

[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:

stun.kinesisvideo.{数字}.amazonaws.com

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

http://www.lryc.cn/news/2393030.html

相关文章:

  • 一、Sqoop历史发展及原理
  • React 编译器 RC
  • PyTorch 中mm和bmm函数的使用详解
  • 关于表连接
  • 【计算机网络】fork()+exec()创建新进程(僵尸进程及孤儿进程)
  • QPS 和 TPS 详解
  • Word表格怎样插入自动序号或编号
  • 数据结构:导论
  • 青少年编程与数学 02-020 C#程序设计基础 13课题、数据访问
  • 无人机仿真环境(3维)附项目git链接
  • 湖北理元理律师事务所:债务优化中的“生活锚点”设计
  • Python 训练营打卡 Day 30-模块和库的导入
  • 前端实现图片压缩:基于 HTML5 File API 与 Canvas 的完整方案
  • 【Docker管理工具】部署Docker管理面板DweebUI
  • 【后端高阶面经:架构篇】50、数据存储架构:如何改善系统的数据存储能力?
  • 编程之巅:语言的较量
  • STM32 通过 ESP8266 通信详解
  • Qt/C++开发监控GB28181系统/sip协议/同时支持udp和tcp模式/底层协议解析
  • 晨控CK-FR03与汇川H5U系列PLC配置MODBUS TCP通讯连接操作手册
  • 山海鲸轻 3D 渲染技术深度解析:预渲染如何突破多终端性能瓶颈
  • t014-项目申报管理系统 【springBoot 含源码】
  • 阻止H5页面中键盘收起的问题
  • 将 AI 解答转换为 Word 文档
  • AI 产品的 MVP 构建逻辑:Prompt 工程 ≠ 产品工程?
  • Go语言开发的GMQT物联网MQTT消息服务器(mqtt Broker)支持海量MQTT连接和快速低延时消息传输-提供源码可二次开发定制需求
  • JavaScript es6 语法 map().filter() 链式调用,语法解析 和常见demo
  • leetcode2221. 数组的三角和-medium
  • Express教程【001】:Express创建基本的Web服务器
  • asio之async_result
  • 代码随想录算法训练营 Day60 图论Ⅹ Bellmen_ford 系列算法