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.pswp.cn/news/907697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python兴趣匹配算法:从理论到实战的进阶指南

目录 一、兴趣匹配算法的技术栈解析 1. 基础特征匹配阶段 2. 向量空间模型阶段 3. 深度学习阶段 二、工程化实践关键技术 1. 特征工程体系 2. 相似度计算优化 三、典型应用场景实现 1. 社交好友推荐系统 2. 电商商品推荐系统 四、性能优化与挑战应对 1. 计算性能优…

【C语言】讲解 程序分配的区域(新手)

目录 代码区 数据区 堆区 栈区 常量区 重点比较一下堆区与 栈区 总结: 前言: C语言程序的内存分配区域是理解其运行机制的重要部分。根据提供的多条证据,我们可以总结出C语言程序在运行时主要涉及以下五个关键内存区域: 代…

Go语言之接口与多态 -《Go语言实战指南》

接口是 Go 语言实现 多态 的核心机制。本章将帮助你理解接口的设计哲学、动态行为,以及它如何让 Go 实现面向接口编程的能力。 一、什么是接口? 接口是一组方法签名的集合,任何类型只要实现了接口中声明的所有方法,就被视为实现了…

JSR 303(即 Bean Validation)是一个通过​​注解在 Java Bean 上定义和执行验证规则​​的规范

🛠️ 一、JSR 303是什么? JSR 303(Java Specification Requests 303)是Java EE 6的子规范,全称​​Bean Validation​​。它通过注解方式对JavaBean的属性值进行标准化校验,例如检查非空、长度、格式等规则…

【图像处理入门】3. 几何变换基础:从平移旋转到插值魔法

摘要 掌握图像的几何变换相当于学会「图像的空间魔法」。本文将带你理解平移/旋转/缩放的数学原理,掌握OpenCV中warpAffine和getAffineTransform的核心用法,对比最近邻、双线性等插值算法的优劣。通过图像翻转、镜像、透视变换实战,学会用变…

微信小程序学习目录

个人简介 👨‍💻‍个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言&…

QT 5.15.2 程序中文乱码

1. 在.pro文件中添加: msvc { QMAKE_CXXFLAGS /source-charset:utf-8 /execution-charset:utf-8 }备注:.pro文件只有在选择 qmake 方式才会生成。 [Cmake 只会生成 CMakeLists.txt 文件] 2. 在文件首部增加以下程序行 #pragma execution_character_s…

Unity UI设计优化与模式原则

前言 在 Unity 中设计高效且可维护的 UI 系统时,需要结合性能优化和设计模式两大核心方向。以下是关键原则及实践方法: 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀! 一、UI 性能…

CppCon 2014 学习: The Implementation of Value Types

“The Implementation of Value Types” 在C里,通常指的是如何设计和实现**值类型(value types)**的类,确保它们符合值语义(value semantics),也就是说: 对象的赋值和拷贝操作应该是…

每日算法刷题Day19 5.31:leetcode二分答案3道题,用时1h

6. 475.供暖器(中等,学习check函数双指针思想) 475. 供暖器 - 力扣(LeetCode) 思想 1.冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。在加热器的加热半径范围内的每个房屋都可以获得供暖。现在,给出…

【计算机网络】第2章:应用层—应用层协议原理

目录 1. 网络应用的体系结构 2. 客户-服务器(C/S)体系结构 3. 对等体(P2P)体系结构 4. C/S 和 P2P 体系结构的混合体 Napster 即时通信 5. 进程通信 6. 分布式进程通信需要解决的问题 7. 问题1:对进程进行编址…

PHP+MySQL开发语言 在线下单订水送水小程序源码及搭建指南

随着互联网技术的不断发展,在线下单订水送水服务为人们所需要。分享一款 PHP 和 MySQL 搭建一个功能完善的在线订水送水小程序源码及搭建教程。这个系统将包含用户端和管理端两部分,用户可以在线下单、查询订单状态,管理员可以处理订单、管理…

vBulletin未认证API方法调用漏洞(CVE-2025-48827)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…

计算机模拟分子合成有哪些应用软件?

参阅:Top 创新大奖 以下是用于计算机模拟分子合成(包括逆合成设计、分子对接、分子动力学模拟及综合设计平台)的主流应用软件分类总结,结合其核心功能和应用场景进行整理: 🔬 一、逆合成设计与路线规划软件…

Excel 中的SUMIFS用法(基础版),重复项求和

1. 首先复制筛选条件所在的列,去除重复项目 数据 》重复项 》删除重复项 2. 输入函数公式 SUMIFS(C:C,A:A,E2) 3. 选中单元格,通过 ShiftF3 查看函数参数 第一个参数:求和区域,要累加的值所在的区域范围 第二个参数&#xff1a…

【xmb】内部文档148344597

基于小米CyberDog 2的自主导航与视觉感知系统设计报告 摘要: 本文针对2025年全国大学生计算机系统能力大赛智能系统创新设计赛(小米杯)初赛要求,设计并实现了基于小米仿生四足机器人CyberDog 2的平台系统方案。参赛作品利用Cyber…

从零开始理解机器学习:知识体系 + 核心术语详解

你可能听说过“机器学习”,觉得它很神秘,像是让电脑自己学会做事。其实,机器学习的本质很简单:通过数据来自动建立规则,从而完成预测或决策任务。 这篇文章将带你系统梳理机器学习的知识体系,并用贴近生活…

springboot集成websocket给前端推送消息

一般通常情况下,我们都是前端主动朝后端发送请求,那么有没有可能,后端主动给前端推送消息呢?这时候就可以借助websocket来实现。下面给出一个简单的实现样例。 首先创建一个websocketDemo工程,该工程的整体结构如下&a…

【清晰教程】查看和修改Git配置情况

目录 查看安装版本 查看特定配置 查看全局配置 查看本地仓库配置 设置或修改配置 查看安装版本 打开命令行工具,通过version命令检查Git版本号。 git --version 如果显示出 Git 的版本号,说明 Git 已经成功安装。 查看特定配置 如果想要查看特定…

【Github/Gitee Webhook触发自动部署-Jenkins】

Github/Gitee Webhook触发自动部署-Jenkins #mermaid-svg-hRyAcESlyk5R2rDn {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hRyAcESlyk5R2rDn .error-icon{fill:#552222;}#mermaid-svg-hRyAcESlyk5R2rDn .error-tex…