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 时需要的用户名 |
password | TURN Server 的访问密码 |
uris | 这个 ICE Server 支持的地址及协议类型 |
ttl | 凭据的有效期(秒) |
协议解析:
协议 | 描述 |
---|---|
udp | 首选,延迟低 |
tcp | 防火墙阻断 UDP 时使用 |
tls | TLS 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的关系。
相关文章:
AWS WebRTC:获取ICE服务地址(part 1)
建立WebRTC连接的第二步是获取ICE服务地址。 ICE全称:Interactive Connectivity Establishment,建立互动连接。 ICE 服务地址,主要是 TURN 和 STUN 服务器的地址,用于 WebRTC 在 NAT 网络环境中协商建立连接。 上代码ÿ…...

Nest全栈到失业(一):Nest基础知识扫盲
Nest 是什么? 问你一个问题,node是不是把js拉出来浏览器环境运行了?当然,他使用了v8引擎加上自己的底层模块从而实现了,在外部编辑处理文件等;然后它使用很多方式来发送请求是吧,你知道的什么http.request 或 https.request; 我们浏览器中,使用AJAX以及封装AJAX和http的Axios…...

摩尔线程S4000国产信创计算卡性能实战——Pytorch转译,多卡P2P通信与MUSA编程
简介 MTT S4000 是基于摩尔线程曲院 GPU 架构打造的全功能元计算卡,为千亿规模大语言模型的训练、微调和推理进行了定制优化,结合先进的图形渲染能力、视频编解码能力和超高清 8K HDR 显示能力,助力人工智能、图形渲染、多媒体、科学计算与物…...

Tesseract OCR 安装与中文+英文识别实现
一、下载 https://digi.bib.uni-mannheim.de/tesseract/ 下载,尽量选择时间靠前的(识别更好些)。符合你的运行机(我的是windows64) 持续点击下一步安装,安装你认可的路径即可,没必要配置环境变…...

Cypress + React + TypeScript
🧪 Cypress + React + TypeScript 组件测试全流程实战:从入门到自动化集成 在现代前端开发中,组件测试 是保障 UI 行为可靠性的重要手段。本文将通过一个 React 项目示例,实战演示如何结合 Cypress + React + TypeScript 实现从零配置到自动化集成的完整测试链路。 一、项…...
每个路由器接口,都必须分配所属网络内的 IP 地址,用于转发数据包
在IP网络中,主机(Host)和路由器接口(Router Interface)都需要分配网络地址(IP地址)。 1. 主机(Host)的IP地址分配 (1) 作用 主机的IP地址用于唯一标识该设备࿰…...
c++第四课(基础c)——布尔变量
1.前言 好,今天我们来学布尔变量(bool),开搞! 2.正文 2.1布尔数据的定义值 布尔数据的定义值,是只有真和假 顺便提一句0是假,非0的数字都是真 不过为了简便 我们一般都用0和1 2.2布尔数…...

第2期:APM32微控制器键盘PCB设计实战教程
第2期:APM32微控制器键盘PCB设计实战教程 一、APM32小系统介绍 使用apm32键盘小系统开源工程操作 APM32是一款与STM32兼容的微控制器,可以直接替代STM32进行使用。本教程基于之前开源的APM32小系统,链接将放在录播评论区中供大家参考。 1…...

Docker-搭建MySQL主从复制与双主双从
Docker -- 搭建MySQL主从复制与双主双从 一、MySQL主从复制1.1 准备工作从 Harbor 私有仓库拉取镜像直接拉取镜像运行容器 1.2 配置主、从服务器1.3 创建主、从服务器1.4 启动主库,创建同步用户1.5 配置启动从库1.6 主从复制测试 二、MySQL双主双从2.1 创建网络2.2 …...
LeetCode - 203. 移除链表元素
目录 题目 解题思路 读者可能出现的错误写法 正确的写法 题目 203. 移除链表元素 - 力扣(LeetCode) 解题思路 使用哨兵节点: 创建一个哨兵节点(dummy),将其next指向原链表头节点 哨兵节点的作用是统一处理所有情况&#x…...

canvas 实现全屏倾斜重复水印
参考: html、js、canvas实现水印_html页面使用canvas绘制重复水印-CSDN博客 效果 不求水印显示完全。 实现代码 <template><div class"watermark" ref"waterMark"></div></template><script lang&q…...

vue3项目 前端文件下载的两种工具函数
1、Blob 流下载 Blob 表示不可变的原始数据的类文件对象,通常用于处理文件或大块二进制数据。 注意:js中还有一个二进制数据类型ArrayBuffer,它们的区别如下 Blob 可以位于磁盘、高速缓存内存和其他不可用的位置;ArrayBuffer 是存…...
SpringAI系列 - 升级1.0.0
目录 一、调整pom二、MessageChatMemoryAdvisor调整三、ChatMemory get方法删除lastN参数四、QuestionAnswerAdvisor调整Spring AI发布1.0.0正式版了😅 ,搞起… 一、调整pom <properties><java.version>17</java.version><spring-ai.version>...

5.31 day33
知识点回顾: PyTorch和cuda的安装 查看显卡信息的命令行命令(cmd中使用) cuda的检查 简单神经网络的流程 数据预处理(归一化、转换成张量) 模型的定义 继承nn.Module类 定义每一个层 定义前向传播流程 定义损失函数和优…...
Vue3 + VTable 高性能表格组件完全指南,一个基于 Canvas 的高性能表格组件
Vue3 + VTable 高性能表格组件完全指南 前言 VTable 是一个高性能的多维表格组件,专为处理大数据量场景而设计。它支持数十万条数据的快速渲染,提供了丰富的表格功能和良好的用户体验。本文将详细介绍如何在 Vue3 项目中使用 VTable,并解决常见的配置问题。 什么是 VTabl…...
【七. Java字符串操作与StringBuilder高效拼接技巧】
7. java字符串 7.1 API 介绍:应用程序编程接口。在 Java 中,API 指的是 JDK 提供的各种功能类,这些类把底层实现封装好了,我们不用关心内部怎么写的,直接用就行 用 API 帮助文档步骤:以查Random类为例 打…...
题解:洛谷 P12672 「LAOI-8」近期我们注意到有网站混淆视听
设 LGR 存在数量为 x x x,CSP 存在数量为 y y y。 很明显,我们只需要将其中数量较小的一方改没就行了(一个巴掌拍不响)。 每两个字符串可同意进行一次更改,答案为: ⌈ min ( x , y ) 2 ⌉ \left\lce…...

HTML 计算网页的PPI
HTML 计算网页的PPI vscode上安装live server插件,可以实时看网页预览 有个疑问: 鸿蒙density是按照类别写死的吗,手机520dpi 折叠屏426dpi 平板360dpi <html lang"en" data - overlayscrollbars - initialize><header&…...
WIN11+eclipse搭建java开发环境
环境搭建(WIN11ECLIPSE) 安装JAVA JDK https://www.oracle.com/cn/java/technologies/downloads/#jdk24安装eclipse https://www.eclipse.org/downloads/ 注意:eclipse下载时指定aliyun的软件源,后面安装会快一些。默认是jp汉化e…...
Linux 环境下C、C++、Go语言编译环境搭建秘籍
引言 在当今多元化的编程世界里,C、C 和 Go 语言凭借各自独特的优势,在不同的领域发光发热。C 语言作为一门古老而强大的编程语言,以其高效、贴近硬件的特性,在操作系统、嵌入式系统等底层开发中占据着重要地位;C 作为…...

MMR-Mamba:基于 Mamba 和空间频率信息融合的多模态 MRI 重建|文献速递-深度学习医疗AI最新文献
Title 题目 MMR-Mamba: Multi-modal MRI reconstruction with Mamba and spatial-frequency information fusion MMR-Mamba:基于 Mamba 和空间频率信息融合的多模态 MRI 重建 01 文献速递介绍 磁共振成像(MRI)因其无创、无辐射特性以及…...

2.5/Q2,Charls最新文章解读
文章题目:Trajectories of depressive symptoms and risk of chronic liver disease: evidence from CHARLS DOI:10.1186/s12876-025-03943-7 中文标题:抑郁症状的轨迹和慢性肝病风险:来自 CHARLS 的证据 发表杂志:BM…...

Unity QFramework 简介
目录 什么是MVC模式? QFramework 架构提供了 Model 的概念 QFramework 架构引入 Command 的方式 QFramework 架构引入 Event事件机制 四个层:表现层、系统层、数据层、工具层 委托和回调函数的关系 命令和事件的区别 工具篇 QFramework整体基于M…...

C++ 日志系统实战第五步:日志器的设计
全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的项目笔记吧~ 本文项目代码编写收尾! 日志器类 (Logger) 设计(建造者模式) 日志器主要用于和前端交互。当我们需要使用日志系统打印 log 时&…...
@Docker Compose部署Alertmanager
文章目录 Docker Compose部署Alertmanager1. 准备工作1.1 系统要求1.2 目录结构准备 2. 配置文件准备2.1 创建docker-compose.yml文件2.2 创建Alertmanager配置文件 3. 部署Alertmanager3.1 启动服务3.2 验证服务状态3.3 检查日志 4. 服务验证4.1 访问Web UI 4.2 API健康检查5.…...
前端面试准备-3
1.let、const、var的区别 ①:let和const为块级作用域,var为全局作用域 ②:let和var可以重新赋值定义,而const不可以 ③:var会提升到作用域顶部,但不会初始化;let和const也会提升到作用不顶部…...

性能测试-jmeter实战1
课程:B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 性能测试-jmeter实战1 为什么需要性能测试呢?性能测试的作用?性能测试体系性能测试基础性能测试工具性能监控…...
汽车高速通信的EMC挑战
随着“软件定义汽车”的理念全面渗透,中国汽车行业正加速向集中式电子电气架构(E/E架构)转型。SOA(面向服务的架构)理念推动下,整车开始围绕中央计算平台(OIB)与分布式域控制器(VIU)构建,硬件平台具备前所未有的数据处理能力,能掌控整车控制与实时感知决策。 一、…...
[SC]SystemC在CPU/GPU验证中的应用(五)
SystemC在CPU/GPU验证中的应用(五) 摘要:下面分享50个逐步升级SystemC编程能力的示例及建议的学习路线图。您可以一次一批地完成它们——从前五个基础的例子开始,然后转向channels, TLM, bus models, simple CPU/GPU kernels等等。在每个阶段掌握之后,再进行下一组…...
[蓝桥杯C++ 2024 国 B ] 立定跳远(二分)
题目描述 在运动会上,小明从数轴的原点开始向正方向立定跳远。项目设置了 n n n 个检查点 a 1 , a 2 , ⋯ , a n a_1, a_2, \cdots , a_n a1,a2,⋯,an 且 a i ≥ a i − 1 > 0 a_i \ge a_{i−1} > 0 ai≥ai−1>0。小明必须先后跳跃到每个检查…...