直播录制是将直播原始流经过转音视频封装(不修改音频、视频数据以及对应的时间戳等信息)得到的文件存储到对象存储(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 后,如果需要对特定推流域名下直播流进行录制,有以下实现方法:
直播控制台
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 调用
录制示例
最简单的情况,只需填写指定的 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 续录功能后,中间断流不会回调,默认续流只回调最终生成文件。
录制文件获取
录制文件生成后自动存储到对象存储,有以下方式可以获取录制文件:
对象存储控制台
COS API查询
录制事件通知
事件通知机制高效可靠且实时性好,我们推荐您使用回调方式获取录制文件。
更新配置注意事项
在更新完录制配置之后,我们建议您重新推流并对配置进行验证。配置的生效规则如下:
配置生效时间默认为10分钟。
配置作用时间是在直播推流开始时刻,录制过程中不更新配置。
对于推流持续时间较长的场景(如监控摄像),需要断流重推配置才生效。