直播即时剪辑

最近更新时间:2024-09-24 01:35:42

我的收藏

1. 接口描述

接口请求域名: vod.tencentcloudapi.com 。

直播即时剪辑,是指在直播过程中(即直播尚未结束时),客户可以在过往直播内容中选择一段,实时生成一个新的视频(HLS 格式),开发者可以将其立即分享出去,或者长久保存起来。

腾讯云点播支持两种即时剪辑模式:

  • 剪辑固化:将剪辑出来的视频保存成独立的视频,拥有独立 FileId;适用于将精彩片段长久保存的场景;
  • 剪辑不固化:剪辑得到的视频附属于直播录制文件,没有独立 FileId;适用于将精彩片段临时分享的场景。

注意:

  • 使用直播即时剪辑功能的前提是:目标直播流开启了时移回看功能。
  • 直播即时剪辑是基于直播录制生成的 m3u8 文件进行的,故而其最小剪辑精度为一个 ts 切片,无法实现秒级或者更为精确的剪辑精度。
  • 由于直播过程中可能存在断流的情况,所以有可能导致剪辑生成的实际视频时长与期望不一致。例如剪辑某个直播流的时间区间为 2018-09-20T10:30:00Z 到 2018-09-20T10:40:00Z ,如果在该时间区间中发生过断流,那么返回的媒资文件的时长将少于 10 分钟,在这种情况下,可以通过输出参数 SegmentSet 感知到。

剪辑固化

所谓剪辑固化,是指将剪辑出来的视频是保存成一个独立的视频(拥有独立的 FileId)。其生命周期不受原始直播录制视频影响(即使原始录制视频被删除,剪辑结果也不会受到任何影响);也可以对其进行转码、微信发布等二次处理。

举例如下:一场完整的足球比赛,直播录制出来的原始视频可能长达 2 个小时,客户出于节省成本的目的可以对这个视频存储 2 个月,但对于直播即时剪辑的「精彩时刻」视频却可以指定存储更长时间,同时可以单独对「精彩时刻」视频进行转码、微信发布等额外的点播操作,这时候可以选择直播即时剪辑并且固化的方案。

剪辑固化的优势在于其生命周期与原始录制视频相互独立,可以独立管理、长久保存。

注意:如果剪辑时指定进行固化,通过 ModifyEventConfig 接口启用接收剪辑固化事件通知,固化成功后将会收到一个 PersitenceComplete 类型的事件通知。在收到这个事件通知之前,不应该对直播录制视频进行删除、降冷等操作,否则剪辑生成的视频播放可能出现异常。

剪辑不固化

所谓剪辑不固化,是指剪辑所得到的结果(m3u8 文件)与直播录制视频共享相同的 ts 分片,新生成的视频不是一个独立完整的视频(没有独立 FileId,只有播放 URL),其有效期与直播录制的完整视频有效期是一致的。一旦直播录制出来的视频被删除,也会导致该片段无法播放。

剪辑不固化,由于其剪辑结果不是一个独立的视频,因而也不会纳入点播媒资视频管理(例如控制台的视频总数不会统计这一片段)中,也无法单独针对这个片段做转码、微信发布等任何视频处理操作。

剪辑不固化的优势在于其剪辑操作十分“轻量化”,不会产生额外的存储开销。但其不足之处在于生命周期与原始录制视频相同,且无法进一步进行转码等视频处理。

默认接口请求频率限制:100次/秒。

推荐使用 API Explorer
点击调试
API Explorer 提供了在线调用、签名验证、SDK 代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成 SDK 调用示例。

2. 输入参数

以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见 公共请求参数

参数名称 必选 类型 描述
Action String 公共参数,本接口取值:LiveRealTimeClip。
Version String 公共参数,本接口取值:2018-07-17。
Region String 公共参数,此参数为可选参数。
StreamId String 推流直播码。
示例值:record-stream
StartTime String 流剪辑的开始时间,格式参照 ISO 日期格式说明
示例值:2018-09-20T10:00:00Z
EndTime String 流剪辑的结束时间,格式参照 ISO 日期格式说明
示例值:2018-09-20T11:00:00Z
SubAppId Integer 点播应用 ID。从2023年12月25日起开通点播的客户,如访问点播应用中的资源(无论是默认应用还是新创建的应用),必须将该字段填写为应用 ID。
示例值:1490012345
IsPersistence Integer 是否固化。0 不固化,1 固化。默认不固化。
示例值:1
ExpireTime String 剪辑固化后的视频存储过期时间。格式参照 ISO 日期格式。填“9999-12-31T23:59:59Z”表示永不过期。过期后该媒体文件及其相关资源(转码结果、雪碧图等)将被永久删除。仅 IsPersistence 为 1 时有效,默认剪辑固化的视频永不过期。
示例值:2023-08-01T10:00:00Z
Procedure String 剪辑固化后的视频点播任务流处理,详见上传指定任务流。仅 IsPersistence 为 1 时有效。
示例值:LongVideoPreset
ClassId Integer 分类ID,用于对媒体进行分类管理,可通过 创建分类 接口,创建分类,获得分类 ID。
  • 默认值:0,表示其他分类。

  • 仅 IsPersistence 为 1 时有效。
    示例值:0
    SourceContext String 来源上下文,用于透传用户请求信息,上传完成回调 将返回该字段值,最长 250 个字符。仅 IsPersistence 为 1 时有效。
    示例值:""
    SessionContext String 会话上下文,用于透传用户请求信息,当指定 Procedure 参数后,任务流状态变更回调 将返回该字段值,最长 1000 个字符。仅 IsPersistence 为 1 时有效。
    示例值:""
    MetaDataRequired Integer 是否需要返回剪辑后的视频元信息。0 不需要,1 需要。默认不需要。
    示例值:0
    Host String 云点播中添加的用于时移播放的域名,必须在云直播已经关联录制模板和开通时移服务如果本接口的首次调用时间在 2021-01-01T00:00:00Z 之后,则此字段为必选字段。
    示例值:myexample2.com
    StreamInfo LiveRealTimeClipStreamInfo 剪辑的直播流信息:
  • 默认剪辑直播原始流。
  • 当StreamInfo中指定的Type为Transcoding,则剪辑TemplateId对应的直播转码流。
  • ExtInfo String 系统保留字段,请勿填写。
    示例值:""

    3. 输出参数

    参数名称 类型 描述
    Url String 剪辑后的视频播放 URL。
    示例值:http://video.com/playlist.m3u8
    FileId String 剪辑固化后的视频的媒体文件的唯一标识。
    示例值:123
    VodTaskId String 剪辑固化后的视频任务流 ID。
    示例值:“”
    MetaData MediaMetaData 剪辑后的视频元信息。
    注意:此字段可能返回 null,表示取不到有效值。
    SegmentSet Array of LiveRealTimeClipMediaSegmentInfo 剪辑后的视频片段信息。
    RequestId String 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。

    4. 示例

    示例1 即时剪辑不固化

    对直播码为 record-stream 和域名为 example.com 的直播流发起即时剪辑,起始时间为 2018-09-20T10:00:00Z,结束时间为 2018-09-20T11:00:00Z,并且不固化。假设该直播流在 2018-09-20T10:30:00Z 到 2018-09-20T10:40:00Z 存在过断流的情况,持续时间为10分钟,那么输出参数 SegmentSet 将包含两个片段信息,可以得到剪辑后的视频实际时长为50分钟。

    输入示例

    POST / HTTP/1.1
    Host: vod.tencentcloudapi.com
    Content-Type: application/json
    X-TC-Action: LiveRealTimeClip
    <公共请求参数>
    
    {
        "Host": "example.com",
        "EndTime": "2018-09-20T11:00:00Z",
        "StartTime": "2018-09-20T10:00:00Z",
        "StreamId": "record-stream"
    }

    输出示例

    {
        "Response": {
            "Url": "http://example.com/playlist.m3u8",
            "FileId": "",
            "VodTaskId": "",
            "MetaData": null,
            "SegmentSet": [
                {
                    "StartTime": "2018-09-20T10:00:00Z",
                    "EndTime": "2018-09-20T10:30:00Z"
                },
                {
                    "StartTime": "2018-09-20T10:40:00Z",
                    "EndTime": "2018-09-20T11:00:00Z"
                }
            ],
            "RequestId": "6ca31e3a-6b8e-xxxx-9256-fdc700064ef3"
        }
    }

    示例2 即时剪辑并且固化

    对直播码为 record-stream 和域名为 example.com 的直播流发起即时剪辑,起始时间为 2018-09-20T12:00:00Z,结束时间为 2018-09-20T13:00:00Z,并且进行固化和发起任务流处理。

    输入示例

    POST / HTTP/1.1
    Host: vod.tencentcloudapi.com
    Content-Type: application/json
    X-TC-Action: LiveRealTimeClip
    <公共请求参数>
    
    {
        "IsPersistence": "1",
        "Host": "example.com",
        "StartTime": "2018-09-20T12:00:00Z",
        "StreamId": "record-stream",
        "EndTime": "2018-09-20T13:00:00Z",
        "Procedure": "SomeProcedure"
    }

    输出示例

    {
        "Response": {
            "Url": "http://example.com/playlist.m3u8",
            "FileId": "5285890xxxxxx199336",
            "VodTaskId": "125xxxx65-procedurev2-bffb15f07530b57bc1aabb01fac74bca",
            "MetaData": null,
            "SegmentSet": [
                {
                    "StartTime": "2018-09-20T12:00:00Z",
                    "EndTime": "2018-09-20T13:00:00Z"
                }
            ],
            "RequestId": "6ca31e3a-6b8e-xxxx-9256-fdc700064ef3"
        }
    }

    5. 开发者资源

    腾讯云 API 平台

    腾讯云 API 平台 是综合 API 文档、错误码、API Explorer 及 SDK 等资源的统一查询平台,方便您从同一入口查询及使用腾讯云提供的所有 API 服务。

    API Inspector

    用户可通过 API Inspector 查看控制台每一步操作关联的 API 调用情况,并自动生成各语言版本的 API 代码,也可前往 API Explorer 进行在线调试。

    SDK

    云 API 3.0 提供了配套的开发工具集(SDK),支持多种编程语言,能更方便的调用 API。

    命令行工具

    6. 错误码

    以下仅列出了接口业务逻辑相关的错误码,其他错误码详见 公共错误码

    错误码 描述
    FailedOperation 操作失败。
    InternalError 内部错误。
    InvalidParameterValue 参数取值错误。
    InvalidParameterValue.ClipDuration 参数值错误:裁剪时间段太长。
    InvalidParameterValue.EndTime 参数值错误:EndTime 无效。
    InvalidParameterValue.ExpireTime 参数值错误:ExpireTime 格式错误。
    InvalidParameterValue.StartTime 参数值错误:StartTime 无效。
    InvalidParameterValue.StreamIdInvalid 参数值错误:StreamId无效。
    UnauthorizedOperation 未授权操作。
    UnsupportedOperation 操作不支持。