tencent cloud

实时音视频

动态与公告
产品动态
产品近期公告
关于 TRTC Live 正式上线的公告
关于TRTC Conference 正式版上线的公告
Conference 商业化版本即将推出
关于多人音视频 Conference 开启内测公告
关于音视频通话 Call 正式版上线的公告
关于腾讯云音视频终端 SDK 播放升级及新增授权校验的公告
关于 TRTC 应用订阅套餐服务上线的相关说明
产品简介
产品概述
基本概念
产品功能
产品优势
应用场景
性能数据
购买指南
计费概述
免费时长说明
月订阅
现收现付
TRTC 逾期与暂停政策
常见问题解答
退款说明
新手指引
Demo 体验
视频通话 SDK
组件介绍
开通服务
跑通 Demo
快速接入
离线唤醒
会话聊天
云端录制
AI 降噪
界面定制
Chat 集成通话能力
更多特性
无 UI 集成
服务端 API
客户端 API
解决方案
错误码表
发布日志
常见问题
视频会议 SDK
组件介绍(TUIRoomKit)
开通服务(TUIRoomKit)
跑通 Demo(TUIRoomKit)
快速接入(TUIRoomKit)
屏幕共享(TUIRoomKit)
预定会议(TUIRoomKit)
会中呼叫(TUIRoomKit)
界面定制(TUIRoomKit)
虚拟背景(TUIRoomKit)
会议控制(TUIRoomKit)
云端录制(TUIRoomKit)
AI 降噪(TUIRoomKit)
会中聊天(TUIRoomKit)
机器人推流(TUIRoomKit)
更多特性(TUIRoomKit)
客户端 API(TUIRoomKit)
服务端 API(TUIRoomKit)
常见问题(TUIRoomKit)
错误码 (TUIRoomKit)
SDK更新日志(TUIRoomKit)
直播与语聊 SDK
Live 视频直播计费说明
组件介绍
开通服务(TUILiveKit)
跑通 Demo
无 UI 集成
UI 自定义
直播监播
视频直播
语聊房
高级功能
客户端 API
服务端 API
错误码
发布日志
常见问题
RTC Engine
开通服务
SDK 下载
API-Example
接入指引
API-参考手册
高级功能
AI 集成
概述
MCP 配置
Skills 配置
集成指南
常见问题
RTC RESTFUL API
History
Introduction
API Category
Room Management APIs
Stream mixing and relay APIs
On-cloud recording APIs
Data Monitoring APIs
Pull stream Relay Related interface
Web Record APIs
AI Service APIs
Cloud Slicing APIs
Cloud Moderation APIs
Making API Requests
Call Quality Monitoring APIs
Usage Statistics APIs
Data Types
Appendix
Error Codes
控制台指南
应用管理
套餐包管理
用量统计
监控仪表盘
开发辅助
解决方案
实时合唱
常见问题
迁移指南
计费相关
功能相关
UserSig 相关
应对防火墙限制相关
缩减安装包体积相关
Andriod 与 iOS 相关
Web 端相关
Flutter 相关
Electron 相关
TRTCCalling Web 相关
音视频质量相关
其他问题
旧版文档
RTC RoomEngine SDK(旧)
集成 TUIRoom (Web)
集成 TUIRoom (Android)
集成 TUIRoom (iOS)
集成 TUIRoom (Flutter)
集成 TUIRoom (Electron)
TUIRoom API 查询
实现云端录制与回放(旧)
监控仪表盘计费(旧)
协议与策略
安全合规认证
安全白皮书
信息安全说明
服务等级协议
苹果隐私策略:PrivacyInfo.xcprivacy
TRTC 政策
隐私协议
数据处理和安全协议
词汇表

视频截图上传

PDF
聚焦模式
字号
最后更新时间: 2024-11-26 21:29:07

功能说明

实时音视频 TRTC 目前支持 SDK 自动截图上传功能,截图可用于第三方审核,设置封面图等场景,满足用户的使用需求。

前提条件

登录 控制台 创建 RTC Engine 应用。
前往 Application > Advanced Features,开启视频截图上传功能,配置指定存储位置(目前支持腾讯云对象存储 COS 和 AWS S3)。



说明:
1. 视频截图上传功能需通过购买 RTC Engine Pro版套餐解锁功能。包月套餐相关说明请参见文档 包月套餐计费说明
2. 视频截图上传功能会根据产生的截图用量产生费用,更多请见 费用详情
3. 如需使用视频截图上传功能,请提交工单获取专属版本 SDK(目前Android、iOS/Mac、Windows支持)。

功能说明

1. 参见 前提条件,开启功能开关并设置存储位置。
2. 通过 SDK 实验性接⼝ callExperimentalAPI 来使⽤此功能 ,传参要求为 JSON 字符串,参数说明如下:
{
"api": "enableAutoSnapshotAndUpload",
"params" : {
"enable": 1, //启动/停止自动截图,int,必填。字段取值:0 停止、1 启动,传值不能为空,支持传入 bool 值(true 和 false)。
"intervalS": 1,// 截图间隔,int,可选。间隔单位为秒,缺省值 3 秒,最小间隔 1秒。字段传值不能为空,小于 1 则取最小值 1 秒。
"streamType": 0, // 流类型,int,可选。字段取值:0 主路、2辅路,传值不能为空。缺省行为:启动截图时若不传入此字段则启动不生效,停止截图时若不传入此字段任务全部停止。
"extraInfo": "customized messages" // 截图上传附加信息,string,可选。此信息会通过服务端回调通知给您的业务后台。
}

}
注意:
截图上传任务在 enterRoom 成功后才会启动。
建议在 startLocalPreview 成功后调用此方法,避免截图上传任务失败。

接收服务端事件回调

配置信息

实时音视频 TRTC 控制台支持自助配置回调信息,配置完成后即可接收事件回调通知。详细操作指引请参见 回调配置
注意:
您需要提前准备以下信息:
必要项:接收回调通知的 HTTP/HTTPS 服务器地址。
可选项:计算签名的 密钥 key,由您自定义一个最大32个字符的 key,以大小写字母及数字组成。

超时重试

事件回调服务器在发送消息通知后,5秒内没有收到您的服务器的响应,即认为通知失败。首次通知失败后会立即重试,后续失败会以10秒的间隔继续重试,直到消息存续时间超过1分钟,不再重试。

事件回调消息格式

事件回调消息以 HTTP/HTTPS POST 请求发送给您的服务器,其中:
字符编码格式:UTF-8。
请求:body 格式为 JSON。
应答:HTTP STATUS CODE = 200,服务端忽略应答包具体内容,为了协议友好,建议客户应答内容携带 JSON: {"code":0}。
包体示例:下述为“转推时间组-CDN 推流正在进行”事件的包体示例。

回调消息参数

事件回调消息的 header 中包含以下字段:
字段名
Content-Type
application/json
Sign
签名值
SdkAppId
sdk application id
事件回调消息的 body 中包含以下字段:
字段名
类型
含义
EventGroupId
Number
事件组 ID,截图事件(EVENT_GROUP_SCREEN_ SHOT)值为 6
EventType
Number
回调通知的事件类型,视频截图(EVENT_TYPE_VIDEO_SCREENSHOT)值为 601
CallbackTs
Number
事件回调服务器向您的服务器发出回调请求的 Unix 时间戳,单位为毫秒
EventInfo
JSON
Object
事件信息
事件信息说明:
字段名
类型
含义
eventId
String
当次回调的事件 ID
callbackData
String
截图上传附加信息,通过客户端的 extraInfo 上报
pictureURL
String
截图的 URL
code
Number
任务执⾏状态码,默认为 0 表示任务执⾏成功
msg
String
任务执⾏描述信息
roomID
String/Number
房间号
streamType
String
截图的流类型,主路(BigStream)或辅路
(SubStream)
userID
String
截图⽤户名
timestamp
Number
截图 UTC 时间戳,精确到毫秒

回调请求示例

{
"EventGroupId": 6,
"EventType": 601,
"CallbackTs": 1698410059705,
"EventInfo": {
"eventID": "ap-guangzhou-1400000000-1698410059243691647-60022-jpg.jpg",
"callbackData": "test",
"pictureURL": "https://sotest-1200000000.cos.ap-
guangzhou.myqcloud.com/1400000000/ap-guangzhou-1400000000-1698410059243691647-
60022-jpg.jpg",
"code": 0,
"msg": "",
"roomID": "464884",
"streamType": "BigStream",
"userID": "dd",
"timestamp": 1698410059693
}
}

计算签名

签名由 HMAC SHA256 加密算法计算得出,您的事件回调接收服务器收到回调消息后,通过同样的⽅式计算出签名,相同则说明是腾讯云的实时⾳视频的事件回调,没有被伪造。签名的计算如下所示:
// 签名 Sign 计算公式中 key 为计算签名 Sign 用的加密秘钥。
Sign = base64 (hmacsha256(key, body))
注意:
body 为您收到回调请求的原始包体,不要做任何转化,需要完整保留\\n\\t转义字符,示例如下:
body="{\\n\\t\\"EventGroupId\\":\\t1,\\n\\t\\"EventType\\":\\t103,\\n\\t\\"CallbackTs\\":\\t1615554923704,\\n\\t\\"EventInfo\\":\\t{\\n\\t\\t\\"RoomId\\":\\t12345,\\n\\t\\t\\"EventTs\\":\\t1608441737,\\n\\t\\t\\"UserId\\":\\t\\"test\\",\\n\\t\\t\\"UniqueId\\":\\t1615554922656,\\n\\t\\t\\"Role\\":\\t20,\\n\\t\\t\\"Reason\\":\\t1\\n\\t}\\n}"

签名校验示例(Java)

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
//# 功能:第三方回调sign校验
//# 参数:
//# key:控制台配置的密钥key
//# body:腾讯云回调返回的body体
//# sign:腾讯云回调返回的签名值sign
//# 返回值:
//# Status OK 表示校验通过,FAIL 表示校验失败,具体原因参考Info
//# Info:成功/失败信息

public class checkSign {
public static String getResultSign(String key, String body) throws
Exception {
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(),
"HmacSHA256");
hmacSha256.init(secret_key);
return
Base64.getEncoder().encodeToString(hmacSha256.doFinal(body.getBytes()));
}
public static void main(String[] args) throws Exception {
String key = "123654";
String body = "{\\n" + "\\t\\"EventGroupId\\":\\t2,\\n" +
"\\t\\"EventType\\":\\t204,\\n" + "\\t\\"CallbackTs\\":\\t1664209748188,\\n" +
"\\t\\"EventInfo\\":\\t{\\n" + "\\t\\t\\"RoomId\\":\\t8489,\\n" +
"\\t\\t\\"EventTs\\":\\t1664209748,\\n" + "\\t\\t\\"EventMsTs\\":\\t1664209748180,\\n" +
"\\t\\t\\"UserId\\":\\t\\"user_85034614\\",\\n" + "\\t\\t\\"Reason\\":\\t0\\n" + "\\t}\\n" +
"}";
String Sign = "kkoFeO3Oh2ZHnjtg8tEAQhtXK16/KI05W3BQff8IvGA=";
String resultSign = getResultSign(key, body);
if (resultSign.equals(Sign)) {
System.out.println("{'Status': 'OK', 'Info': '校验通过'}");
} else {
System.out.println("{'Status': 'FAIL', 'Info': '校验失败''}");
}
}
}
说明:
更多签名示例说明可参见 签名校验示例

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈