含 UI 集成方案

有奖征文|投稿上云技术实践,赢取价值5000元大奖> HOT
文档中心 > 实时音视频 > 高级功能 > 实现云端录制与回放

场景说明

在远程教育、秀场直播、视频会议、远程定损、金融双录、在线医疗等应用场景中,考虑取证、质检、审核、存档和回放等需求,常需要将整个视频通话或互动直播过程录制和存储下来的情况。
说明
下文将针对实时音视频最新推出的云端录制能力进行使用说明,如果您当前的 TRTC 应用(sdkappid)使用的是旧版云端录制,详情请参见 旧版云端录制。判断当前应用的云端录制的类型和旧版云端录制能力切换为新版的方式,详情请参见 控制台>云端录制说明

功能说明

通过 TRTC 的云端录制功能,您可以将房间中的每一个用户的音视频流都录制成独立的文件(单流录制),或者把同一个房间的音视频媒体流合流录制成一个文件(合流录制)。
订阅流: 我们支持通过制定订阅用户的黑白名单的方式来指定您需要订阅的用户媒体流(仅支持 API 录制)
转码参数:合流的场景下,我们支持通过设置编解码的参数来指定录制的视频文件的质量。
合流参数:合流的场景下,我们支持多种灵活可变的自动多画面布局模板和自定义布局模板。
文件存储:支持存储到云点播主应用或者子应用账号体系下,目前只支持腾讯云点播。
回调通知:我们支持回调通知的能力,通过配置您的回调域名,云端录制的事件状态会通知到您的回调服务器。

单流录制和合流录制说明

单流录制

如下图所示为单流录制的场景,房间1234里面主播1和主播2都上行了音视频流,假设您订阅了主播1和主播2的音视频流,并设置录制模式为单流录制,录制后台会分别拉取主播1和主播2的音视频流,并把他们录制成独立的媒体文件包含:
主播1的一个音视频录制文件。
主播2的一个音视频录制文件。
录制后台会把这些文件上传到您指定的 云点播。具体录制流程如下:



合流录制

如下图所示为合流录制的场景,房间1234里面有主播1和主播2都上行了音视频流,假设您订阅了主播1和主播2的音视频流,设置录制模式为合流录制,录制后台会分别拉取主播1和主播2的音视频流,并把他们的视频流按照您配置多画面模板进行合流,音频流进行混音,最后把媒体流混合成一路媒体文件。包含:合流后的的一个音视频 MP4/HLS 录制文件。
录制后台会把这些文件上传到您指定的云点播,您需要通过回调保存对应录制文件的存于云点播的 媒资信息



录制文件命名和文件切分说明

录制 MP4 文件名命名规则

单流录制 MP4 文件名规则:<SdkAppId>_<RoomId>_UserId_s_<UserId>_UserId_e_<MediaId>_<Index>.mp4
合流录制 MP4 文件名规则:<SdkAppId>_<RoomId>_<Index>.mp4

录制 HLS 文件名命名规则

单流录制 HLS 文件名规则:<SdkAppId>_<RoomId>_UserId_s_<UserId>_UserId_e_<MediaId>_<Type>.m3u8
合流录制 HLS 文件名规则:<SdkAppId>_<RoomId>.m3u8
字段含义说明
字段
含义
<SdkAppId>
录制任务的 SdkAppId
<RoomId>
录制的房间号,如果这里 RoomId 如果是字符串房间号,我们会对房间号先做 base64 操作,再把 base64 后的字符串中符号'/'替换成 '-' (中划线),符号'='替换成 '.'
<UserId>
录制的用户 ID,UserId 会先做 base64 操作,再把base64后的字符串中符号'/'替换成 '-' (中划线),符号'='替换成 '.'
<MediaId>
主辅流标识,main 或者 aux
<Index>
如果没有触发 MP4 切片逻辑(大小超过2GB或时长超过24小时)则无该字段,否则为切片的索引号,从1开始递增
<Type>
录制文件流类型,audio/video/audiovideo

录制文件切分说明

录制 MP4 文件切分的条件:
录制时长超过24小时。
单个 MP4 文件大小达到 2GB。
录制 HLS 文件切分的条件:
录制任务持续时间超过14天时,HLS文件将会被切分。

录制上传点播说明

录制后台会在录制结束后将录制的 MP4/HLS 文件通过您指定的方式上传到点播平台,并通过回调的形式把播放地址发送给您。如果录制模式为单流录制模式,每一个订阅的主播都会有一个对应的播放地址;如果录制模式为合流录制模式,只有一个合流后媒体的播放地址。
1. 通过 API 发起录制:存储参数StorageParams中必须指定 CloudVod 参数,请确保已经开通腾讯云点播服务。
2. 上传点播任务的过程中使用 DescribeCloudRecording 只能查询到录制任务进行状态,不会携带录制文件的信息。

API 接口和录制并发限制

录制接口的调用频率限制为20qps(如需提高 QPS 请 提交工单)。
单个接口超时时间为6秒。
默认并发录制支持100路,如果需要更多路数,请 提交工单 联系我们。
单次录制任务最大支持同时订阅的房间内主播数为25个,主播只上行音频也会单独占据一路。

录制控制方案

TRTC 提供了两种云端录制方案,分别是全局自动录制API手动录制,这两种方案并不冲突,可以同时使用两种录制方案,但会产生两份录制文件和费用。API 录制相比全局自动录制的优点是录制灵活、功能完备,客户可以指定录制订阅房间内的主播,自定义合流布局,录制中途更新布局和订阅等。全局自动录制的优点是录制不需客户启动和停止,由 TRTC 后台管理录制任务。

方案一:全局自动录制

TRTC 提供了一种无需手动发起并管理录制任务的自动录制方式,要使用该种录制方案,请前往实时音视频控制台 > 应用管理 > 功能配置中开启云端录制功能,完成全局自动录制模板配置并开启全局自动录制。
生效后(生效等待5分钟-10分钟)TRTC 房间中的主播上行音视频后将触发启动录制任务,房间内主播都退房且超过设置的等待续录时间后将触发停止录制任务。


开启全局自动录制功能前请配置全局自动录制模板,全局自动录制支持 单流模式合流模式 两种录制模式,可以同时选中单流和合流模式进行录制,开启后只对新创建的房间有效,对开启自动录制功能之前已经创建的房间不生效。

全局单流录制

全局单流录制录制格式支持音视频录制、纯音频录制和纯视频录制,录制文件支持 MP4/HLS 格式,录制文件切片策略请参见 录制文件切分说明
配置项
说明
录制模式
单流录制:房间中的每个主播的视频画面都会单独保存成一份文件
合流录制:房间中的所有主播的视频画面都会混合成一份文件进行录制
录制格式
音视频格式:录制房间内的音频和视频流,适用于视频通话、互动直播场景
纯音频格式:只录制房间内的音频流
文件格式
支持 MP4 和 HLS
续录等待时长
设置续录超时时长,当打断间隔不超过设定的续录超时时长时,一次通话(或直播)只会生成一个文件,但需要等待续录时间超时后才能收到录制文件,单位为秒,取值范围5 - 86400。(续录期间会收取音频费用,请合理设置续录时长)
注意:合流模式下,续录等待期内会补黑帧和静音帧继续录制,单流模式下则不会录制。在续录等待期内,单流和合流录制会按照音频时长收取录制费用。
文件录制存储
支持存储至云点播,支持指定云点播应用和录制文件在云点播的存储时间。
说明:
单流录制模式下房间内的音视频流将按照推流参数进行每一路单独录制,无需设置转码。
续录等待时长未到期内录制机器人会在房间内继续等待主播上行进而完成录制,并不会因为主播退房后就立即结束,请合理设置。



注意:
单流录制最多录制一个房间内的25个主播,如果超过25个主播将会按照进房时间由先到后排序,录制前25位主播(如需单流录制超过25位主播,请参见 API 录制
续录等待时间默认为5s, 房间内无主播的时间超过设置的续录时间,将会分成多个录制任务,对应的录制文件也是独立的,房间内无主播的时间未超过续录时间,那么录制任务保持,录制文件不切分。

全局合流录制

合流录制模式下,您需要额外设置自动录制过程的视频转码、音频转码参数和合流布局参数来控制录制文件输出规格。全局合流录制音视频转码参数设置如下:
配置项
说明
视频分辨率
视频宽度和高度限制在[16,2560],且视频宽度 * 视频高度不得超过2560* 1440,默认视频宽度640px,视频高度480px
视频码率
视频码率限制在[64, 8192],默认550kbps
视频帧率
视频帧率限制在[1,60],默认15fps
视频 GOP
GOP 限制在[1,10],默认10s
音频采样率
支持48000、44100和16000Hz
音频码率
音频码率限制在[32, 128],默认64kbps
音频声道
支持单、双声道
全局合流录制支持设置预制的布局模板,具体如下:
九宫格模板:所有用户的视频画面大小一致,平分整个屏幕,人数越多,每个画面的尺寸越小。最多支持8个画面
屏幕分享模板:适合视频会议和在线教育场景的布局,屏幕分享(或者主讲的摄像头)始终占据屏幕左侧的大画面位置,其他用户依次垂直排列于右侧,最多支持1个大画面和7个小画面。
悬浮模板:第一个进入房间的用户的视频画面会铺满整个屏幕,其他用户的视频画面从左下角依次水平排列,显示为小画面,最多4行,每行4个,小画面悬浮于大画面之上。最多支持1个大画面和7个小画面。

屏幕分享模板和悬浮模板需要指定大画面用户规则(房间内需要布局成大画面的主播用户 ID 的前缀):
如果房间内主播 ID 未按照前缀匹配到,屏幕分享模板对应大画面会空出预留布局,悬浮模板会按照最早进房的主播布局;
如果房间内主播 ID 匹配到多个,则都会按照进房时间最早的主播布局。

混流录制人数:自动录制下混流人数限制为2-8人,默认2人。
说明:
云端录制提供了详细的回调事件,如需订阅回调事件,请完成回调地址设置,详情请参见 设置录制回调


方案二:API 录制


启动录制

通过您的后台服务调用 REST API (CreateCloudRecording)来启动云端的录制,需要重点关注参数— 任务 ID(TaskId);这个参数是本次录制任务的唯一标识,您需要保存下这个任务 ID 作为后续针对这个录制任务接口操作的输入参数。
说明:
发起云端录制任务的接口 CreateCloudRecording 中需要您指定分配录制机器人的进房参数 UserId 和UserSig(如何获取UserSig),请不要与您房间内的正常主播或观众使用的 UserId 重复且不可与正在录制中的房间内指定的录制机器人UserId一致,否则会导致录制任务失败。

录制的模式(RecordMode

单流录制:实时录制房间内每个主播的音频视频单录制为一个音视频文件上传到云点播。
合流录制:将房间内您所订阅所有主播的音视频流混录成一个音视频文件上传到云点播。

指定录制用户(SubscribeStreamUserIds

默认情况下,云端录制会录制房间内所有的媒体流(最多25路),超过25个用户,默认录制最先进房的25位主播。您也可以通过参数 SubscribeStreamUserIds 指定想要录制或者不想录制的主播用户的黑白名单信息,当然我们也支持在录制的过程中进行更新操作。单流录制场景,如果房间内主播超过25人,可以通过设置订阅名单发起多次录制任务实现。

指定存储位置和录制格式(StorageParams)

存储位置:目前仅支持存储至云点播VOD,请通过在StorageParamsCloudVod 参数进行指定您的云点播存储参数。
录制格式:默认录制格式是MP4, 如果需要录制成HLS, 可通过CloudVodTencentVod内的MediaType设置为1来指定格式为HLS。

录制开始的时间的获取

通过订阅回调,监听录制回调事件。在事件类型311中的 BeginTimeStamp 字段您可以获取到录制文件对应的录制起始时间戳,EndTimeStamp 字段可以获取到对应的录制结束时间戳。
{
"EventGroupId": 3,
"EventType": 311,
"CallbackTs": 1622186289148,
"EventInfo": {
"RoomId": "xx",
"EventTs": "1622186289",
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"UserId": "anchor1",
"TrackType": "video",
"MediaId": "main",
"FileId": "xxxxx",
"VideoUrl": "http://xxxxx",
"CacheFile": "xxxxxx",
"BeginTimeStamp": 1622186279,
"EndTimeStamp": 1622186811
}
}
}

合流录制的布局模式参数(MixLayoutMode


悬浮布局

默认第一个进入房间的主播(也可以指定一个主播)的视频画面会铺满整个屏幕。其他主播的视频画面从左下角开始依次按照进房顺序水平排列,显示为小画面,小画面悬浮于大画面之上。当画面数量小于等于17个时,每行4个(4 × 4排列)。当画面数量大于17个时,重新布局小画面为每行5个(5 × 5)排列。最多支持25个画面,如果用户只发送音频,仍然会占用画面位置。
悬浮布局随着订阅的子画面增加按照下图进行变化:
子画面小于等于17个时
每个小画面的宽和高分别为整个画布宽和高的 0.235
相邻小画面的左右和上下间距分别为整个画布宽和高的 0.012
小画面距离画布的水平和垂直边距也分别为整个画布宽和高的 0.012



子画面大于17个时
每个小画面的宽和高分别为整个画布宽和高的 0.188
相邻小画面的左右和上下间距分别为整个画布宽和高的 0.01
小画面距离画布的水平和垂直边距也分别为整个画布宽和高的 0.01




屏幕分享布局:

指定一个主播在屏幕左侧的大画面位置(如果不指定,那么大画面位置为背景色),其他主播自上而下依次垂直排列于右侧。当画面数量少于17个的时候,右侧每列最多8人,最多占据两列。当画面数量多于17个的时候,超过17个画面的主播从左下角开始依次水平排列。最多支持24个画面,如果主播只发送音频,仍然会占用画面位置。
屏幕分享布局随着订阅的子画面增加按照下图进行变化:
子画面小于等于5个时
右侧小画面的宽为整个画布宽的1/5,右侧小画面的高为整个画布高的1/4
左侧大画面的宽为整个画布宽的4/5,左侧大画面的高为整个画布高



子画面大于5且小于等于7个时
右侧小画面的宽为整个画布宽的1/7,右侧小画面的高为整个画布高的1/6
左侧大画面的宽为整个画布宽的6/7,左侧大画面的高为整个画布高



子画面大于7且小于等于9个时
右侧小画面的宽为整个画布宽的1/9,右侧小画面的高为整个画布高的1/8
左侧大画面的宽为整个画布宽的8/9,左侧大画面的高为整个画布高



子画面大于9小于等于17个时
右侧小画面的宽为整个画布宽的1/10,右侧小画面的高为整个画布高的1/8
左侧大画面的宽为整个画布宽的4/5,左侧大画面的高为整个画布高



子画面大于17个时
右(下)侧小画面的宽为整个画布宽的1/10,右(下)侧小画面的高为整个画布高的1/8
左侧大画面的宽为整个画布宽的4/5,左侧大画面的高为整个画布高的7/8




九宫格布局

根据主播的数量自动调整每个画面的大小,每个主播的画面大小一致,最多支持25个画面。 九宫格布局随着订阅的子画面增加按照下图进行变化:
子画面为1个时
每个小画面的宽和高分别为整个画布宽和高



子画面为2个时
每个小画面的宽为整个画布宽的1/2
每个小画面的高为整个画布高



子画面小于等于4个时
每个小画面的宽和高分别为整个画布宽和高的 1/2



子画面小于等于9个时
每个小画面的宽和高分别为整个画布宽和高的 1/3



子画面小于等于16个时
每个小画面的宽和高分别为整个画布宽和高的 1/4



子画面大于16个时
每个小画面的宽和高分别为整个画布宽和高的1/5




自定义布局

根据您的业务需要在 MixLayoutList 内自己定制每个主播画面的布局信息。

合流录制的水印参数 (MixWatermark)

我们支持在合流录制中添加图片水印,最大支持个数为25个,可以在画布任意位置添加水印。
字段名
解释
Top
水印相对左上角的垂直位移
Left
水印相对左上角的水平位移
Width
水印显示的宽度
Height
水印显示的高度
url
水印文件的存储 URL

查询录制(DescribeCloudRecording

如果需要,您可以调用该接口查询录制服务的状态。
注意:
只有录制任务存在的时候才能查询到信息,如果录制任务已经结束会返回错误。
如果是上传云点播任务,该接口返回的 StorageFile 为空。

更新录制(ModifyCloudRecording

如果需要,您可以调用该接口修改录制服务的参数,如订阅黑白名单 SubscribeStreamUserIds(单流和合流录制有效),录制的模板参数 MixLayoutParams(合流录制有效)。
注意:
更新操作是全量覆盖的操作,并不是增量更新的操作,您每次更新都需要携带全量的信息,包括模板参数 MixLayoutParams 和黑白名单 SubscribeStreamUserIds,因此您需要保存之前的启动录制的参数或者重新计算完整的录制相关参数。

停止录制(DeleteCloudRecording

在录制结束之后需要调用停止录制(DeleteCloudRecording)的接口来结束录制任务,否则录制任务会等待到达预设的超时时间 MaxIdleTime 后自动结束。
注意:
MaxIdleTime 的定义是房间内持续没有主播的状态超过 MaxIdleTime 的时长,这里如果房间是存在有主播,但是主播没有上行数据是不会进入超时的计时状态的,此时后台录制会持续工作。建议业务在录制结束的时候调用此接口结束录制任务。

回调接口

您可以提供一个接收回调的 HTTP / HTTPS 服务网关来订阅回调消息。当相关事件发生时,云录制系统会回调事件通知到您的消息接收服务器。
说明:
回调地址请前往实时音视频控制台应用管理-配置管理下的<回调配置>下进行设置,详情请见设置回调地址

事件回调消息格式

事件回调消息以 HTTP/HTTPS POST 请求发送给您的服务器,其中:
字符编码格式:UTF-8。
请求:body 格式为 JSON。
应答:HTTP STATUS CODE = 200,服务端忽略应答包具体内容,为了协议友好,建议客户应答内容携带 JSON: {"code":0}。

参数说明

事件回调消息的 header 中包含以下字段

字段名
Content-Type
application/json
Sign
签名值
SdkAppId
sdk application id

事件回调消息的 body 中包含以下字段:

字段名
类型
含义
EventGroupId
Number
事件组 ID, 云端录制固定为3
EventType
Number
回调通知的事件类型
CallbackTs
Number
事件回调服务器向您的服务器发出回调请求的 Unix 时间戳,单位为毫秒
EventInfo
JSON Object
事件信息

事件类型说明

字段名
类型
含义
EVENT_TYPE_CLOUD_RECORDING_RECORDER_START
301
云端录制录制模块启动
EVENT_TYPE_CLOUD_RECORDING_RECORDER_STOP
302
云端录制录制模块退出
EVENT_TYPE_CLOUD_RECORDING_FAILOVER
306
云端录制发生迁移,原有的录制任务被迁移到新负载上时触发
EVENT_TYPE_CLOUD_RECORDING_DOWNLOAD_IMAGE_ERROR
309
云端录制下载解码图片文件发生错误
EVENT_TYPE_CLOUD_RECORDING_VOD_COMMIT
311
云端录制 VOD 录制任务上传媒体资源完成
EVENT_TYPE_CLOUD_RECORDING_VOD_STOP
312
云端录制 VOD 录制任务结束
注意:
301-309区间的回调状态为实时录制的中间状态,可以更加清晰的知晓录制任务的进行过程并记录状态,实际录制文件上传到点播成功会回调311事件,整体任务结束回调312事件。

事件信息说明

字段名
类型
含义
RoomId
String/Number
房间名(类型与客户端房间号类型一致)
EventTs
Number
时间发生的 Unix 时间戳,单位为秒
UserId
String
录制机器人的用户 ID
TaskId
String
录制 ID,一次云端录制任务唯一的 ID
Payload
JsonObject
根据不同事件类型定义不同

事件类型为301
(EVENT_TYPE_CLOUD_RECORDING_RECORDER_START)时 Payload 的定义:
字段名
类型
含义
Status
Number
0:代表录制模块启动成功
1:代表录制模块启动失败
{
"EventGroupId": 3,
"EventType": 301,
"CallbackTs": 1622186275913,
"EventInfo": {
"RoomId": "xx",
"EventTs": "1622186275",
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"Status": 0
}
}
}

事件类型为302
(EVENT_TYPE_CLOUD_RECORDING_RECORDER_STOP)时 Payload 的定义:
字段名
类型
含义
LeaveCode
Number
0:代表录制模块正常调用停止录制退出
1:录制机器人被客户踢出房间
2:客户解散房间
3:服务器将录制机器人踢出
4:服务器解散房间
99:代表房间内除了录制机器人没有其他用户流,超过指定时间退出
100:房间超时退出
101:同一用户重复进入相同房间导致机器人退出
{
"EventGroupId": 3,
"EventType": 302,
"CallbackTs": 1622186354806,
"EventInfo": {
"RoomId": "xx",
"EventTs": "1622186354",
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"LeaveCode": 0
}
}
}

事件类型为306
(EVENT_TYPE_CLOUD_RECORDING_FAILOVER)时 Payload 的定义:
字段名
类型
含义
Status
Number
0:代表此次迁移已经完成
{
"EventGroupId": 3,
"EventType": 306,
"CallbackTs": 1622191989674,
"EventInfo": {
"RoomId": "20015",
"EventTs": 1622191989,
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"Status": 0
}
}
}

事件类型为309
(EVENT_TYPE_CLOUD_RECORDING_DOWNLOAD_IMAGE_ERROR)时 Payload 的定义:
段名
类型
含义
Url
String
下载失败的 URL
{
"EventGroupId": 3,
"EventType": 309,
"CallbackTs": 1622191989674,
"EventInfo": {
"RoomId": "20015",
"EventTs": 1622191989,
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"Url": "http://xx",
}
}
}

事件类型为311
(EVENT_TYPE_CLOUD_RECORDING_VOD_COMMIT)时 Payload 的定义:
字段名
类型
含义
Status
Number
0:代表本录制文件正常上传至点播平台
1:代表本录制文件滞留在服务器或者备份存储上
2:代表本录制文件上传点播任务异常
UserId
String
本录制文件对应的用户 ID(当录制模式为合流模式时,此字段为空)
TrackType
String
audio/video/audio_video
MediaId
String
main/aux(main 代表主流,aux 代表辅流)
FileId
String
本录制文件在点播平台的唯一 ID
VideoUrl
String
本录制文件在点播平台的播放地址
CacheFile
String
本录制文件对应的 MP4/HLS 文件名
StartTimeStamp
Number
本录制文件开始的 UNIX 时间戳(毫秒)
EndTimeStamp
Number
本录制文件结束的 UNIX 时间戳(毫秒)
Errmsg
String
statue 不为0时,对应的错误信息
上传成功的回调:
{
"EventGroupId": 3,
"EventType": 311,
"CallbackTs": 1622191965320,
"EventInfo": {
"RoomId": "20015",
"EventTs": 1622191965,
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"Status": 0,
"TencentVod": {
"UserId": "xx",
"TrackType": "audio_video",
"MediaId": "main",
"FileId": "xxxx",
"VideoUrl": "http://xxxx",
"CacheFile": "xxxx.mp4",
"StartTimeStamp": xxxx,
"EndTimeStamp": xxxx
}
}
}
}
上传失败的回调:
{
"EventGroupId": 3,
"EventType": 311,
"CallbackTs": 1622191965320,
"EventInfo": {
"RoomId": "20015",
"EventTs": 1622191965,
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"Status": 1,
"Errmsg": "xxx",
"TencentVod": {
"UserId": "123",
"TrackType": "audio_video",
"CacheFile": "xxx.mp4"
}
}
}
}

事件类型为312
(EVENT_TYPE_CLOUD_RECORDING_VOD_STOP)时 Payload 的定义:
字段名
类型
含义
Status
Number
0:代表本次上传 VOD 任务已经正常退出
1:代表本次上传 VOD 任务异常退出
{
"EventGroupId": 3,
"EventType": 312,
"CallbackTs": 1622191965320,
"EventInfo": {
"RoomId": "20015",
"EventTs": 1622191965,
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"Status": 0
}
}
}

录制文件管理

查找录制文件

在开启录制功能以后,TRTC 系统中录制下来的文件就能在腾讯云点播服务中找到。您可以直接在云点播控制台手动查找,也可以由您的后台服务器使用 REST API 进行定时筛选:

方式一:在点播控制台手动查找

1. 登录 云点播控制台,在左侧导航栏选择媒资管理
2. 单击列表上方的前缀搜索,选择前缀搜索,在搜索框输入关键词,按照录制文件命名规则填入,例如合流录制下填入:1400000123_1001,单击
img

,将展示视频名称前缀相匹配的视频文件。
3. 您可以根据创建时间筛选所需的目标文件,也可以筛选音视频来源伴生录制进行检索。

方式二:通过点播 REST API 查找

腾讯云点播系统提供了一系列 REST API 来管理其上的音视频文件,您可以通过 搜索媒体信息 这个 REST API 来查询您在点播系统上的文件。您可以通过TrtcSdkAppIds(对应发起录制的应用SdkAppid)TrtcRoomIds(对应发起录制的房间号Roomid)参数进行匹配查找。 REST API请求示例:
https://vod.tencentcloudapi.com/?Action=SearchMedia
&TrtcSdkAppIds.0=1400xxxx123
&Sort.Field=CreateTime
&Sort.Order=Desc
&<公共请求参数>

接收录制文件

除了 查找录制文件,您还可以通过配置回调地址,让腾讯云主动把新录制文件的消息推送给您的服务器。 房间里的最后一路音视频流退出后,腾讯云会结束录制并将文件转存到云点播平台,该过程大约默认需要30秒至数分钟(具体时间根据您所录制的文件大小而定,若您设置了续录时间为300秒,则等待时间将在默认基础上叠加300秒)。转存完成后,腾讯云会通过您在 设置录制回调 中设置的回调地址(HTTP/HTTPS)向您的服务器发送通知。

腾讯云会将录制和录制相关的事件都通过您设置的回调地址推送给您的服务器,您可以通过接收事件类型为311的上传成功回调来获取录制文件的播放地址 VideoUrl,具体回调信息见下方:
{
"EventGroupId": 3,
"EventType": 311,
"CallbackTs": 1622191965320,
"EventInfo": {
"RoomId": "20015",
"EventTs": 1622191965,
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"Status": 0,
"TencentVod": {
"UserId": "xx",
"TrackType": "audio_video",
"MediaId": "main",
"FileId": "xxxx",
"VideoUrl": "http://xxxx",
"CacheFile": "xxxx.mp4",
"StartTimeStamp": xxxx,
"EndTimeStamp": xxxx
}
}
}
}

删除录制文件

腾讯云点播系统提供了一系列 REST API 来管理其上的音视频文件,您可以通过 删除媒体 API 删除某个指定的文件。 REST 请求示例:
https://vod.tencentcloudapi.com/?Action=DeleteMedia
&FileId=52858907988664150587
&<公共请求参数>

回放录制文件

在线教育等场景中,通常需要在直播结束后多次回放录制文件,以便充分利用教学资源。

获取点播地址(VideoUrl)

接收录制文件 时,可以获取回调消息中 VideoUrl 字段,该字段为当前录制文件在腾讯云的点播地址。

对接点播播放器

根据使用平台对接点播播放器,具体操作参考如下:
注意:
建议使用 专业版 TRTC SDK,专业版集合了 播放器(Player+)直播 SDK 等功能,由于底层模块的高度复用,集成专业版的体积增量要小于同时集成两个独立的 SDK,并且可以避免符号冲突(symbol duplicate)的困扰。

相关费用

云端录制与回放功能使用到的功能包括:云端录制服务、云点播的回放文件存储与处理、云点播的播放服务,以及终端 SDK 播放点播视频的能力。可能会根据实际需求产生以下费用。

云端录制费用

云端录制费用取决于您所录制的时长和画面分辨率,同时根据录制模式的不同(单流或者合流)进行区分定价,录制费用计算公式如下:
云端录制费用 = 录制音频费用 + 录制视频费用 = 录制音频输入时长用量 × 单路或多路对应的音频单价 + 录制视频各分辨率档位输入时长用量 × 单路或多路对应的相应视频分辨率档位单价
说明:
更多详细云端录制费用说明和计费示例,请参见 云端录制计费说明

点播文件存储费用

录制出的视频文件存放于云点播服务,会使用云点播的云端存储服务。由于存储本身会产生磁盘资源的消耗,因此需要按照存储的资源占用进行收费。存储的时间越久费用也就越高,因此如无特殊需要,您可以将文件的存储时间设置的短一些来节省费用,或者将文件存放在自己的服务器上。存储费用可以选择 视频存储(日结)价格 进行日结计算,也可以购买 存储资源包

点播文件播放费用

如果您录制的视频文件要被用于回看播放,会使用云点播的 CDN 播放功能。由于观看本身会产生 CDN 流量消耗,因此需要按照点播的价格进行计费,默认按流量收费。观看的人数越多费用越高,观看费用可以选择 视频加速(日结)价格 进行日结计算,也可以购买 流量套餐包

SDK 播放授权

音视频通话(TRTC)全功能版本 SDK 提供了功能全面性能强大的视频播放能力,可轻松配合云点播实现视频播放功能。移动端 SDK 在10.1及以上的版本可通过获取指定 License 以解锁视频播放能力。
注意:
TRTC 的音视频通话、直播的播放能力无需 License 授权。
您可直接 购买视频播放 License,或通过 购买的云点播流量包 免费获赠视频播放 License 或 短视频 License,两种 License 均可用于解锁 SDK 的视频播放功能。并且点播资源包可以抵扣云点播的播放产生的日结流量,详细说明请参见 云点播预付费资源包。 License 计费说明参见 腾讯云视立方 License,License 购买完成后可参考 License 操作指引 进行新增和续期等操作。

最佳实践

为了保障录制的高可用,建议客户在集成 REST ful API 的同时注意以下几点。
调用 CreateCloudRecording 请求后,请关注 HTTP response,如果请求失败,那么需要根据具体的状态码采取相应的重试策略。错误码是由“一级错误码”和“二级错误码”组合而成,例如:InvalidParameter.SdkAppId
如果返回的 Code 是 InValidParameter.xxxxx,说明输入的参数有误,请根据提示检查参数。
如果返回的 Code 是 InternalError.xxxxx,说明遇到了服务端错误,可以使用相同的参数重试多次,直到返回正常,拿到 taskid 为止。建议使用退避重试策略,如第一次3s重试,第二次6s重试,第三次12s重试,以此类推。
如果返回的 Code 是 FailedOperation.RestrictedConcurrency,说明客户的并发录制任务数,超过了后台预留的资源(默认是100路),请联系腾讯云技术支持来调整最高并发路数限制。
如果您有订阅录制回调,当收到 EVENT_TYPE_CLOUD_RECORDING_RECORDER_STOP 回调事件,LeaveCode 为100时,说明录制与主播数据长时间断开连接,请再次发起录制任务保证录制的可用性。
调用 CreateCloudRecording 接口时,指定的 UserId/UserSig 是录制作为单独的机器人用户加入房间的 ID,请不要和 TRTC 房间内的其他用户重复。同时,TRTC 客户端加入的房间类型必须和录制接口指定的房间类型保持一致,比如 SDK 创建房间用的是字符串房间号,那么云端录制的房间类型也需要相应设置成字符串房间号。
录制状态查询,客户可以通过以下几种方式来得到录制相应的文件信息:
成功发起 CreateCloudRecording 任务后15s左右,调用 DescribeCloudRecording 接口查询录制文件对应的信息,如果查询到状态为 idle 说明录制没有拉到上行的音视频流,请检查房间内是否有主播上行。
成功发起 CreateCloudRecording 后,在确保房间有上行音视频的情况下,可以按照录制文件名的生成规则来拼接录制文件名称。具体文件名规则请参见 录制文件名命名规则
录制文件的状态会通过回调发送到客户的服务器,如果订阅了相关回调,将会收到录制文件的状态信息。具体回调信息请参见 回调接口
录制用户(userid)的 UserSig 过期时间应该设置成比录制任务生命周期更长的时间,防止录制任务机器断网,在内部高可用生效的时候,恢复录制因为 UserSig 过期而失败。
目录