在远程教育、秀场直播、视频会议、远程定损、金融双录、在线医疗等应用场景中,考虑取证、质检、审核、存档和回放等需求,常需要将整个视频通话或互动直播过程录制和存储下来。
TRTC 的云端录制,可以将房间中的每一个用户的音视频流都录制成一个独立的文件:
也可以将房间中的多路音视频先进行 云端混流,再将混合后的音视频流录制成一个文件:
TRTC 的云端录制服务提供了两种不同的录制形式:“全局自动录制”和“指定用户录制”:
全局自动录制
每一个 TRTC 房间中的每个用户的音视频上行流都会被自动录制下来,录制任务的启动和停止都是自动的,不需要您额外操心,比较简单和易用。具体的使用方法请阅读 方案一:全局自动录制。
指定用户录制
您可以指定只录制一部分用户的音视频流,这需要您通过客户端的 SDK API 或者服务端的 REST API 进行控制,需要额外的开发工作量。具体的使用方法请阅读 方案二:指定用户录制(SDK API) 和 方案三:指定用户录制(REST API)。
云端录制支持 HLS、MP4、FLV 和 AAC 四种不同的文件格式,我们以表格的形式列出四种不同格式的差异和适用场景,您可以结合自身业务的需要进行选择:
参数 | 参数说明 |
---|---|
文件类型 | 支持以下文件类型:
|
单个文件的最大时长(分钟) |
|
文件保存时长(天) | 根据实际业务需求设置视频文件存储在云点播平台的天数。单位为天,取值范围0 - 1500,到期后文件将被点播平台自动删除且无法找回, 0表示永久存储。 |
续录超时时长(秒) |
|
说明:HLS 支持最长三十分钟的续录,可以做到“一堂课只产生一个回放链接”,且支持绝大多数浏览器的在线观看,非常适合在线教育场景中的视频回放场景。
TRTC 云端录制文件会默认存储于腾讯云点播服务上,如果您的项目中多个业务公用一个腾讯云点播账号,可能会有录制文件隔离的需求。您可以通过腾讯云点播的“子应用”能力,将 TRTC 的录制文件与其他业务区分开。
什么是点播主应用和子应用?
主应用和子应用是云点播上的一种资源划分的方式。主应用相当于云点播的主账号,子应用可以创建多个,每一个子应用相当于主账号下面的一个子账号,拥有独立的资源管理,存储区域可以跟其他的子应用相互隔离。
如何开启点播服务的子应用?
您可以根据文档 “如何开启点播子应用” 添加新的子应用,这一步需要您跳转到 点播控制台 中进行操作。
说明:详细的录制回调接收和解读方案请参考文档后半部分的:接收录制文件。
TRTC 提供了三种云端录制的控制方案,分别是 全局自动录制、指定用户录制(由 SDK API 控制) 和 指定用户录制(由 REST API 控制)。对于其中的每一种方案,我们都会详细介绍:
控制台中的设定
要使用该种录制方案,请在控制台中 选择录制形式 时,设定为“全局自动录制”。
录制任务的开始
TRTC 房间中的每一个用户的音视频流都会被自动录制成文件,无需您的额外操作。
录制任务的结束
自动停止。即每个主播在停止音视频上行后,该主播的云端录制即会自行停止。如果您在 选择文件格式 时设置了“续录时间”,则需要等待续录时间超时后才能收到录制文件。
多路画面的混合
全局自动录制模式下的云端混流有两种方案,即“服务端 REST API 方案” 和 “客户端 SDK API 方案”,两套方案请勿混合使用:
录制文件的命名
userDefineRecordId_streamType_开始时间_结束时间
来命名(streamType 有 main 和 aux 两个取值,main 代表主路,aux 代表辅路,辅路通常被用作屏幕分享);streamId_开始时间_结束时间
来命名;sdkappid_roomid_userid_streamType_开始时间_结束时间
来命名(streamType 有 main 和 aux 两个取值,main 代表主路,aux 代表辅路,辅路通常被用作屏幕分享)。已经支持的平台
由您的服务端控制,不受客户端平台限制。
通过调用 TRTC SDK 提供的一些 API 接口和参数,即可实现云端混流、云端录制和旁路直播三个功能:
云端能力 | 如何开始? | 如何停止? |
---|---|---|
云端录制 | 进房时指定参数 TRTCParams 中的 userDefineRecordId 字段 |
主播退房时自动停止 |
云端混流 | 调用 SDK API setMixTranscodingConfig() 启动云端混流 | 发起混流的主播退房后,混流会自动停止,或中途调用 setMixTranscodingConfig() 并将参数设置为 null/nil 手动停止 |
旁路直播 | 进房时指定参数 TRTCParams 中的 streamId 字段 |
主播退房时自动停止 |
控制台中的设定
要使用该种录制方案,请在控制台中 选择录制形式 时,设定为“指定用户录制”。
录制任务的开始
主播在进房时指定进房参数 TRTCParams 中的 userDefineRecordId 字段,之后该主播的上行音视频数据即会被云端录制下来,不指定该参数的主播不会触发录制任务。
// 示例代码:指定录制用户 rexchang 的音视频流,文件 id 为 1001_rexchang
TRTCCloud *trtcCloud = [TRTCCloud sharedInstance];
TRTCParams *param = [[TRTCParams alloc] init];
param.sdkAppId = 1400000123; // TRTC 的 SDKAppID,创建应用后可获得
param.roomId = 1001; // 房间号
param.userId = @"rexchang"; // 用户名
param.userSig = @"xxxxxxxx"; // 登录签名
param.role = TRTCRoleAnchor; // 角色:主播
param.userDefineRecordId = @"1001_rexchang"; // 录制 ID,即指定开启该用户的录制。
[trtcCloud enterRoom:params appScene:TRTCAppSceneLIVE]; // 请使用 LIVE 模式
录制任务的结束
自动停止,当进房时指定 userDefineRecordId 参数的主播在停止音视频上行后,云端录制会自行停止。如果您在选择文件格式时设置了“续录时间”,则需要等待续录时间超时后才能收到录制文件。
多路画面的混合
您可以通过调用 SDK API setMixTranscodingConfig() 将房间中其它用户的画面和声音混合到当前用户的这一路音视频流上。
注意:在一个 TRTC 房间中,只由一个主播(推荐是开播的主播)来调用
setMixTranscodingConfig
即可,多个主播调用可能会出现状态混乱的错误。
录制文件的命名
录制文件会以 userDefineRecordId_开始时间_结束时间
的格式来命名。
已经支持的平台
支持 iOS、Android、Windows、Mac、Electron、Web 等终端发起录制控制,暂不支持微信小程序端发起控制。
TRTC 的服务端提供了一对 REST API( StartMCUMixTranscode 和 StopMCUMixTranscode)用于实现云端混流、云端录制和旁路直播三个功能:
云端能力 | 如何开始? | 如何停止? |
---|---|---|
云端录制 | 调用 StartMCUMixTranscode 时指定 OutputParams.RecordId 参数即可开始录制 |
自动停止,或中途调用 StopMCUMixTranscode 停止 |
云端混流 | 调用 StartMCUMixTranscode 时指定 LayoutParams 参数可设置布局模板和布局参数 |
所有用户退房后自动停止,或中途调用 StopMCUMixTranscode 手动停止 |
旁路直播 | 调用 StartMCUMixTranscode 时指定 OutputParams.StreamId 参数可启动到 CDN 的旁路直播 |
自动停止,或中途调用 StopMCUMixTranscode 停止 |
说明:由于这对 REST API 控制的是 TRTC 云服务中的核心混流模块 MCU,并将 MCU 混流后的结果输送给录制系统和直播 CDN,因此 API 的名字被称为
Start/StopMCUMixTranscode
。因此,从功能角度上来说,Start/StopMCUMixTranscode
不仅仅可以实现混流的功能,也可以实现云端录制和旁路直播 CDN 的功能。
控制台中的设定
要使用该种录制方案,请在控制台中 选择录制形式 时,设定为“指定用户录制”。
录制任务的开始
由您的服务器调用 StartMCUMixTranscode ,并指定 OutputParams.RecordId
参数即可启动混流和录制。
// 代码示例:通过 REST API 启动云端混流和云端录制任务
https://trtc.tencentcloudapi.com/?Action=StartMCUMixTranscode
&SdkAppId=1400000123
&RoomId=1001
&OutputParams.RecordId=1400000123_room1001
&OutputParams.RecordAudioOnly=0
&EncodeParams.VideoWidth=1280
&EncodeParams.VideoHeight=720
&EncodeParams.VideoBitrate=1560
&EncodeParams.VideoFramerate=15
&EncodeParams.VideoGop=3
&EncodeParams.BackgroundColor=0
&EncodeParams.AudioSampleRate=48000
&EncodeParams.AudioBitrate=64
&EncodeParams.AudioChannels=2
&LayoutParams.Template=1
&<公共请求参数>
注意:
录制任务的结束
自动停止,您也可以中途调用 StopMCUMixTranscode 停止混流和录制任务。
多路画面的混合
在调用 StartMCUMixTranscode 时同时指定 LayoutParams
参数即可实现云端混流。该 API 支持在整个直播期间多次调用,即您可以根据需要修改 LayoutParams
参数并再次调用该 API 来调整混合画面的布局。但需要注意的是,您需要保持参数 OutputParams.RecordId
和 OutputParams.StreamId
在多次调用中的一致性,否则会导致断流并产生多个录制文件。
录制文件的命名
录制文件会以调用 StartMCUMixTranscode 时指定的 OutputParams.RecordId
参数来命名,命名格式为 OutputParams.RecordId_开始时间_结束时间
。
已经支持的平台
由您的服务端控制,不受客户端平台的限制。
在开启录制功能以后,TRTC 系统中录制下来的文件就能在腾讯云点播服务中找到。您可以直接在云点播控制台手动查找,也可以由您的后台服务器使用 REST API 进行定时筛选:
1400000123_1001_rexchang_main
,单击,将展示视频名称前缀相匹配的视频文件。腾讯云点播系统提供了一系列 REST API 来管理其上的音视频文件,您可以通过 搜索媒体信息 这个 REST API 来查询您在点播系统上的文件。您可以通过请求参数表中的 Text
参数进行模糊匹配,也可以根据 StreamId
参数进行精准查找。
REST 请求示例:
https://vod.tencentcloudapi.com/?Action=SearchMedia
&StreamId=stream1001
&Sort.Field=CreateTime
&Sort.Order=Desc
&<公共请求参数>
除了 查找录制文件,您还可以通过配置回调地址,让腾讯云主动把新录制文件的消息推送给您的服务器。
房间里的最后一路音视频流退出后,腾讯云会结束录制并将文件转存到云点播平台,该过程大约默认需要30秒至2分钟(若您设置了续录时间为300秒,则等待时间将在默认基础上叠加300秒)。转存完成后,腾讯云会通过您在 设置录制回调 中设置的回调地址(HTTP/HTTPS)向您的服务器发送通知。
腾讯云会将录制和录制相关的事件都通过您设置的回调地址推送给您的服务器,回调消息示例如下图所示:
您可以通过下表中的字段来确定当前回调是对应的哪一次通话(或直播):
序号 | 字段名 | 说明 |
---|---|---|
event_type | 消息类型,当 event_type 为100时,表示该回调消息为录制文件生成的消息。 | |
stream_id | 即直播 CDN 的 streamId,您可以在进房时通过设置 TRTCParams 中的 streamId 字段指定(推荐),也可以在调用 TRTCCloud 的 startPublishing 接口时通过参数 streamId 来指定。 | |
stream_param.userid | 用户名的 Base64 编码。 | |
stream_param.userdefinerecordid | 自定义字段,您可以通过设置 TRTCParams 中的 userDefineRecordId 字段指定。 | |
video_url | 录制文件的观看地址,可以用于 点播回放。 |
说明:更多回调字段说明,请参见 云直播-录制事件通知。
腾讯云点播系统提供了一系列 REST API 来管理其上的音视频文件,您可以通过 删除媒体 API 删除某个指定的文件。
REST 请求示例:
https://vod.tencentcloudapi.com/?Action=DeleteMedia
&FileId=52858907988664150587
&<公共请求参数>
在线教育等场景中,通常需要在直播结束后多次回放录制文件,以便充分利用教学资源。
在 设置录制格式 中选择文件格式为 HLS。
HLS 支持最长三十分钟的断点续录,可以做到“一场直播(或一堂课)只产生一个回放链接”,且 HLS 文件支持绝大多数浏览器在线播放,非常适合视频回放场景。
在 接收录制文件 时,可以获取回调消息中 video_url 字段,该字段为当前录制文件在腾讯云的点播地址。
根据使用平台对接点播播放器,具体操作参考如下:
注意:建议使用 专业版 TRTC SDK,专业版集合了 超级播放器(Player+)、移动直播(MLVB) 等功能,由于底层模块的高度复用,集成专业版的体积增量要小于同时集成两个独立的 SDK,并且可以避免符号冲突(symbol duplicate)的困扰。
云端录制与回放功能使用到的功能包括:云服务资源(包括云端录制服务、云点播的回放文件存储与处理、云点播的播放服务等),和终端 SDK 播放点播视频的能力。可能会根据实际需求产生以下费用。
云服务消耗包括了云端录制产生的费用和回放文件产生的消耗费用。您可根据实际需求进行使用。
说明:
注意:
- 自2020年7月1日起首次在 TRTC 控制台创建应用的腾讯云账号,使用云端录制功能后产生的录制费用以 云端录制计费说明 为准。
- 在2020年7月1日之前已经在 TRTC 控制台创建过应用的腾讯云账号,无论是在2020年7月1日之前还是之后创建的应用,使用云端录制功能产生的录制费用均默认继续延用直播录制的计费规则。
直播录制计费的计算方法是按照并发录制的路数进行收费,并发数越高录制费用越高,具体计费说明请参见 云直播 > 直播录制。
例如,您目前有1000个主播,如果在晚高峰时,最多同时有500路主播的音视频流需要录制。假设录制单价为5.2941美元/路/月,那么总录制费用为
500路 × 5.2941美元/路/月 = 2647.05美元/月
。
如果您在 设置录制格式 时同时选择了两种录制文件,录制费用和存储费用都会 × 2,同理,选择三种文件时录制费用和存储费用会 × 3。 如非必要,建议只选择需要的一种文件格式,可以大幅节约成本。
转码费用:如开启混流录制则会产生该费用
如果您启用了混流录制,由于混流本身需要进行解码和编码,所以还会产生额外的混流转码费用。 混流转码根据分辨率大小和转码时长进行计费,主播用的分辨率越高,连麦时间(通常在连麦场景才需要混流转码)越长,费用越高,具体费用计算请参见 直播转码。
例如,您通过 setVideoEncoderParam() 设置主播的码率(videoBitrate)为1500kbps,分辨率为720P。如果有一位主播跟观众连麦了一个小时,连麦期间开启了 云端混流,那么产生的转码费用为
0.0057 美元/分钟 × 60分钟 = 0.342美元
。
回放文件存储费用:云端视频存储服务产生的存储费用
录制出的视频文件存放于云点播服务,会使用云点播的云端存储服务。由于存储本身会产生磁盘资源的消耗,因此需要按照存储的资源占用进行收费。存储的时间越久费用也就越高,因此如无特殊需要,您可以将文件的存储时间设置的短一些来节省费用,或者将文件存放在自己的服务器上。存储费用可以选择 视频存储(日结)价格 进行日结计算。
例如,您通过 setVideoEncoderParam() 设置主播的码率(videoBitrate)为1000kbps,录制该主播的直播视频(选择一种文件格式),录制一小时大约会产生一个
(1000 / 8)KBps × 3600秒 = 450000KB = 0.45GB
大小的视频文件,该文件每天产生的存储费用约为0.45GB × 0.0009 美元/GB/日 = 0.000405美元
。
观看回放费用:云点播视频进行分发播放产生的播放费用
如果您录制的视频文件要被用于回看播放,会使用云点播的 CDN 播放功能。由于观看本身会产生 CDN 流量消耗,因此需要按照点播的价格进行计费,默认按流量收费。观看的人数越多费用越高,观看费用可以选择 视频加速(日结)价格 进行日结计算。
例如,您通过云端录制产生了一个1GB大小的文件,且有1000位观众从头到尾完整地观看了视频,大约会产生1TB的点播观看流量,那么按照阶梯价格表,1000位观众就会产生
1000 × 1GB ×0.0794美元/GB = 79.4美元
的费用。
如果您选择从腾讯云下载文件到您的服务器上,也会产生一次很小的点播流量消耗,并且会在您的月度账单中有所体现。
音视频通话(TRTC)全功能版本 SDK 提供了功能全面性能强大的视频播放能力,可轻松配合云点播实现视频播放功能。移动端 SDK 在10.1及以上的版本可通过获取指定 License 以解锁视频播放能力。
注意:TRTC 的播放能力无需 License 授权。
服务端录制需要使用 Linux SDK。Linux SDK 暂未完全开放,若您需咨询或使用相关服务,请联系 colleenyu@tencent.com。
本页内容是否解决了您的问题?