视频直播以录制模板的形式管理录制配置。系统根据您推流地址中的 DomainName、AppName 和 StreamName 来匹配相应的录制模板。录制模板支持配置两种按需录制方式:通过推流参数控制和通过 HTTP 回调控制,帮助您基于业务规则来动态决定是否对某一次直播内容进行录制。
通过推流参数控制
当录制模板的触发方式设置为“推流参数确认”时,您可以直接在推流URL中通过 record_config 参数,控制当前流是否开启录制。
参数格式:
record_config={"NeedRecord": <true/false>}参数说明:
true:开启录制,false:关闭录制注意事项:构造推流URL时,必须通过 URL Encode 对参数进行编码
假设推流地址为:rtmp://push.example.com/live/stream1
若需要通过参数开启录制,URL 可构造为:rtmp://push.example.com/live/stream1?record_config=%7B%22NeedRecord%22%3Atrue%7D&auth_key=xxx
使用限制:
该触发方式仅支持控制是否录制源流,不支持转码流录制。录制内容包括转码流时,请选择其他触发方式。
通过 HTTP 回调控制
工作原理
直播流推流时,如果这条流匹配的录制模板设置的触发方式为“回调确认”,直播服务会向您预设的按需回调地址发送一条 HTTP 请求,询问是否对当前直播流进行录制。
您的业务系统收到请求后,根据当前业务状态返回录制指令(允许或拒绝)。
直播服务根据您的返回结果,决定是否开启录制任务。
请求参数
参数 | 类型 | 描述 |
domain | String | 主播流域名。 |
app | String | 播流所属应用名称。 |
stream | String | 播流名称。 |
codec | String | 编码方式。取值:
|
vbitrate | String | 视频码率。单位:kbps。 |
请求示例
GET /?app=seq_all&domain=demo.aliyundoc.com&stream=ondemand8&vbitrate=2000&codec=h264 HTTP/1.1
Host: pull.aliyundoc.com
User-Agent: Go-http-client/1.1
Accept-Encoding: gzip返回参数
用户服务器收到回调请求后,需返回 HTTP 200 状态码,并在 Body 中返回 JSON 格式的数据:
参数 | 类型 | 是否必选 | 描述 |
ApiVersion | String | 否 | API版本。默认为1.0版本。 |
NeedRecord | Bool | 是 | 是否需要录制。 |
Interval | JSONObject | 否 | 具体格式的录制周期。取值范围:5-21600。单位:秒。 |
Format | JSONArray | 否 | 录制格式。支持MP4、FLV、M3U8。 |
返回示例
{
"ApiVersion": "1.0",
"NeedRecord": true,
"Interval": {
"Mp4": 300,
"Flv": 120,
"M3U8": 180
},
"Format": ["mp4","flv"]
}返回参数处理
录制服务收到用户服务器的返回参数后,会与原有的录制配置进行比对和覆盖:
周期覆盖:若返回参数中指定了
Interval,则该值会覆盖原有的录制配置中的录制周期。格式交集:返回参数中的
Format会与之前配置的录制格式取交集。比如,原录制模板配置了 MP4 和 FLV 格式,而回调返回["mp4", "m3u8"],则最终只会录制 MP4 格式。若交集为空,则该路流不会执行任何录制。
用户接口必须返回 HTTP 200 状态码,返回其他任何状态码均被视作回调失败,默认不进行录制。
回调接口返回的 Body 长度上限为 2048 字节。超过该长度的响应会被截断,以防恶意攻击。
注意事项
若您的业务使用了触发拉流功能,即有用户通过播放地址拉取时,视频直播才进行拉流直播;无人播放时不会回源站进行拉流:
录制触发前提:无论是自动录制、按需录制还是手动录制,在触发拉流场景下,必须有用户发起播放才会启动录制。
无人播放不录制:若该流无任何客户端播放,直播服务不会向源站拉流,因此不会生成任何录制文件。