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

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

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

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

上代码:

python 复制代码
import boto3
import json

channel_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))

返回结果为:

python 复制代码
/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的关系。

相关推荐
探鸽小钛2 天前
4G 终端 ES8311 - 挂断一次,下次说话就没声了之解决办法
物联网·音视频·嵌入式·esp32·webrtc
草根大哥3 天前
AI 编程实践之自建视频CDN
音视频·webrtc·低延迟直播·视频cdn·低延迟cdn
EasyCVR4 天前
应急指挥怕延迟?聊聊视频汇聚/视频融合/视频分析EasyCVR平台WebRTC低延迟方案
音视频·webrtc·easycvr
TrueDei5 天前
WebRTC ICE 候选变成 mDNS 地址导致连接失败:原因分析与解决方案
webrtc
中屹指纹浏览器svip7 天前
WebRTC泄露是什么,怎么关闭?
webrtc
海边捡石子8 天前
从零设计一个通用智能电话平台:FreeSWITCH + ESL + AI 实战架构
人工智能·架构·webrtc
音视频牛哥9 天前
不换摄像机,也能接入 WebRTC?SmartMediaKit RTSP/RTMP 转 WHIP 技术实践
音视频·webrtc·smartmediakit·rtsp转whip·rtmp转whip·whip推流·rtsp转webrtc播放
直播技术开发交流11 天前
Android 端 WHIP 协议推流技术实践:相机/录屏/多路转发WHIP实现测试
webrtc·android whip·rtsp转whip·毫秒级实时媒体流·whip低延时推送·whip推送实现·rtsp转webrtc
程序员阿明12 天前
docker搭建视频流服务go2rtc,webRTC
docker·容器·webrtc
O。O蛋黄酥啊15 天前
实时语音 Agent 开发完全指南:从 ASR/TTS 到 WebRTC/VAD 的链路拆解
大模型·webrtc·语音识别·tts·asr