实现云端切片
场景说明
在远程教育、秀场直播、视频会议、远程定损、金融双录、在线医疗等应用场景中,考虑取证、质检、审核、存档和回放等需求,常需要将整个视频通话或互动直播过程通过云端切片存储下来的情况。
云端切片费用
功能说明
通过 TRTC 的云端切片功能,您可以将房间中每一个用户的音视频流进行云端音频切片或者视频截图处理,无需客户端接入。
名词解释
音频切片:将房间内的某一个用户的音频流按照一定的时间间隔进行切片处理,切片后为音频片段。
视频截图:将房间内的某一个用户的视频流按照一定的时间间隔进行截图处理,截图后为图片。
文件存储:支持将云端切片后的文件存储到对象存储 COS,AWS S3, 阿里云 OSS。
回调通知:我们支持回调通知的能力,通过配置您的回调域名,云端切片的事件状态会通知到您的回调服务器。
音频切片及视频截图流程
如下图所示,房间里面主播1和主播2都上行了音视频流,假设您通过机器人订阅了主播1和主播2的音视频流,并设置同时进行视频截图和音频切片,后台会分别拉取主播1和主播2的音视频流,把音视频流切片成多个独立的音频文件和截图图片文件:
主播1的多个音频切片文件。
主播1的多个视频截图图片文件。
主播2的多个音频切片文件。
主播2的多个视频截图图片文件。
后台会把这些文件上传到您指定的云存储平台(对象存储 COS,AWS S3或者 阿里云OSS)。具体切片流程如下:

API 接口和切片并发限制
单个接口超时时间为6秒。
单次切片任务最大支持同时订阅的房间内主播数为25个,主播只上行音频也会单独占据一路。
切片任务执行流程
启动切片任务(CreateCloudSlice)
通过您的后台服务调用 REST API (CreateCloudSlice)来启动云端切片,需要重点关注参数— 任务 ID(TaskId);这个参数是本次切片任务的唯一标识,您需要保存下这个任务 ID 作为后续针对这个切片任务接口操作的输入参数。
说明:
1. 发起任务(CreateCloudSlice)
发起云端切片任务的接口 CreateCloudSlice 中需要您指定分配切片机器人的进房参数 UserId 和 UserSig(如何获取 UserSig),请不要与您房间内的正常主播或观众使用的 UserId 重复且不可与正在切片中的房间内指定的切片机器人 UserId 一致,否则会导致切片任务失败。
2. 指定切片用户(SubscribeStreamUserIds)
您也可以通过参数 SubscribeStreamUserIds 指定想要切片或者不想切片的主播用户的黑白名单信息,当然我们也支持在切片的过程中进行更新操作。
3. 指定存储位置(SliceStorageParams)
3.1 存储位置:支持存储至AWS S3 或对象存储 COS,请通过在SliceStorageParams 参数进行指定您的存储参数。
3.2 切片格式:图片切片文件为png, 音频切片文件为ogg
查询切片任务状态 (DescribeCloudSlice)
如果需要,您可以调用该接口查询切片服务的状态。
修改切片任务参数(ModifyCloudSlice)
停止切片任务 (DeleteCloudSliceTask)
成功开启切片任务后,可以使用此接口来停止任务。
切片文件管理
切片文件命名说明
音频切片默认命名为:
{你的桶名称}/{taskId}/{userId}/audios/{sdkappid}_{roomId}_{userid}_{UTC时间}.ogg
视频截图图片默认命名为:
{你的桶名称}/{taskId}/{userId}/images/{sdkappid}_{roomId}_{userid}_{UTC时间}.png
字段含义说明:
字段 | 含义 |
<taskId> | 切片的任务 ID |
<sdkappid> | 切片任务的 SdkAppId |
<roomId> | 切片的房间号 |
<userid> | 切片的用户 ID |
<UTC时间> | 当前时间字符串 例如:20250106143143 |
查找切片文件
音频切片路径:{您的桶名称}/{taskId}/{userId}/audios/
视频截图路径:{您的桶名称}/{taskId}/{userId}/images/

切片回调事件
我们针对云端切片功能提供了多种的回调事件,帮助您及时了解切片任务的处理和完成情况。
切片回调地址配置

回调接口
您可以提供一个接收回调的 HTTP/HTTPS 服务网关来订阅回调消息。当相关事件发生时,云切片系统会回调事件通知到您的消息接收服务器。
事件回调消息格式
事件回调消息以 HTTP/HTTPS POST 请求发送给您的服务器,其中:
字符编码格式:UTF-8。
请求:body 格式为 JSON。
应答:HTTP STATUS CODE = 200,服务端忽略应答包具体内容,为了协议友好,建议客户应答内容携带 JSON: {"code":0}。
切片回调事件
参数说明
事件回调消息的 header 中包含以下字段:
字段名 | 值 |
Content-Type | application/json |
Sign | 签名值 |
SdkAppId | SDK 应用 ID 值 |
事件回调消息的 body 中包含以下字段:
字段名 | 类型 | 含义 |
EventGroupId | Number | 事件组 ID, 云端切片固定为10 |
EventType | Number | 回调通知的事件类型 |
CallbackTs | Number | 事件回调服务器向您的服务器发出回调请求的 Unix 时间戳,单位为毫秒 |
EventInfo | JSON Object | 事件信息 |
事件类型说明:
字段名 | 类型 | 含义 |
EVENT_TYPE_CLOUD_SLICE_START | 1001 | 云端切片模块启动 |
EVENT_TYPE_CLOUD_SLICE_STOP | 1002 | 云端切片模块退出 |
EVENT_TYPE_CLOUD_SLICE_UPLOAD_START | 1003 | 云端切片切片文件上传任务启动,仅在选择对象存储时回调 |
EVENT_TYPE_CLOUD_SLICE_FILE_INFO | 1004 | 云端切片 生成视频截图或者音频分片文件,上传成功后回调,仅在选择对象存储时回调 |
EVENT_TYPE_CLOUD_SLICE_UPLOAD_STOP | 1005 | 云端切片文件上传结束,仅在选择对象存储时回调 |
EVENT_TYPE_CLOUD_SLICE_UPLOAD_ERROR | 1006 | 云端切片投递模块发生错误 |
事件信息说明:
字段名 | 类型 | 含义 |
RoomId | String/Number | 房间名(类型与客户端房间号类型一致) |
EventTs | Number | 事件发生的 Unix 时间戳,单位为秒 (不建议使用该字段,建议使用EventMsTs) |
EventMsTs | Number | 事件发生的 Unix 时间戳,单位为毫秒 |
UserId | String | 切片机器人的用户 ID |
TaskId | String | 切片任务 ID,一次云端切片任务唯一的 ID |
Payload | JsonObject | 根据不同事件类型定义不同 |
事件类型为1001 (EVENT_TYPE_CLOUD_SLICE_START) 时 Payload 的定义:
字段名 | 类型 | 含义 |
Status | Number | 0:代表切片模块启动成功 1:代表切片模块启动失败 |
{"EventGroupId":10,"EventType":1001,"CallbackTs":1726125338219,"EventInfo":{"RoomId":"960025","EventTs":1726125338,"EventMsTs":1726125338219,"UserId":"inspect","TaskId":"-npVqpdU7sBobiK1iskE3BwlLIebCMrbKUbnL4K-rO+8oZWQndib9uvO4Deq9P1Na+sXGNGNuAE.""Payload":{"Status":0}}}
事件类型为1002 (EVENT_TYPE_CLOUD_SLICE_STOP) 时 Payload 的定义:
字段名 | 类型 | 含义 |
LeaveCode | Number | 0:代表切片模块正常调用停止切片退出 1:切片机器人被客户踢出房间 2:客户解散房间 3:服务器将切片机器人踢出 4:服务器解散房间 99:代表房间内除了切片机器人没有其他用户流,超过指定时间退出 100:房间超时退出 101:同一用户重复进入相同房间导致机器人退出 |
{"EventGroupId":10,"EventType":1002,"CallbackTs":1729601782073,"EventInfo":{"RoomId":"975626","EventTs":"1729601782","EventMsTs":1729601782073,"UserId":"SliceTaskDuration1-partner-robot","TaskId":"-nHRjqhU7gTG0UIL-MquzG8D0Q+wehTbVTeeIIK-rO+8oZWQndibtueIpQ8A0F3n9PEVRk0rngE.","Payload":{"LeaveCode":99}}}
事件类型为1003 (EVENT_TYPE_CLOUD_SLICE_UPLOAD_START) 时 Payload 的定义:
字段名 | 类型 | 含义 |
Status | Number | 0:代表上传模块正常启动 1:代表上传模块初始化失败。 |
{"EventGroupId":10,"EventType":1003,"CallbackTs":1726750023538,"EventInfo":{"RoomId":"295210","EventTs":1726750023,"EventMsTs":1726750023538,"UserId":"inspect","TaskId":"-nHwXIdU7mJvL22pFsXZ-v7OgEzq1OzbNXe9L4K-4pycoZWQndib3ZfzqN7Wq+AdiPLMBLxd0gE.","Payload":{"Status":0}}}
事件类型为1004 (EVENT_TYPE_CLOUD_SLICE_FILE_INFO )时 Payload 的定义:
字段名 | 类型 | 含义 |
Payload | 对象 | 切片结果 |
StreamUserId | String | 当前主播id |
{"EventGroupId":10,"EventType":1004,"CallbackTs":1726750309161,"EventInfo":{"RoomId":"963600","EventTs":1730186326,"EventMsTs":1730186326109,"UserId":"SliceCustomUploadCase6-partner-robot","StreamerUserId":"SliceCustomUploadCase6-user0","TaskId":"-nHRjqhU7kGRgNhGI8Gq8JkT7wnFeUXbXG-6IYK-yb3t8ZWQndibhWMUwNxQwRlgnWuvEuBSqAE.","Payload":{"FileList":"20012177_2428_1929088_20250106143143.png"}}}
事件类型为1005 (EVENT_TYPE_CLOUD_SLICE_UPLOAD_STOP) 时 Payload 的定义:
字段名 | 类型 | 含义 |
Status | Number | 结束送审 |
{"EventGroupId":10,"EventType":1005,"CallbackTs":1726751347072,"EventInfo":{"RoomId":"295211","EventTs":1726751347,"EventMsTs":1726751347072,"UserId":"inspect","TaskId":"-nHwXIdU7jx6C00Nt8Vr+3h4GwYdP7zbeHi9L4K-4pycoZWQndibqFeEaV4LvjFqSuQvaAkrNQE.","Payload":{"Status":0}}}
事件类型为1006 (EVENT_TYPE_CLOUD_SLICE_UPLOAD_ERROR) 时 Payload 的定义:
字段名 | 类型 | 含义 |
Code | Number | COS 或者第三方存储错误码 |
Message | String | COS 或者第三方存储错误消息 |
{"EventGroupId":10,"EventType":1006,"CallbackTs":1726751347072,"EventInfo":{"RoomId":"295211","EventTs":1726751347,"EventMsTs":1726751347072,"UserId":"inspect","TaskId":"-nHwXIdU7jx6C00Nt8Vr+3h4GwYdP7zbeHi9L4K-4pycoZWQndibqFeEaV4LvjFqSuQvaAkrNQE.","Payload":{"Code":10002,"Message":"BadRequest"}}}