录制存储至 COS

最近更新时间:2024-09-25 17:16:11

我的收藏
直播录制是将直播原始流经过转音视频封装(不修改音频、视频数据以及对应的时间戳等信息)得到的文件存储到对象存储(COS)平台的服务。

注意事项

创建录制任务创建录制模板配置 为两种录制发起方式,实际使用中按需选择其中一种即可。若同一直播流,配置录制模板的同时创建了录制任务,会导致重复录制。
因为推流发起后启动录制任务会有短暂延迟,所以推流时间过短会导致无法生成录制文件。为保证录制文件质量,建议每次录制时的推流时间大于10s。
根据国家《网络表演经营活动管理办法》及《网络交易监督管理办法》的最新规定,经营单位需记录网络直播视频内容并进行存储备份,保存时长根据直播类型建议存储60日至3年,详情请参见 直播录制国家相关规定

录制存储

直播录制将文件存放于对象存储,如需使用直播录制服务,需首先申请开通 对象存储。录制文件存储时长配置请在对象存储 设置生命周期 进行管理。

录制支持的格式

录制文件格式支持:FLV/ HLS/ MP4/ AAC,其中 AAC 为纯音频录制。
少部分音视频编码方式的直播流在录制并不支持,不同音视频编码方式在录制功能的支持情况如下
编码方式
录制格式
FLV
HLS
MP4
H.264
支持
支持
支持
H.265
扩展支持
支持
支持
H.266
扩展支持
支持
支持
AV1
扩展支持
不支持
支持
AAC
支持
支持
支持
MP3
支持
支持
支持
OPUS
扩展支持
支持
支持
说明:
“扩展支持”为直播私有扩展(播放器及 ffmpeg 工具均需要定制),不同于 ffmpeg 实现方式。
建议针对不支持或扩展支持的编码方式,调整为录制编码方式为 H.264、H.265 等的转码流。

录制使用场景

使用场景
说明
按推流域名、流名称多级别录制
您可以在推流域名、流名称级别配置是否需要录制。
按指定时间段录制
您可以通过调用 API 控制录制的开始与结束时间,在您指定的时间内进行录制。
精彩视频录制
在推流过程中碰到精彩画面,您可以通过调用 API 实时产生录制。
纯音频录制
若推流为纯音频,您可以配置 AAC 纯音频录制。

为指定推流域名下所有直播流开启录制

我们将录制参数以模板形式进行管理,您可以为不同业务场景创建录制配置模板。并通过配置模板与不同推流域名、流名称进行关联,实现录制配置灵活管理目的。 您在开通 COS 后,如果需要对特定推流域名下直播流进行录制,有以下实现方法:

直播控制台

1. 进入功能配置 > 直播录制 ,单击 录制存储至 COS 然后添加录制配置模板。
2. 域名管理 添加推流域名,单击管理,将此域名与录制模板进行关联。具体操作请参见 录制配置

API 调用

1. 调用 CreateLiveRecordTemplate,设置至少一种录制格式,如 FlvParam。
2. 调用 CreateLiveRecordRule,设置参数推流域名 DomainName 和 TemplateId(第1步返回),在 AppName 及 StreamName 填写空字符串,表示对此域名下所有推流进行录制。处理成功后约5分钟 - 10分钟生效。
类似,您还可以将录制模板与不同流名称进行关联,以此实现部分直播流开启录制的效果。
另外,同一录制模板可以关联到不同推流域名、AppName 、StreamName,但不允许相同的推流域名、AppName 、StreamName 与多个模板关联。如果出现同一直播流同时匹配到多个录制模板的情况,最终会按如下表格顺序匹配到优先级最高的一个录制模板。(仅复杂场景使用,大多数用户可忽略)
优先级
DomainName
AppName
StreamName
1
2
×
3
×
4
×
×
✓ 代表关联录制模板的对应参数有值,× 代表对应参数值为空。

同一推流域名下部分流不开启录制

您可能已经为某个推流域名配置了录制,但是此域名下存在个别推流因业务原因不需要录制。可以这样操作:
1. 调用 CreateLiveRecordTemplate,且不指定任何录制格式。
https://live.tencentcloudapi.com/?Action=CreateLiveRecordTemplate
&TemplateName=norecord
&Description=test
&<公共请求参数>
2. 通过 云直播控制台 或云 API CreateLiveRecordRule 设置 DomainName 和 StreamName 参数,将上述录制模板与指定推流域名、流名称进行关联。
注意:
上述方案仅针对个别推流不需要录制的情况。如果您需要操作直播流数较多,我们还是建议您使用另外一个推流域名进行独立管理,主要考虑到:
无论录制模板还是录制规则,最大数目都存在限制(50个)。
按推流域名维度管理更灵活,即使业务变化也不需操作录制模板和规则。

指定时间段录制

对于一些推流,如果您希望在指定开始时间启动录制,并在指定结束时间结束录制,可以通过 API 方式指定录制。与配置录制模板方式不同,具体录制参数需要通过 API 指定。且这种方式一般用于未开通任何录制方式的情况下使用。

API 调用

创建录制任务 API 说明,具体请参见 CreateRecordTask

录制示例

最简单的情况,只需填写指定的 StreamName、DomainName、AppName 和 EndTime 参数。 例如:创建了2020年08月10日早上08点到10点的录制任务,格式为 FLV,视频录制,分片间隔30分钟。 输入示例:
https://live.tencentcloudapi.com/?Action=CreateRecordTask
&AppName=live
&DomainName=mytest.live.push.com
&StreamName=livetest
&StartTime=1597017600
&EndTime=1597024800
&TemplateId=0
&<公共请求参数>
您还可以指定具体录制格式、录制类型等参数。 例如:创建了2020年08月10日早上08点到10点的录制任务,格式为 MP4,分片间隔1小时。
1.1 调用 CreateLiveRecordTemplate ,先创建录制模板。 输入示例:
https://live.tencentcloudapi.com/?Action=CreateLiveRecordTemplate
&TemplateName=templat
&Description=test
&Mp4Param.Enable=1
&Mp4Param.RecordInterval=3600
&<公共请求参数>
输出示例:
{
"Response": {
"RequestId": "839d12da-95a9-43b2-a9a0-03366d01b532",
"TemplateId": 17016
}
}
1.2 调用 CreateRecordTask,创建录制任务。 输入示例:
https://live.tencentcloudapi.com/?Action=CreateRecordTask
&StreamName=livetest
&AppName=live
&DomainName=mytest.live.push.com
&StartTime=1597017600
&EndTime=1597024800
&TemplateId=17016
&<公共请求参数>
说明:
对于同一条直播流,定时任务之间以及定时任务与其它形式的录制任务不冲突。也就是说,您创建的多个定时任务所指定的时间范围可以重叠。而且可以在启用配置录制的基础上再调用 API 创建录制任务。
另外,建议提前创建录制任务(如:提前一个小时,或者凌晨创建当天的任务),且指定的任务开始时间稍早于事件时间。

精彩视频录制

在推流过程中,若碰到精彩视频画面,您希望立即开始录制并生成精彩视频剪辑做后续使用。可以通过 API 调用并指定精彩视频录制来实现。
https://live.tencentcloudapi.com/?Action=CreateRecordTask
&StreamName=test
&AppName=live
&DomainName=mytest.live.push.com
&EndTime=1597024800
&<公共请求参数>
关于精彩视频录制,有以下几点说明:
创建录制时需要确保正在推流。
可以调用 API StopRecordTask 提前终止任务。
支持海外推流。

混流录制

在使用混流录制功能时,请您先参考 云端混流 文档,了解混流业务的相关知识和操作步骤。
对于使用了直播云端混流业务的场景,录制侧按混流参数 OutputStreamType(输出流类型)将混流分为两类:
OutputStreamType 为 0,表示输出流在输入流列表中,即没有生成新的流。
OutputStreamType 为 1,表示输出流不在输入流列表中,即生成了新的流。
例如,有推流 A、B,经过混流后输出流为 C。
对于 OutputStreamType 为 0 的情况,如果 C 流是 A 流(流名称相同,但是混流后画面),启用配置录制后,默认会生成 A 流(混流画面)和 B 流的录制文件。由于复用了同一流 ID,A 流原始推流将不会产生录制。对于 OutputStreamType 为 1 的情况,开启配置录制后,默认会生成 A 流、B 流以及 C 流(混流画面)的录制文件。
如果只想录制混流画面,您可以通过 API CreateRecordTask 实现。需要说明的是,对于 OutputStreamType 为 1 这种混流类型,调用上述 API 需要设置 StreamType 参数为 1。
注意:
不支持中国内地(大陆)和国际/港澳台两个区域的推流进行混流录制,会导致录制文件错误,影响正常观看回放。

自动拼接录制(多次推流续流录制)

为了解决推流端网络抖动等原因导致的闪断推流,录制服务提供了自动拼接录制的功能,可以将短时间中断的多个推流录制成一个文件,方便直播回放观看。
其原理是针对 HLS 录制格式使用 HLS 的 #EXT-X-DISCONTINUITY 标签来分割多次推流的音视频数据。此标签的作用是:标识前后的音视频数据的时间戳、视频编码、音频编码采样等信息可能不同,需要播放器刷新解码器以实现无缝的正常播放。因此使用此功能时,需要播放器支持 #EXT-X-DISCONTINUITY 标签,iOS 自带播放器(或者 Safari 直接播放)、Android 的 ExoPlayer、Web 端的 hls.js 播放器都支持此标签,VLC 等播放器不支持此标签。
使用此功能后,设置好推流中断自动拼接时间(最长可设置30分钟,即最长支持将中断30分钟的推流拼接成一个文件),在最后一次正常推流结束后,会自动拼接断流时间内的内容并生成 HLS 录制文件。
自动拼接录制目前支持 HLS 格式,您可以在 直播录制 中设置续录超时时长。
注意:
自动拼接不支持无音频数据的直播流。
视频合并功能需要通过调用媒体处理服务的视频编辑接口实现,相关文档说明请参见 编辑视频
配置了 HLS 续录功能后,中间断流不会回调,默认续流只回调最终生成文件。

录制文件获取

录制文件生成后自动存储到对象存储,有以下方式可以获取录制文件:

对象存储控制台

登录 对象存储控制,选择存储桶列表 > 输入存储桶名称 > 点击存储桶,即可浏览、以及搜索录制生成的所有文件。







COS API查询

具体使用请参见对象存储 API List Objects 接口筛选查询录制文件。

录制事件通知

通过控制台或者 API 调用设置录制回调地址,录制文件生成后会以消息方式通知到该回调地址。在收到消息后可根据 录制事件通知 进行业务处理。
事件通知机制高效可靠且实时性好,我们推荐您使用回调方式获取录制文件。

更新配置注意事项

在更新完录制配置之后,我们建议您重新推流并对配置进行验证。配置的生效规则如下:
配置生效时间默认为10分钟。
配置作用时间是在直播推流开始时刻,录制过程中不更新配置。
对于推流持续时间较长的场景(如监控摄像),需要断流重推配置才生效。