创建视频
更新时间 2026-03-13 09:16:42
最近更新时间: 2026-03-13 09:16:42
通过本接口可创建一个视频条目。
接口功能介绍
通过本接口可在点播模式下创建一个视频条目。
视频文件的存储需要3步来进行文件上传。
步骤1:初始化上传,在此步骤需要将所有的业务管理信息发送到云点播服务中创建视频文件接口,接口成功之后会返回分片上传的地址列表,如下文响应示例所示。
调用了该接口但未调用完成上传视频接口,系统会在数据库中存入这些业务信息(以及一些中间信息,例如uploadId),但由于这条视频信息还处于 UPLOADING的状态,除了删除视频外的其他接口,均不会对这些视频造成影响。例如在提交任务接口中,甚至会返回找不到该视频的错误。
步骤2: 将视频文件片上传到步骤1返回的URL列表中。
将完整的视频按照步骤1约定的大小进行切片,然后将片段按照顺序使用 data.uploadUrls 中返回的预签名 URL 上传到服务器。signature签名可以参考签名应用及示例中SHELL实例。
步骤2: 将视频文件片上传到步骤1返回的URL列表中。
将完整的视频按照步骤1约定的大小进行切片,然后将片段按照顺序使用 data.uploadUrls 中返回的预签名 URL 通过PUT方法上传到服务器。java版原理示例如下。用户可结合自己的开发语言自行实现。
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/create
请求体body参数
| 参数 | 是否必填 | 参数类型 | 说明 | 示例 | 下级对象 |
|---|---|---|---|---|---|
| name | 是 | String | 视频的名称 | 平凡的世界 | |
| regionCode | 否 | String | 视频存储的区域,请保证您开通了该区域的存储,当不填写或填写空字符串/空格时使用默认资源池。 | xs-shanghai-1 | |
| remark | 否 | String | 视频简介 | 讲述了在面对现实压力和人生抉择时,兄弟俩依旧坚守最初梦想和对爱情执着的追求的故事。 | |
| tags | 否 | Array of Strings | 视频标签 | 励志片 | |
| fileInfo | 是 | Object | 视频信息 | fileInfo | |
| categoryId | 否 | Integer | 视频所属分类ID。 | 10000600056 |
表 fileInfo
| 参数 | 是否必填 | 参数类型 | 说明 | 示例 | 下级对象 |
|---|---|---|---|---|---|
| fileSize | 是 | Integer | 文件大小,单位为 byte。 | 1024000 | |
| partSize | 否 | Integer | 分片大小,单位为byte,建议设置成5M,如果不填写,默认为5M。 | 5242880 | |
| md5 | 否 | String | 当视频上传合并完成之后会对上传视频进行md5校验,校验失败会返回上传失败,如果为空则不检查。 | “” |
响应参数
| 参数 | 是否必填 | 参数类型 | 说明 | 示例 | 下级对象 |
|---|---|---|---|---|---|
| code | 是 | Integer | 本次请求的结果码。 | 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",
"regionCode": "xs-shanghai-1",
"remark": "",
"tags": ["爱情片", "历史片"],
"fileInfo": {
"fileSize": 1024000,
"partSize": 5242880,
"md5": ""
},
"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错误码请参考 错误码说明。