按需录制

更新时间:
复制 MD 格式

视频直播以录制模板的形式管理录制配置。系统根据您推流地址中的 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 回调控制

工作原理

  1. 直播流推流时,如果这条流匹配的录制模板设置的触发方式为“回调确认”,直播服务会向您预设的按需回调地址发送一条 HTTP 请求,询问是否对当前直播流进行录制。

  2. 您的业务系统收到请求后,根据当前业务状态返回录制指令(允许或拒绝)。

  3. 直播服务根据您的返回结果,决定是否开启录制任务。

您需要先在事件回调配置中指定该域名直播录制的“按需回调地址”。详细配置方式请参见直播录制回调按需录制回调

请求参数

参数

类型

描述

domain

String

主播流域名。

app

String

播流所属应用名称。

stream

String

播流名称。

codec

String

编码方式。取值:

  • h264

  • h265

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 字节。超过该长度的响应会被截断,以防恶意攻击。

注意事项

若您的业务使用了触发拉流功能,即有用户通过播放地址拉取时,视频直播才进行拉流直播;无人播放时不会回源站进行拉流:

  • 录制触发前提:无论是自动录制、按需录制还是手动录制,在触发拉流场景下,必须有用户发起播放才会启动录制。

  • 无人播放不录制:若该流无任何客户端播放,直播服务不会向源站拉流,因此不会生成任何录制文件。