开放能力 内容管理 创建视频
# 创建视频
更新时间:2024-09-26 18:16:05
创建一个视频需要执行 发起上传、上传视频、发布视频 三个步骤
# 发起上传
scope : user_video_publish
接口
POST | https://open.kuaishou.com/openapi/photo/start_upload |
---|
请求参数
Url Query Param 参数直接放在url中
参数 | 类型 | 含义 | 必填 |
---|---|---|---|
access_token | string | oauth 令牌 | 是 |
app_id | string | 快手开平注册的应用的唯一标识 | 是 |
响应结果示例
{
"result": 1,
"upload_token": "3xwn3kkerxj6g9n",
"endpoint" : "uploader.test.gifshow.com"
}
响应结果字段说明
字段 | 字段说明 |
---|---|
result | 状态码,1表示成功 |
upload_token | 上传令牌 |
endpoint | 上传网关的域名 |
之后使根据返回的upload_token及endpoint信息进行文件上传
# 上传视频
提供两种上传方式。
- A. 直接上传,适合小于10M的文件 支持二进制body上传、Multipart Form Data两种方式上传
- B. 分片上传,适合大文件 三个接口配合使用 ,建议分片大小 不大于10M
- 注:为提高上传效率 上传接口 均为http://{host}/...
# A. 直接上传
提供两种方式:
- A.1 二进制body方式
- A.2 Multipart Form Data方式
- 注: 参数upload_token都是直接放在url中
# A.1 二进制body方式
接口
POST | http://{endpoint}/api/upload |
---|
请求参数
Url Query 参数直接放在url中
参数 | 类型 | 含义 | 必填 |
---|---|---|---|
upload\_token | string | 上传令牌 | 是 |
Body 直接传递二进制数据
不要在body中放boundary,content-type等信息,直接放文件的二进制信息!!!
body (data-binary) |
---|
上传文件二进制内容 |
响应结果示例
{
"result": 1
}
curl参考 上传MP4文件为例
curl --location --request POST 'http://{endpoint}/api/upload?upload_token=your_upload'
--header 'Content-Type: video/mp4'
--data-binary '文件二进制'
# A.2 Multipart Form Data方式
接口
POST | http://{endpoint}/api/upload/multipart |
---|
请求参数
Url Query 参数直接放在url中
参数 | 类型 | 含义 | 必填 |
---|---|---|---|
upload_token | string | 上传令牌 | 是 |
body参数 Content-Type为 multipart/form-data
参数 | 类型 | 含义 | 必填 |
---|---|---|---|
file | file | 文件 | 是 |
响应结果示例
{
"result": 1
}
# B. 分片上传
上传的文件过大的时候,建议使用分片上传,对上传的文件二进制按大小分片后,对每一个分片进行上传,上传完毕后执行上传完成接口进行分片合并.
分片上传共有3个步骤:
- B.1 上传分片
- B.2 断点续传
- B.3 完成分片上传
# B.1 上传分片
接口
POST | http://{endpoint}/api/upload/fragment |
---|
请求参数
Url Query Param 参数直接放在url中
参数 | 类型 | 含义 | 必填 |
---|---|---|---|
fragment_id | number | 分片id 从0开始 | 是 |
upload_token | string | 上传令牌 | 是 |
Body 直接传递二进制数据
body (data-binary) |
---|
上传文件二进制内容 |
响应结果示例
{
"result": 1,
"checksum": "1e26571bfdd14604d6ece3243edbe729",
"size": 2367345
}
curl参考 上传MP4文件为例
curl
--location --request POST 'http://{endpoint}/api/upload/fragment?upload_token=your_upload&fragment_id=0'
--header 'Content-Type: video/mp4'
--data-binary '文件二进制'
# B.2 断点续传
非必要的流程,在上传进程意外中断的情况下,可以使用此接口查询已经上传的分片,从失败的分片重新上传
接口
GET | http://{endpoint}/api/upload/resume |
---|
请求参数
Url Query Param 参数直接放在url中
参数 | 类型 | 含义 | 必填 |
---|---|---|---|
upload_token | string | 上传令牌 | 是 |
响应结果示例
{
"result": 1,
"existed": true, // 该文件是否已上传过
"fragment_index": -1, // 从0开始的已上传的连续分片id (-1 表示没有分片)
"fragment_list": [], // 已上传的分片id
"endpoint": [ // api方式上传不用关心
{
"protocol": "KTP",
"host": "103.102.200.26",
"port": 6666
},
{
"protocol": "KTP",
"host": "103.107.219.10",
"port": 6666
}
],
"fragment_index_bytes": 0, // 从0开始的已上传的连续分片size
"token_id": "0a20d2355f0ed2e9000000000004c81f" // 上传id 用于业务打点 关联本次 upload_token
}
# B.3 完成分片上传
接口
POST | http://{endpoint}/api/upload/complete |
---|
请求参数
Url Query Param 参数直接放在url中
参数 | 类型 | 含义 | 必填 |
---|---|---|---|
fragment_count | number | 分片总数 | 是 |
upload_token | string | 上传令牌 | 是 |
响应结果示例
{
"result": 1
}
# 发布视频
USER_VIDEO_PUBLISH
接口
POST | https://open.kuaishou.com/openapi/photo/publish |
---|---|
请求参数 |
Url 参数: 参数直接放在url中
参数 | 类型 | 含义 | 必填 |
---|---|---|---|
access\_token | string | oauth 令牌 | 是 |
app_id | string | 快手注册的app_id | 是 |
upload\_token | string | 用户唯一标识 | 是 |
body参数: Content-Type为multipart/form-data
参数 | 类型 | 含义 | 必填 |
---|---|---|---|
cover | file | 封面图(_10MB) | 是 |
caption | string | 标题 | 是 |
stereo_type | string | 全景视频参数,以下枚举字符串NOT_SPHERICAL_VIDEO SPHERICAL_VIDEO_360 SPHERICAL_VIDEO_180 | 否 |
merchant\_product\_id | number | 需要挂载小黄车的商品ID 如何获取商品ID (opens new window) (仅支持挂载自建商品,不支持其他类型商品挂载。) | 否 |
响应结果示例 |
{
"result": 1,
"video_info": {
"photo_id": "3xwn3kkerxj6g9n",
"caption": "测试标题",
"cover": "https://xxx",
"play_url": "https://xxx",
"create_time": 1596629598574,
"like_count": 1,
"comment_count": 1,
"view_count": 1,
"pending": false
}
}
响应结果字段解析
字段 | 字段说明 | |
---|---|---|
result | 状态码,1表示成功 | |
video_info | 作品详情 | |
photo_id | 作品id | |
caption | 作品标题 | |
cover | 作品封面 | |
play_url | 作品播放链接 | |
create_time | 作品创建时间 | |
like_count | 作品点赞数 | |
comment_count | 作品评论数 | |
view_count | 作品观看数 | |
pending | 作品状态(是否还在处理中,不能观看) |
状态含义
状态 | 含义 |
---|---|
100120001 | 视频不存在 |
100120002 | 视频未上传 |
100120003 | 视频发布失败 |
100100400 | 异常参数 |
100100402 | 一般有3种情况:1. 用户被封禁;2. 用户一天请求该接口超过1k次;3. app一天请求该接口超过10w次 |
# 常见问题
# 1. 返回SERVER_ERROR:
- 发起上传阶段: 通常是access_token无效,需要通过用户授权视频上传权限来获取到合法的access_token。
- 分片上传阶段:分片index是从0开始,请再次检查上传过程中分片index、分片数量是否传输正确。
- 发布视频阶段:请检查是否设置了header,content-type是否设置正确。正确做法是:不设置header,content-type设置为multipart/form-data
# 2. 返回USER_REQUEST_LIMIT:
- 用户被封禁通常是因为发布非原创视频。
# 3. 上传视频的那一步已经返回成功了,为什么在发布视频时会返回错误VIDEO_NOT_UPLOADED?
- 上传接口只保证文件的上传是成功的,但是并不会对上传后的视频做校验。因此很可能因为上传方式的不对,导致上传的视频有损坏。这样在发布视频时,视频会转码失败,返回这个错误码。请再次检查前一步的上传方式是否正确。
# 4. 分片上传时已经成功,为什么在请求完成分片上传接口时会返回400错误?
- 分片上传过程中分片index是从0开始,请再次检查上传过程中分片index、分片数量是否传输正确。
上一篇:《手机号》
下一篇:《删除视频》
仍有疑问? 前往社区提问