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

AWS WebRTC:获取ICE服务地址(part 1)

建立WebRTC连接的第二步是获取ICE服务地址。

ICE全称:Interactive Connectivity Establishment,建立互动连接。

ICE 服务地址,主要是 TURN 和 STUN 服务器的地址,用于 WebRTC 在 NAT 网络环境中协商建立连接。

上代码:

import boto3
import jsonchannel_arn = "arn:aws-cn:kinesisvideo:cn-*****-*:*************:channel/********************/*************"
endpoint_https = "https://*-*******.kinesisvideo.cn-*****-*.amazonaws.com.cn"
region = "cn-*****-*"ak = str1
sk = str2
token = long_str3# 初始化 boto3
kvs_signaling = boto3.client("kinesis-video-signaling",aws_access_key_id=ak,aws_secret_access_key=sk,aws_session_token=token,region_name=region,endpoint_url=endpoint_https
)# 获取ice server配置
ice_config = kvs_signaling.get_ice_server_config(ChannelARN=channel_arn
)print(json.dumps(ice_config, indent=4))

返回结果为:

/Users/testmanzhang/PycharmProjects/xxxx_yyyyyyy_zzzzz/.venv/bin/python3 /Users/testmanzhang/PycharmProjects/xxxx_yyyyyyy_zzzzz/get_ice.py 
{"ResponseMetadata": {"RequestId": "7ea34817-****-403c-b637-******","HTTPStatusCode": 200,"HTTPHeaders": {"date": "Tue, 27 May 2025 06:00:54 GMT","content-type": "application/json","content-length": "1022","connection": "keep-alive","x-amzn-requestid": "7ea*****-bbd9-****-b637-*********","access-control-allow-origin": "*","access-control-allow-headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token","x-amz-apigw-id": "LNo7g****hTIEeHw=","access-control-allow-methods": "GET,OPTIONS,POST","access-control-expose-headers": "x-amzn-RequestId,x-amzn-ErrorType","x-amzn-trace-id": "Root=1-68355516-7e6*55914f*****d61fb25*7;Sampled=1;Lineage=2afa022c:0"},"RetryAttempts": 0},"IceServerList": [{"Uris": ["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"],"Username": "****:djE6YXJuOmF*********W5lc2lzdmlk****tbm9ydGgtMTozMzM5MzI0Nz******Y2hhbm5lbC9semdkNTQ5NmE3OTA3MjQzZTIy*********czNzA1MDk1","Password": "R5k/Hgc0vq******hmc2Wbr9uvAyH****=","Ttl": 300},{"Uris": ["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"],"Username": "*******:djE6YXJuOmF3******5lc2lzdmlkZW86Y24tbm9ydGgtMTozMzM*******NzU6Y2hhbm5lbC9semdkNTQ******MjQzZTIyZC8****A1MDk1","Password": "PO/VB*******ReePi/40*****u/Osk******","Ttl": 300}]
}Process finished with exit code 0

返回字段解析:

字段含义
username连接 TURN Server 时需要的用户名
passwordTURN Server 的访问密码
uris这个 ICE Server 支持的地址及协议类型
ttl凭据的有效期(秒)

协议解析:

协议描述
udp首选,延迟低
tcp防火墙阻断 UDP 时使用
tlsTLS over TCP,进一步穿透公司防火墙

另外,从打印结果中可以看出,返回了两组KVS提供的TURN服务地址,我看了下app端开流过程中返回的ICE服务地址也是两组TURN服务地址,为什么是两组呢,原因如下:

1、高可用(High Availability)

AWS 提供多组 TURN 服务器是为了确保在 WebRTC 建连时具备冗余性和容错性

  • 如果其中一个 TURN 服务器不可达,或者建立连接失败,客户端可以尝试另一组服务器。

  • TURN 是“付费”的资源,AWS 有时候会根据地理位置或负载情况动态分配多个实例。

2、负载均衡(Load Balancing)

不同的 TURN 地址可能映射到不同的 AWS 实例或者地理位置:

  • AWS 会根据 Signaling Channel 的配置(如在中国区 cn-*****-*)提供最近的数据中心 IP。

  • 每组服务器都包含多个 URI(UDP、TCP、TLS),以适配不同网络环境。

3、并行连接尝试(ICE Trickle / Candidate Gathering)

WebRTC 会同时尝试多个候选地址,按“连接成功的先后顺序”选择最佳路径:

  • 两组服务器 + 每组多种协议(UDP、TCP、TLS)=> 提高连接成功率,尤其是在公司、学校等有防火墙限制的环境中。

下一篇,AWS WebRTC:获取ICE服务地址(part 2)介绍WebRTC中ICE Agent的作用,如何跟ICE server联动,跟ICE server的关系。

http://www.xdnf.cn/news/9539.html

相关文章:

  • Flask集成Selenium实现网页截图
  • SpringBoot+tabula+pdfbox解析pdf中的段落和表格数据
  • docker学习基本使用教程
  • Cursor:开启智能编程新视界
  • :inline=“true“会发生什么
  • 音视频解码基础知识
  • 从C++编程入手设计模式1——单例模式
  • Canvas实例篇:黑客帝国-3D字幕雨
  • 力扣面试150题--二叉树的最近公共祖先
  • 【Java工程师面试全攻略】Day3:Java并发编程面试精要
  • Linux系统中使用find命令自动清理过期备份文件的完整指南
  • 【Python】 -- 趣味代码 - 佩奇
  • 【数据结构初阶】顺序表的应用
  • 【 java 基础问题 第二篇 】
  • Bitset
  • SAR ADC 比较器的响应设计
  • 如何从经纬度数据中判断哪个是经纬度
  • 第二十一章:数据治理之数据安全:数据安全的驱动因素以及常见的数据安全举措
  • 一对多 多对一
  • 调制与解调技术科普|通信系统是如何传送信息?如何还原出原始信息?【无线通信小百科】
  • 【贪心 逆向思考 并集查找 数学归纳法】P7162 [COCI 2020/2021 #2] Sjekira|普及+
  • 【RP2350】香瓜树莓派RP2350之USB HID
  • 《P1763 埃及分数》
  • Acrobat Reader 无法在 Windows 11及10 中打开的5种修复方法
  • 数据库表添加索引
  • STM32 Modbus RTU从机开发实战:核心实现与五大调试陷阱解析
  • 什么是Windows内存压缩? win10/11系统启用和禁用内存压缩的教程
  • HTB-Puppy
  • DAY 38 Dataset和Dataloader类
  • Linux网络编程(一)