接口功能介绍
注意
本接口适用于2026年3月13日之后开通的新增客户。在此之前开通的存量客户,如已使用旧版API或者旧版SDK开发业务的,可继续沿用旧接口和SDK,也可视自身情况迁移至新接口。
通过本接口可在点播模式下创建一个视频条目。
上传原理概述
视频文件的创建、存储需要分3步来进行。
步骤1:初始化上传,在此步骤需要将所有的业务管理信息发送到云点播服务中创建视频文件接口,接口成功之后会返回分片上传的地址列表,如后文的响应示例所示。
调用了该接口但未调用完成上传视频接口,系统会在数据库中存入这些业务信息(以及一些中间信息,例如uploadId),但由于这条视频信息还处于 UPLOADING的状态,除了删除视频外的其他接口,均不会对这些视频造成影响。例如在提交任务接口中,甚至会返回找不到该视频的错误。
步骤2: 将视频文件片上传到步骤1返回的URL列表中。
将完整的视频按照步骤1约定的大小进行切片,然后将片段按照顺序使用 data.uploadUrls 中返回的预签名 URL 通过PUT方法上传到服务器。JAVA版原理示例如下,用户可结合自己的开发语言自行实现。signature签名已在步骤1中提供,如果过期可以参考签名应用及示例中SHELL示例重签。
File localVideoFile = new File("fullFilePath");
// 从第一步初始化分片获取各个分片上传预签名链接
// 例如 https://example.xstore.ctyun.cn/Objectname/uploadPart?partNum=1&signature=xxxxxx
List<String> partPresignedUrlList;
// 分片大小示例为5M
int partSize = 5 * 1_024 * 1_024;
// 存放每个分片上传成功后的etag
List<String> partEtags = new LinkedList<>();
// 从第一片开始
int partNumber = 1;
// 实例化一个OkHttpClient
OkHttpClient okHttpClient = buildOkHttpClient();
// 依次读取、上传各个分片字节流
try (FileInputStream fin = new FileInputStream(localVideoFile); FileChannel channel = fin.getChannel()) {
ByteBuffer buffer = ByteBuffer.allocate(partSize);
byte[] partContent = new byte[partSize];
int partLength = 0;
while ((partLength = (channel.read(buffer))) != -1) {
String partPresignedUrl = partPresignedUrlList.get(partNumber - 1);
// 读取第partNumber片字节流
((Buffer) buffer).flip();
buffer.get(partContent, 0, partLength);
// 上传第partNumber片字节流
RequestBody body = RequestBody.create(partContent, null, 0, partLength);
Request req = new Request.Builder().url(partPresignedUrl).put(body).build();
int uploadRetryCount = 0;
while (uploadRetryCount < 3) {
try (Response response = okHttpClient.newCall(req).execute()) {
if (response.isSuccessful()) {
log.info("Put part to [{}] successfully!", partPresignedUrl);
partEtags.add(response.header("etag"));
break;
}
log.error("put part to [{}] failed,failed code is {}, error:{}", partPresignedUrl,
response.code(),
response.body().string());
uploadRetryCount++;
log.info("Retry to put part to [{}] again!", partPresignedUrl);
} catch (Exception ex) {
log.error("put part to [{}] failed:", partPresignedUrl, ex);
uploadRetryCount++;
log.info("Retry to put part to [{}] again!", partPresignedUrl);
}
}
// 清空缓存区
((Buffer) buffer).clear();
}
}步骤3:调用云点播服务完成上传视频接口完成本次上传。步骤2每次上传成功之后,需要记录请求 Response 中的 eTag 头部信息,在步骤3完成上传视频的接口参数中传入该参数。
接口约束
本接口的单用户QPS限制为20次/秒。超过限制,API调用会被限流,这可能会影响您的业务,请合理调用。
URI
POST /video/init
请求体body参数
| 参数 | 是否必填 | 参数类型 | 说明 | 示例 | 下级对象 |
|---|---|---|---|---|---|
| name | 是 | String | 视频的名称 | 平凡的世界 | |
instanceId | 否 | instanceId | 视频存储的实例ID。对于主账号,当不填写时使用默认实例,当填写正确的实例ID时,文件将上传至指定实例。对于子账号,该入参无需使用,云点播后台会根据子账号分配的实例情况自动传入指定实例,如强行指定且传入错误的instanceId,后台会拒绝本次请求。 | 4546077670 | |
| remark | 否 | String | 视频简介 | 讲述了一个感人的故事。 | |
| tags | 否 | Array of Strings | 视频标签 | 励志片 | |
| fileInfo | 是 | Object | 视频信息 | fileInfo | |
| categoryId | 否 | Integer | 视频所属分类ID。 | 10000600056 |
表 fileInfo
| 参数 | 是否必填 | 参数类型 | 说明 | 示例 | 下级对象 |
|---|---|---|---|---|---|
| fileSize | 是 | Integer | 文件大小,单位为 byte。 | 1024000 | |
| partSize | 否 | Integer | 分片大小,单位为byte,建议设置成5M,如果不填写,默认为5M。 | 5242880 |
响应参数
| 参数 | 是否必填 | 参数类型 | 说明 | 示例 | 下级对象 |
|---|---|---|---|---|---|
| code | 是 | String | 本次请求的结果码。 | "0" | |
| message | 是 | String | 错误文本信息,创建成功时,为空字符串。 | "" | |
| data | 是 | Object | 返回数据。 | data |
表data
| 参数 | 是否必填 | 参数类型 | 说明 | 示例 | 下级对象 |
|---|---|---|---|---|---|
| videoId | 是 | String | 视频的 id。 | 34c71dba-f280-4f5e-a05f-f4daed837fef | |
| uploadUrls | 是 | Array of Strings | 上传地址列表。 | [https://example.xstore.ctyun.cn/Objectname/uploadPart?partNum=1&signature=xxxxxx] |
请求示例
{
"name": "videoNmae",
"instanceId": 4546077670,
"remark": "",
"tags": ["爱情片", "历史片"],
"fileInfo": {
"fileSize": 1024000,
"partSize": 5242880
},
"categoryId":10000600056
}响应示例
{
"code": "0",
"message": "",
"data" : {
"videoId": "34c71dba-f280-4f5e-a05f-f4daed837fef",
"uploadUrls": ["https://example.xstore.ctyun.cn/Objectname/uploadPart?partNum=1&signature=xxxxxx",
"https://example.xstore.ctyun.cn/Objectname/uploadPart?partNum=2&signature=xxxxxx"]
}
}状态码
| Http 状态码 | 状态码信息 | 状态码描述 |
|---|---|---|
| 0 | 表示业务成功 | 表示业务成功 |
| 400 | 请求参数有误 | 请求参数有误 |
| 403 | 用户鉴权失败,用户无操作权限 | 用户鉴权失败,用户无操作权限 |
| 404 | 请求的资源不存在,输入错误的URL | 请求的资源不存在,输入错误的URL |
| 500 | 业务执行异常 | 业务执行异常 |
错误码
OpenAPI错误码请参考 错误码说明。