直播录制

更新时间:
复制为 MD 格式

直播录制是将直播中心接收到的推流数据录制并保存至指定存储位置,以便直播结束后再次观看目前直播录制提供两种存储方式:存储至 VOD 存储至 OSS

功能介绍

录制原理

直播录制时,系统会拉取推送的直播流,将音视频切分成 TS 格式的,再将其封装为目标格式(如 FLV、MP4 或 M3U8),并保存至您指定的存储空间。

直播录制在工作时仅修改音视频的封装格式,不修改编码层内容。若源流存在花屏、音画不同步等异常,录制文件也将包含这些瑕疵。

音视频编码格式

由于直播录制需要先将直播流切分为 TS 文件,因此直播流的编码格式必须满足 TS 封装要求。直播录制目前仅支持以下编码格式:

  • 视频编码:H.264 (AVC)、H.265 (HEVC)、MPEG-4

  • 音频编码:AAC、MP3

如果直播流包含了非以上格式编码的音视频,可能出现无法生成录制文件、录制黑屏、无声等异常。

存储方式对比

直播录制提供两种存储方式:存储至 VOD 和存储至 OSS。同一个直播流不能同时配置两种存储方式请根据业务需求选择。

对比项

存储至 VOD

存储至 OSS

关联产品

视频点播

对象存储

存储格式

  • M3U8(默认)

  • FLV

  • MP4

  • M3U8(默认)

  • FLV

  • MP4

  • CMAF

录制视频处理

支持对录制的视频进行自动合并、转码等媒体处理

需自行处理

适用场景

适用于录制内容的二次生产,如剪辑、转码、合成等

适用于录制内容的长期存储和管理

录制触发方式

直播录制支持四种录制触发方式:自动录制、回调确认、推流参数设置、手动录制。

自动录制

视频直播以录制模板的形式管理录制配置。系统根据您推流地址中的 DomainName、AppName 和 StreamName 来匹配相应的自动录制模板

匹配逻辑

  • 精准匹配:录制模板中,指定具体的 AppName 和 StreamName,表示仅对该直播流生效。

  • 通配匹配:录制模板中,AppName 填写 *,表示对该域名下所有应用生效;StreamName 填写 *,表示该应用下所有直播流生效。

优先级策略

如果您配置了多个自动录制模板,且某一路直播流同时匹配到多个模板,系统将根据以下优先级生效(数值越小,优先级越高):

优先级

DomainName

AppName

StreamName

1

2

*

3

*

*

(✓ 代表通过控制台或 API 配置自动录制规则时,对应参数有值,且值不为*

回调确认

如果您希望基于业务规则来动态决定是否对某一次直播内容进行录制,可以使用“按需录制”模式。

工作流程:

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

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

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

您需要先在事件回调配置中指定直播录制的“按需回调地址”。详细配置方式、请求参数和响应格式请参见直播录制回调按需录制回调

推流参数设置

当触发方式配置为“推流参数设置”时,您可以直接在推流地址中通过 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

手动录制

如果您希望完全由业务逻辑控制录制过程,可以关闭自动录制,改用“手动录制”模式。

此时,您可以调用 RealTimeRecordCommand (实时录制指令)接口,手动启动某条直播流的录制。

该接口同时支持主动停止录制,无论当前录制是通过“自动触发”、“按需触发”还是“手动启动”,都可以调用该接口强制停止当前录制任务。

请参见RealTimeRecordCommand - 实时录制指令接口文档,使用 command 参数执行 start或 stop操作。

存储至 VOD

前提条件

开通视频点播服务并配置存储 Bucket。存储 Bucket 必须与待配置域名的直播中心同地域

重要

金融云账号不支持录制直播流到点播。

功能配置

视频直播以录制模板的形式管理录制配置。您可以通过控制台或 API 创建存储至 VOD 的录制模板。

完成配置后重新推流,录制配置才会生效。如需录制回放,请在直播开始前创建录制模板。

方法一:控制台配置

  1. 登录视频直播控制台

  2. 在左侧导航栏选择功能管理 > 直播录制。在录制配置页签,选择存储至VOD

  3. 选择待配置的播流域名,并且单击添加

  4. 配置录制模板。

    基础录制设置

    参数

    描述

    AppName

    应用名称,必须与推流地址的 AppName 保持一致方可生效。若需对域名下所有应用生效,填写 *

    StreamName

    流名称。支持精确匹配,即录制特定流。若需录制当前 AppName 下的所有直播流,填写 *

    存储应用空间

    录制文件存储在点播服务创建的应用空间。若未开启应用空间,则不显示该字段。

    存储地址

    可选择点播服务当前地域下创建的存储地址。默认使用点播系统配置的默认上传地址。

    录制内容

    支持录制源流转码流,两者可同时选择。

    选择转码流时,可指定转码模板(上限10个)或选择全部转码模板。

    转码模板的 AppName 为*或与录制模板一致时,转码流录制才能生效。

    触发方式

    支持通过以下方式触发录制:自动录制回调确认推流参数设置手动录制

    详情请参见录制触发方式

    存储格式

    支持 M3U8、FLV、MP4 格式。选择多格式时,支持按格式分别配置点播视频设置。

    录制周期

    单个录制文件的最大时长。当直播持续时间超过此阈值,系统将生成新文件。默认值:180分钟。范围:15-360分钟。

    断流拼接时长

    直播中断时,断流时间不超过此时长,重新推流后的内容会自动合并至同一个文件。断流时间超过此时长,则录制为新文件。默认值:180秒。范围:15-21600秒。

    单个切片时长

    单个 TS 切片的时长。仅选择 M3U8 格式时显示。

    默认值:30秒。范围:5-30秒。

    点播视频设置

    存储至 VOD 时,您可通过此设置,使用视频点播的媒体处理能力来处理录制的文件。若您选择了多个录制格式,可按格式分别配置。

    参数

    描述

    自动合并

    开启后,可在直播录制结束后自动将多个录制周期文件合并成一个录制文件,并存储到 VOD。原录制文件仍然保留。

    视频处理

    使用视频点播服务对录制的视频进行媒体处理。

    源视频对每个录制周期文件单独处理。

    合并后视频对合并后的文件进行处理(开启自动合并后显示)。

    处理方式

    支持用转码模板组处理用工作流处理两种方式。

    处理模板

    选择从视频点播服务获取的转码模板组工作流模板

    注意:仅支持选择域名直播中心所在地域创建的模板。

    视频分类

    设置录制文件在视频点播服务中的分类。

  5. 单击确定创建录制模板。

方法二:API 配置

调用AddLiveRecordVodConfig接口,添加录制存储至 VOD 配置。示例代码:

// Parameter settings for API request
AddLiveRecordVodConfigRequest.RecordFormat recordFormat0 = AddLiveRecordVodConfigRequest.RecordFormat.builder()
        .format("m3u8")
        .sliceDuration(30)
        .autoCompose("ON")
        .videoProcess("origin,compose")
        .processMethod("transcode")
        .processTemplateId("e2d796d3bb5fd8049d32bff62f94****")
        .tags("sports")
        .build();

AddLiveRecordVodConfigRequest addLiveRecordVodConfigRequest = AddLiveRecordVodConfigRequest.builder()
        .regionId("<Your RegionID>")
        .domainName("<Your DomainName>")
        .appName("live")
        .streamName("stream1")
        .cycleDuration(3600)
        .spaceId("app-1000000")
        .storageLocation("<Your StorageLocation>")
        .onDemand(0)
        .recordContent("raw,transcode")
        .delayTime(180)
        .recordFormat(java.util.Arrays.asList(recordFormat0))
        .transcodeTemplates(java.util.Arrays.asList("sd"))
        // Request-level configuration rewrite, can set Http request parameters, etc.
        // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
        .build();

部分参数说明

  • OnDemand

    录制触发方式。有效值:0(自动录制),1(回调确认),2(推流参数设置),7(手动录制)。详情请参见录制触发方式

  • DelayTime

    断流拼接时长(秒)。断流时间不超过此时长,重新推流后的内容会自动合并至同一个文件。断流时间超过此时长,则录制为新文件。

  • RecordContent、TranscodeTemplates

    指定录制源流或转码流。录制转码流时,需指定转码模板 ID。

  • RecordFormat:设置存储格式及点播视频配置。其中:

    • AutoCompose:开启后,可在直播录制结束后,自动将多个录制周期文件合并成一个录制文件。

    • VideoProcess、ProcessMethod、ProcessTemplateId:使用视频点播的转码或工作流模板,来处理原录制文件或自动合并的视频。

完整参数说明请参见AddLiveRecordVodConfig - 添加直播录制转点播配置

录制文件管理

您可以在视频直播控制台查看存储至 VOD 的录制文件,并使用视频点播管理录制文件。

  1. 登录视频直播控制台

  2. 在左侧导航栏选择功能管理 > 直播录制。选择录制文件管理页签。

  3. 选择配置的播流域名。

  4. 单击存储至VOD页签。

    可通过日期范围、AppName 和 StreamName 筛选录制记录。

  5. 如需查看和管理具体的录制文件,可在操作列点击去点播控制台管理,或登录视频点播控制台,选择媒资库 > 音/视频

存储至 OSS

前提条件

  1. 开通 OSS 服务并创建存储 Bucket。OSS Bucket 必须与待配置域名的直播中心同地域

  2. 配置直播写入 OSS 权限:正常情况下,开通直播服务时,已完成自动授权。如果该权限意外被删除,可点击同意云资源访问授权完成快速授权。

重要

建议您使用阿里云账号完成授权,若使用 RAM 用户必须拥有以下权限:ram:CreateRoleram:GetRoleram:ListPoliciesForRoleram:AttachPolicyToRole,授予 RAM 用户以上权限存在安全风险(不推荐)。

功能配置

视频直播以录制模板的形式管理录制配置。您可以通过控制台或 API 创建存储至 OSS 的录制模板。

完成配置后重新推流,录制配置才会生效。如需录制回放,请在直播开始前创建录制模板。

方法一:控制台配置

  1. 登录视频直播控制台

  2. 在左侧导航栏选择功能管理 > 直播录制。在录制配置页签,选择存储至OSS

  3. 选择待配置的播流域名,并且单击添加

  4. 配置录制模板。支持录制源流或转码流,两者可同时选择。

    基础录制设置

    参数

    描述

    AppName

    应用名称,必须与推流地址的 AppName 保持一致方可生效。若需对域名下所有应用生效,填写 *

    StreamName

    流名称。支持精确匹配,即录制特定流。若需录制当前 AppName 下的所有直播流,填写 *

    存储位置

    可选择当前地域在 OSS 中创建的 Bucket。

    说明

    存储 Bucket 分为两类:

    • 标准 Bucket:用于常规文件存储

    • 媒体 Bucket:专用于视频转码处理,存入该类型的文件可自动触发 MPS 转码任务

    当前系统未对 Bucket 类型进行标识区分,如需执行视频转码,请自行记录所使用的媒体 Bucket 名称,以确保转码后的媒体文件存储位置准确。

    断流拼接时长

    直播中断时,断流时间不超过此时长,重新推流后的内容会自动合并至同一个文件。断流时间超过此时长,则录制为新文件。默认值:180秒。范围:15-21600秒。

    触发方式

    支持通过以下方式触发录制:自动录制回调确认推流参数设置手动录制

    详情请参见录制触发方式

    录制源流

    参数

    描述

    存储格式

    支持 M3U8、FLV、MP4、CMAF 四种格式。可选择多个格式,但不能同时选择 M3U8 和 CMAF 格式。

    存储规则

    录制文件的命名方式。默认路径:

    M3U8、FLV、MP4:

    record/{AppName}/{StreamName}/{EscapedStartTime}_{EscapedEndTime}

    TS、fMP4:

    record/{AppName}/{StreamName}/{UnixTimestamp}_{Sequence}

    单个切片时长

    单个 TS 切片的时长。仅选择 M3U8 和 CMAF 格式时显示。

    默认值:30秒。范围:5-30秒。

    录制周期

    单个录制文件的最大时长。当直播持续时间超过此阈值,系统将生成新文件。默认值:180分钟。范围:15-360分钟。

    录制转码流

    参数

    描述

    转码流选择

    选择需要录制的转码流。可指定转码模板(上限10个)或选择全部转码模板。

    转码模板的 AppName 为*或与录制模板一致时,转码流录制才能生效。

    存储格式

    支持 M3U8、FLV、MP4、CMAF 四种格式。可选择多个格式,但不能同时选择 M3U8 和 CMAF 格式。

    存储规则

    录制文件的命名方式。默认路径:

    M3U8、FLV、MP4:

    transcodeRecord/{AppName}/{StreamName}_{转码模板ID}/{EscapedStartTime}_{EscapedEndTime}

    TS、fMP4:

    transcodeRecord/{AppName}/{StreamName}_{转码模板ID}/{UnixTimestamp}_{Sequence}

    单个切片时长

    单个 TS 切片的时长。仅选择 M3U8 和 CMAF 格式时显示。

    默认值:30秒。范围:5-30秒。

    录制周期

    单个录制文件的最大时长。当直播持续时间超过此阈值,系统将生成新文件。默认值:180分钟。范围:15-360分钟。

  5. 单击确定创建录制模板。

方法二:API 配置

调用AddLiveAppRecordConfig接口,添加录制存储至 OSS 配置。示例代码:

// Parameter settings for API request
AddLiveAppRecordConfigRequest.TranscodeRecordFormat transcodeRecordFormat0 = AddLiveAppRecordConfigRequest.TranscodeRecordFormat.builder()
        .sliceDuration(30)
        .sliceOssObjectPrefix("transcodeRecord/{AppName}/{StreamName}_{TranscodeTemplateID}/{UnixTimestamp}_{Sequence}")
        .ossObjectPrefix("transcodeRecord/{AppName}/{StreamName}_{TranscodeTemplateID}/{EscapedStartTime}_{EscapedEndTime}")
        .cycleDuration(900)
        .format("m3u8")
        .build();

AddLiveAppRecordConfigRequest.RecordFormat recordFormat0 = AddLiveAppRecordConfigRequest.RecordFormat.builder()
        .sliceDuration(30)
        .format("m3u8")
        .cycleDuration(900)
        .sliceOssObjectPrefix("record/{AppName}/{StreamName}/{UnixTimestamp}_{Sequence}")
        .ossObjectPrefix("record/{AppName}/{StreamName}/{Sequence}_{EscapedStartTime}_{EscapedEndTime}")
        .build();

AddLiveAppRecordConfigRequest addLiveAppRecordConfigRequest = AddLiveAppRecordConfigRequest.builder()
        .domainName("<Your DomainName>")
        .appName("live")
        .ossEndpoint("<Your OssEndpoint>")
        .ossBucket("<Your OssBucket>")
        .streamName("stream1")
        .onDemand(0)
        .delayTime(180)
        .recordFormat(java.util.Arrays.asList(recordFormat0))
        .transcodeRecordFormat(java.util.Arrays.asList(transcodeRecordFormat0))
        .transcodeTemplates(java.util.Arrays.asList("sd"))
        // Request-level configuration rewrite, can set Http request parameters, etc.
        // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
        .build();

部分参数说明

  • OnDemand

    录制触发方式。有效值:0(自动录制),1(回调确认),2(推流参数设置),7(手动录制)。详情请参见录制触发方式

  • DelayTime

    断流拼接时长(秒)。断流时间不超过此时长,重新推流后的内容会自动合并至同一个文件。断流时间超过此时长,则录制为新文件。

  • RecordFormat

    源流存储格式及录制参数,包括 Format(存储格式)、OssObjectPrefix(存储规则)、SliceDuration(切片时长)、CycleDuration(录制周期)等。

  • TranscodeTemplates、TranscodeRecordFormat

    录制转码流时,指定转码模板 ID 列表和转码流的存储格式及录制参数。

完整参数说明请参见AddLiveAppRecordConfig - 添加录制配置

录制文件管理

查看录制文件

可使用以下三种方式查看存储至 OSS 的录制文件:

方法一:直播控制台
  1. 登录视频直播控制台

  2. 在左侧导航栏选择功能管理 > 直播录制。选择录制文件管理页签。

  3. 选择配置的播流域名。

  4. 单击存储至OSS页签。

    您可通过日期范围、AppName 和 StreamName 筛选录制记录。

方法二:直播 API

视频直播提供接口查询某个时间段内的所有录制索引文件。索引文件信息在视频直播系统中仅保存 6 个月,因此仅支持查询 6 个月内的数据。接口调用详情和参数配置请参见DescribeLiveStreamRecordIndexFiles - 查询某个时间段内的所有录制索引文件

方法三:OSS

在配置录制功能时,已指定了录制文件在 OSS 中的存储地址。如需在 OSS 中查看录制文件,可参见列举文件

合并与提取录制内容

存储至 OSS 支持通过创建新的索引文件,将录制内容按照时间段提取出来,也可以将起止时间段内的多个录制文件内容合并为一个。

说明

录制内容需要包含 M3U8 存储格式才能够进行合并或提取。

方法一:直播控制台
  1. 登录视频直播控制台

  2. 在左侧导航栏选择功能管理 > 直播录制。选择录制文件管理页签。

  3. 选择配置的播流域名。

  4. 选择存储至OSS页签。

  5. 点击录制索引剪辑。通过播流域名、AppName、StreamName 和时间范围筛选录制文件。

  6. 在时间轴内可查看有录制内容的时间段。设置开始和结束时间,点击保存新文件保存生成的新 M3U8 文件。

方法二:直播 API

视频直播提供接口创建新的索引文件。TS 切片信息在视频直播系统中仅保存 3 个月,因此只能选择 3 个月内的录制内容。

接口调用详情和参数配置请参见CreateLiveStreamRecordIndexFiles - 创建录制索引文件

删除录制文件

视频直播储存的是录制文件信息,如 AppName,StreamName,OSS 文件储存路径等,实际录制文件储存在 OSS 中。

如果在视频直播删除录制文件信息时,同步删除储存在 OSS 中的文件,则需要创建服务角色 AliyunMTSVideoLifecycleRole,并精确授权 AliyunMTSVideoLifecycleRolePolicy 系统策略。您可以点击授权进行一键授权。

目前支持以下方式删除录制文件:

  • 直播控制台:在录制文件管理页签选择文件并删除。勾选同步删除存储在OSS的录制文件可同步删除 OSS 文件。

  • 直播 API:调用DeleteLiveStreamRecordIndexFiles - 删除直播录制文件接口。

  • OSS 直接删除一般情况下,不建议直接删除存储在 OSS 中的录制文件。如果您因业务需求,需要直接删除存储在 OSS中 的录制文件,可参考 OSS 文档删除文件

  • 过期自动删除:需提交工单我们会在后台为您配置过期时间

配置 CDN 域名

如果您希望录制的视频能够更快速地在网络中进行分发,可以配置一个 CDN 加速域名。CDN 将视频分发到各地节点,用户就近访问而无需连接 OSS 源站,且有效节省网络费用。具体操作可参见通过 CDN 加速访问 OSS

计费说明

使用直播录制功能可能产生以下费用:

  • 月录制服务费

    开启直播录制后,按照每月录制的并发峰值路数计费。详情请参见直播录制费用

  • 录制转封装费

    选择FLV、MP4、CMAF等非默认格式时,按照时长计费,在视频直播服务收取。详情请参见直播录制费用

  • 录制视频处理费

    存储至 VOD 时,对录制后的视频进行自动合并、转码处理等,将产生视频处理费用,在视频点播服务收取。详情请参见剪辑合成计费媒资转码计费

  • 存储费用

    录制文件存储在视频点播中,会产生存储费用,在视频点播服务收取。详情请参见媒资存储计费

    录制文件存储在 OSS 中,会产生存储费用,在 OSS 服务收取。详情请参见存储费用

常见问题

直播结束后多长时间可以看到录制文件?可以立即生成吗?

生成机制

录制文件并非在断流瞬间生成。系统会在断流后等待断流拼接时长(默认180秒)。在此期间若恢复推流,录制内容将自动合并;若超时未恢复,系统判定直播结束并生成录制文件。

您可以根据业务需求调整断流拼接时长,建议保持默认配置。若设置过短,易因网络抖动生成大量碎片文件;若设置过长,会导致直播结束后需长时间等待才能看到文件。

立即生成方案

如果需要在直播结束后立即获取录制文件,而无等待断流拼接时长,可以给推流设置回调事件(请参见事件回调),在接收到推流结束通知时,通过调用RealTimeRecordCommand - 实时录制指令接口取消断流拼接。

realTimeRecordCommandRequest.setCommand("cancel_delay");

直播未结束时,可以查看当前的录制文件吗?

在直播时长未超过录制周期的情况下,录制文件一般在直播结束后生成。若是您的业务需要在直播未结束的情况下查看当前的录制文件,可以调用RealTimeRecordCommand - 实时录制指令接口,刷新录制内容。该指令会强制结束当前的录制进程并立即生成文件,随后系统会自动开启新的一轮录制。

realTimeRecordCommandRequest.setCommand("restart");

若您的直播流录制配置了多种存储格式,此操作会将多种存储格式一起刷新。

直播流出现异常,会影响录制吗?

系统根据流的异常程度采取不同的处理策略:

  • 标准流(满足编码要求且帧率/时间戳稳定):100%正常生成录制文件。

  • 轻微异常流(偶发帧率波动/时间戳跳变):系统自动兼容处理。

  • 严重异常流(长期无视频帧/时间戳错乱/关键帧缺失):无法保证录制成功率。