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

【ZeroRange WebRTC】Amazon Kinesis Video Streams WebRTC Data Plane REST API 深度解析

基于官方文档与 amazon-kinesis-video-streams-webrtc-sdk-c-main 源码(v1.7.0+)


1. 职责定位

维度说明
所属平面Data Plane REST(信令数据面 REST)
主要用途1. 获取短期 STUN/TURN 列表与临时凭证(GetIceServerConfig)
2. 存储会话管理(JoinStorageSession / UpdateStorageSession)
3. 支持录制与回放场景
协议HTTPS(TLS 1.2+)+ SigV4 签名
终端节点GetSignalingChannelEndpoint 返回的 ResourceEndpointList.Protocol=HTTPS
幂等性全部幂等
默认配额5–20 TPS/Region/Channel(见下表)

2. 接口速览

API典型调用者幂等默认配额SDK 封装函数
GetIceServerConfig所有客户端20 TPSgetIceConfigLws()
JoinStorageSession存储场景 Master5 TPSjoinStorageSessionLws()
UpdateStorageSession运维/存储场景5 TPSupdateStorageSessionLws()

配额提升路径:AWS Support → Service Quotas → Kinesis Video Streams


3. 端到端交互时序

Client (SDK)Data-Plane Endpoint (HTTPS)KVS Signaling Service1. 获取终端(控制面已完成)POST /getIceServerConfig {ChannelARN, ClientId}200 {IceServerList:[{Username,Password,Ttl,Uris:[...]}]}2. 存储场景(可选)POST /joinStorageSession {ChannelARN}200 {StorageStatus:ENABLED}alt[enableMediaStorage]Client (SDK)Data-Plane Endpoint (HTTPS)KVS Signaling Service

4. 请求/响应详解

4.1 GetIceServerConfig

  • Method: POST
  • URI: /{AccountId}/channel/{ChannelARN}/getIceServerConfig
  • Body:
{"ChannelARN": "arn:aws:kinesisvideo:us-east-1:123456789012:channel/myChannel/12345678901234567","ClientId": "web-123",          // 可选,用于审计"Service": "TURN"               // 固定值
}
  • Response:
{"IceServerList": [{"Username": "1600000000:abc123","Password": "def456...","Ttl": 86400,"Uris": ["turns:turn-12345678.kinesisvideo.us-east-1.amazonaws.com:443?transport=tcp","turn:turn-12345678.kinesisvideo.us-east-1.amazonaws.com:3478?transport=udp"]}]
}

4.2 JoinStorageSession(可选)

  • URI: /joinStorageSession
  • Body:
{"ChannelARN": "arn:aws:kinesisvideo:us-east-1:123456789012:channel/myChannel/12345678901234567"
}
  • Response:
{"StorageStatus": "ENABLED","StorageSessionARN": "arn:aws:kinesisvideo:us-east-1:123456789012:storage-session/..."
}

5. SigV4 签名与终端拼装

  • 终端来源:GetSignalingChannelEndpoint 返回的 ResourceEndpointList.Protocol=HTTPS
  • 签名入口:createRequestInfo()generateSignature() @ src/source/Common/Auth.c
  • 关键头:
Authorization: AWS4-HMAC-SHA256 Credential=AKIA.../20251114/us-east-1/kinesisvideo/aws4_request, SignedHeaders=host;x-amz-date, Signature=...
X-Amz-Date: 20251114T123456Z
X-Amz-Security-Token: <session-token>

6. 源码级映射(amazon-kinesis-video-streams-webrtc-sdk-c-main)

APISDK 封装函数HTTPS 实现状态机推进关键日志
GetIceServerConfiggetIceConfig()getIceConfigLws() @ LwsApiCalls.c:1188SIGNALING_STATE_GET_ICE_CONFIGCONNECTIceServerList/Ttl
JoinStorageSessionjoinStorageSession()joinStorageSessionLws() @ LwsApiCalls.c:1570存储场景下调用StorageStatus:ENABLED
UpdateStorageSessionupdateStorageSession()updateStorageSessionLws() @ LwsApiCalls.c:1600运行时更新存储配置StorageStatus:UPDATED

所有请求统一走 lwsCompleteSync()lwsHttpCallbackRoutine(),JSON 拼装模板见 LwsApiCalls.h:131-144


7. JSON 模板与字段说明

7.1 IceServerConfig 模板(src/source/Signaling/LwsApiCalls.h)

#define SIGNALING_ICE_SERVER_LIST_TEMPLATE_START ",\n\t\"IceServerList\": ["
#define SIGNALING_ICE_SERVER_TEMPLATE \"\n\t\t{\n" \"\t\t\t\"Password\": \"%s\",\n" \"\t\t\t\"Ttl\": %" PRIu64 ",\n" \"\t\t\t\"Uris\": [%s],\n" \"\t\t\t\"Username\": \"%s\"\n" \"\t\t},"

7.2 字段含义

字段类型说明
Usernamestring临时用户名,格式 {unixTime}:{random}
Passwordstring基于 AWS 签名密钥派生,有效期 = Ttl
Ttllong凭证有效期(秒),默认 24 h
Urisarray支持 turn:turns:,端口 3478/443

8. 重试与退避

  • 指数退避:初始 100 ms → 最大 30 s,因子 1.5
  • 幂等:相同 ChannelARN+ClientId 多次调用返回相同结果
  • 时钟偏差:> 5 min 返回 RequestTimeTooSkewed,SDK 自动校正

9. IAM 最小权限模板

{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": ["kinesisvideo:GetIceServerConfig","kinesisvideo:JoinStorageSession","kinesisvideo:UpdateStorageSession"],"Resource": "arn:aws:kinesisvideo:*:*:channel/myAppPrefix*"}]
}

10. 日志关键词与快速检索

# IceServerConfig
grep -E "getIceConfigLws|IceServerList|Ttl" master.log# 存储会话
grep -E "joinStorageSessionLws|StorageStatus" master.log# SigV4 头
grep -E "Authorization:|X-Amz-Date:" master.log# 时钟偏差
grep "Clock skew" master.log

11. 常见错误与处置

HTTP错误名根因排查
403AccessDeniedIAM/签名/时钟核对 IAM、Region、NTP
404ResourceNotFoundChannelARN 错误ARN 与终端 Region 一致
400ThrottlingException超配额控制台提升 TPS;退避已内置
400RequestTimeTooSkewed时钟 > 5 min容器/VM 时区同步

12. 小结

  • 职责:Data-Plane REST 仅负责“网络配置获取”与“存储会话管理”,不承载媒体与信令消息
  • 安全:TLS + SigV4 + 短期凭证,独立配额与审计
  • 可靠:幂等 + 指数退避 + 自动时钟校正
  • 易用:JSON 模板透明,SDK 封装拼装/重试/错误处理

附录:引用源码(行号随版本略有浮动)

  • getIceConfigLws() → src/source/Signaling/LwsApiCalls.c:1188
  • joinStorageSessionLws() → src/source/Signaling/LwsApiCalls.c:1570
  • JSON 模板 → src/source/Signaling/LwsApiCalls.h:131-144
  • SigV4 生成 → src/source/Common/Auth.c

如需 PlantUML 高清时序图、CloudWatch Insights 查询模板或一键 IAM 策略生成脚本,请告诉我!

http://www.dtcms.com/a/609568.html

相关文章:

  • 2025从部署到迭代:Deepseek知识库部署服务商如何护航企业知识管理?
  • 检索增强微调(RAFT)如何重塑慢病健康管理?——从技术原理到落地实践
  • 网站开发 工作量评估关于建设网站安全性合同
  • 学Java第四十四天——可变参数、Collections工具类
  • XQuery FLWOR + HTML:深入理解与实际应用
  • 风丘助力优化ADAS测试:多路雷达、视频及车辆总线数据的集成处
  • LeetCode 152. 乘积最大子数组
  • XTDIC-SPARK高速3D测量系统在电子产品跌落测试中的动态变形与可靠性评估
  • Java设计模式之原型模式深度解析
  • 设置网站关键词怎么做高端大气网站源码
  • 网站内链建设不可忽视的地方零基础短视频制作培训
  • php做企业网站管理系统网络营销的特征和功能
  • 【WSL】继承Windows科学流量
  • 可复用的 Vue 3 + TypeScript + Element Plus 的列表请求(列表页/表格)通用方案
  • 安装 Composer
  • 国外做名片的网站网站没有备案
  • 解决VMware Workstation虚拟机中添加硬盘时找不到U盘对应的磁盘physicaldrive3
  • 解决 “Could not locate zlibwapi.dll” 错误全流程分析
  • 第一模板ppt免费下载seo人员工作内容
  • 【高级机器学习】 7. 带噪声数据的学习:从 MLE 到 MAP
  • 横沥镇做网站北京公司注册地址出租
  • 北湖区网站建设哪个好中网互联网站建设
  • @Autowired和@Resource的区别
  • MongoDB | python操作MongoDB的基础使用
  • 【C++进阶】异常
  • 《非暴力沟通》马歇尔•卢森堡博士(美)
  • Rust 从零到精通:构建一个专业级命令行工具 greprs
  • 大足网站建设网络营销市场调研的内容
  • CSS3 分页技术解析
  • HTMLElement 与MouseEvent 事件对象属性详解