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次/秒。
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。 仅 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 | 剪辑的直播流信息: |
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。
- Tencent Cloud SDK 3.0 for Python: GitHub Gitee
- Tencent Cloud SDK 3.0 for Java: GitHub Gitee
- Tencent Cloud SDK 3.0 for PHP: GitHub Gitee
- Tencent Cloud SDK 3.0 for Go: GitHub Gitee
- Tencent Cloud SDK 3.0 for Node.js: GitHub Gitee
- Tencent Cloud SDK 3.0 for .NET: GitHub Gitee
- Tencent Cloud SDK 3.0 for C++: GitHub Gitee
- Tencent Cloud SDK 3.0 for Ruby: GitHub Gitee
命令行工具
6. 错误码
以下仅列出了接口业务逻辑相关的错误码,其他错误码详见 公共错误码。
错误码 | 描述 |
---|---|
FailedOperation | 操作失败。 |
InternalError | 内部错误。 |
InvalidParameterValue | 参数取值错误。 |
InvalidParameterValue.ClipDuration | 参数值错误:裁剪时间段太长。 |
InvalidParameterValue.EndTime | 参数值错误:EndTime 无效。 |
InvalidParameterValue.ExpireTime | 参数值错误:ExpireTime 格式错误。 |
InvalidParameterValue.StartTime | 参数值错误:StartTime 无效。 |
InvalidParameterValue.StreamIdInvalid | 参数值错误:StreamId无效。 |
UnauthorizedOperation | 未授权操作。 |
UnsupportedOperation | 操作不支持。 |