视频拼接

最近更新时间:2019-05-29 11:44:37

接口名称

ConcatVideo

功能说明

  1. 将多个视频拼接成新视频文件,并添加到点播系统中,新生成的视频文件将拥有新的 FileID。
  2. 术语约定:待拼接的视频文件为“源文件”,拼接之后生成的新文件为“目标文件”。
  3. 并非任意视频文件都可以进行拼接,对源文件的要求参见 源文件可拼接条件
  4. HLS 拼接参见 HLS视频拼接说明
  5. 目标文件输出格式参见 目标文件输出格式说明
  6. 对于直播/互动直播录制转点播的用户,如果您是对同一场直播产生的多个录制片段进行拼接,一般都能够满足拼接输入要求。

源文件可拼接条件

  1. 源文件支持 MP4/FLV/HLS 封装格式,对于直播/互动直播录制生成的 HLS 视频的拼接,请参见 HLS 视频拼接说明
  2. 源文件总数量不超过500个;注意:如果涉及 HLS 拼接,参见 HLS 视频拼接说明
  3. 源文件总大小加起来不超过10G。
  4. 源文件的封装格式必须相同,例如全部是 FLV,或者全部是 MP4,或者全部是 HLS。
  5. 源文件的音视频编码格式必须相同,例如视频编码格式必须全部是 H.264,或者必须全部是 H.265。
  6. 源文件的分辨率必须相同(必须相同的原因是:如果分辨率不同,强制拼接出来的文件,主流播放器无法播放)。
  7. 源文件的色度空间、时间基必须相同
  8. 源文件中音频的采样频率必须相同
  9. 源文件的码率、帧率可以不同。

HLS 视频拼接说明

  1. HLS 拼接不是简单的将 M3U8 文件合并,而是会抽出其中所有的 ts 文件进行拼接。
  2. 对于 HLS 拼接,“源文件”是指 M3U8 中包含的 ts 文件,即:待拼接 HLS 视频中的所有 TS 分片必须满足 源文件可拼接条件

特别注意:“直播录制断流产生多个分片”场景的解决方案

对于腾讯云直播录制转点播,有可能由于多种原因(例如RTMP推流意外断流),导致一场直播录制产生多个文件。对于这种场景,我们不建议使用该接口对录制生成的多个文件进行拼接,原因在于:

  1. 直播过程中,视频文件的分辨率极有可能产生变化,但本接口不支持对分辨率不同的文件进行拼接。
  2. 拼接过程消耗的资源较多,且无法在直播录制完成之后立即得到完整回看地址。
  3. 相比于拼接方案,以下介绍的“HLS 录制自动拼接”方案更加友好。

对于“直播录制断流产生多个分片”这一场景,强烈推荐使用“HLS 录制自动拼接”方案。

所谓“HLS 录制自动拼接”是指,如果您的业务允许录制出 HLS,那么在录制过程中,腾讯云即可保证即时进行拼接。一场直播完成之后,您可以在秒级拿到正常直播的完整回看地址。具体接入参见 HLS 录制自动拼接

目标文件输出格式说明

  1. 目标文件的输出格式仅支持 MP4/HLS。
  2. 目标文件的音视频编码格式与源文件相同。
  3. 目标文件的分辨率与源文件相同。
  4. 目标文件的色度空间、时间基与源文件相同。
  5. 目标文件的码率、帧率与每个源文件相同;即:目标文件的某个片段来源于哪一个源文件,则码率、帧率与该文件相同。

事件通知

文件上传成功可触发 事件通知-视频拼接完成。App 后台可据此监听点播系统中的视频拼接行为。

更多参见 服务端事件通知简介

请求域名

vod.api.qcloud.com

最高调用频率

100次/分钟

参数说明

参数名称 必填 类型 说明
srcFileList.n.fileId String 源文件的 FileID。
name String 目标文件名称。
dstType.n String 目标文件输出格式,支持同时输出 mp4 和 hls 两种格式;请填写 mp4 或者 m3u8。
COMMON_PARAMS 请参见 公共参数

请求示例

https://vod.api.qcloud.com/v2/index.php?Action=ConcatVideo
&srcFileList.0.fileId=16092504232103571364
&srcFileList.1.fileId=16092504232103571365
&name=testfile
&dstType.0=m3u8
&COMMON_PARAMS

接口应答

参数说明

参数名称 类型 说明
code Integer 错误码,0:成功;其他值:失败。
message String 错误信息。
vodTaskId String 任务 ID。

错误码说明

错误码 含义说明
4000-7000 请参见 公共错误码
1000 无效参数。
1001 用户信息错误。
10009 文件状态异常。

应答示例

{
    "code": 0,
    "message": "",
    "vodTaskId": ""
}