# 创建视频

更新时间: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、分片数量是否传输正确。
Copyright ©2024, All Rights Reserved