视频托管服务接口

版本: 1.1.0 时间: 2021.11.30

获取上传地址

  • 接口:/api/video/upload
  • 请求方式:POST
  • 说明:获取上传地址
  • 入参列表
参数名称类型默认值是否必传解释
access_keystring访问秘钥
timestampint请求时间戳
signstring签名
  • 请求示例
curl -X POST https://api.xxx.com/api/video/upload?access_key=xxx&timestamp=xxx&sign=xxx
  • 返回示例
{
  "code": 200,
  "msg": "success",
  "logid": "7a1e2b09-ee41-44a1-a21c-80dfbd500e9b",
  "data": {
    "url": "http://xxx.xxxx.com/8a0b88d0-e3fe-589e-b611-e03ce99c9e3f%2FMTI%3D.mp4%0A?Expires=1611823653&OSSAccessKeyId=V5PSR7b2JqZW&Signature=eosEagTbpTYNejYolpGbyotdsPE%3D&callback=eyJjYWxsYmFja0JvZHkiOiJvYmplY3Rfa2V5PSR7b2JqZWN0fVx1MDAyNnNpemU9JHtzaXplfVx1MDAyNmNvbnRlbnRfdHlwZT0ke21pbWVUeXBlfVx1MDAyNmhlaWdodD0ke2ltYWdlSW5mby5oZWlnaHR9XHUwMDI2d2lkdGg9JHtpbWFnZUluZm8ud2lkdGh9XHUwMDI2ZXRhZz0ke2V0YWd9XHUwMDI2dXBsb2FkZXJfaWQ9MTIzM1x1MDAyNmFwcF9pZD0wXHUwMDI2dHlwZT0wXHUwMDI2ZXh0ZW5kPVx1MDAyNmJ1Y2tldD15aWxhbi1qYXJ2aXMiLCJjYWxsYmFja0JvZHlUeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwiY2FsbGJhY2tVcmwiOiJodHRwOi8vNDcuOTQuMjMuMTg5Ojg1MTAvb3NzL2FsaS9jYWxsYmFjayJ9",
    "timeout": 3600,
    "status": "waiting",
    "id": "nJ5vjR7vQ5VZ"
  }
}
  • 返回字段说明
参数类型说明及样例
codeint接口状态,200 表示接口返回正常,其它值表示接口异常
msgstring接口返回消息
logidstring请求的 id
urlstring直接上传文件的地址
timeoutint地址有效期
statusstring视频状态
idstring视频 ID

获取播放地址

  • 接口:/api/video/play
  • 请求方式:POST
  • 说明:获取视频播放地址
  • 入参列表
参数名称类型默认值是否必传解释
access_keystring访问秘钥
timestampint请求时间戳
signstring签名
  • body 参数
参数名称类型默认值是否必传解释
idstring视频 ID
  • 请求示例
curl -X POST https://api.xxx.com/api/video/play?access_key=xxx&timestamp=xxx&sign=xxx -d '{"id":"xxx"}'
  • 返回示例
{
  "code": 200,
  "msg": "success",
  "logid": "7a1e2b09-ee41-44a1-a21c-80dfbd500e9b",
  "data": {
    "play": [
      {
        "url": "http://xxx.xxx.com/20180210/4409b0d413bc6c413359bb94088d13be?auth_key=1544014458-90-0-391b8bdc284141b2d59679e34e7d13a0",
        "type": "video",
        "resolution": "HD",
        "width": 1280,
        "height": 720,
        "duration": 20,
        "src": "u"
      }
    ],
    "status": "ready",
    "id": "nJ5vjR7vQ5VZ",
    "created_at": 1609273149
  }
}
  • 返回字段说明
参数类型说明及样例
codeint接口状态,200 表示接口返回正常,其它值表示接口异常
msgstring接口返回消息
logidstring请求的 id
urlstring视频实际播放地址
typestring类型
resolutionstring分辨率
widthint
heightint
durationfloat视频时长
srcstringu:用户 y:定制
statusstring视频状态
idstring视频 ID
created_atint视频创建时间

获取视频列表

  • 接口:/api/video/list
  • 请求方式:POST
  • 说明:获取用户视频列表
  • 入参列表
参数名称类型默认值是否必传解释
access_keystring访问秘钥
timestampint请求时间戳
signstring签名
  • body 参数
参数名称类型默认值是否必传解释
pageint页码
sizeint条数
  • 请求示例
curl -X POST https://api.xxx.com/api/video/list?access_key=xxx&timestamp=xxx&sign=xxx -d '{"page":1,"size":10}'
  • 返回示例
{
  "code": 200,
  "msg": "success",
  "logid": "7a1e2b09-ee41-44a1-a21c-80dfbd500e9b",
  "data": [
    {
      "play": [
        {
          "url": "http://xxx.xxx.com/20180210/4409b0d413bc6c413359bb94088d13be?auth_key=1544014458-90-0-391b8bdc284141b2d59679e34e7d13a0",
          "type": "video",
          "resolution": "HD",
          "width": 1280,
          "height": 720,
          "duration": 20,
          "src": "u"
        }
      ],
      "status": "ready",
      "id": "nJ5vjR7vQ5VZ",
      "created_at": 1609273149
    }
  ]
}
  • 返回字段说明
参数类型说明及样例
codeint接口状态,200 表示接口返回正常,其它值表示接口异常
msgstring接口返回消息
logidstring请求的 id
urlstring视频实际播放地址
typestring类型
resolutionstring分辨率
widthint
heightint
durationfloat视频时长
srcstringu:用户 y:定制
statusstring视频状态
idstring视频 ID
created_atint视频创建时间

Fetch 上传

  • 接口:/api/video/fetch
  • 请求方式:POST
  • 说明:提供文件地址进行上传
  • 入参列表
参数名称类型默认值是否必传解释
access_keystring访问秘钥
timestampint请求时间戳
signstring签名
  • body 参数
参数名称类型默认值是否必传解释
inputstring文件地址
  • 请求示例
curl -X POST https://api.xxx.com/api/video/fetch?access_key=xxx&timestamp=xxx&sign=xxx
-d '{"input": "http://xxx.xxxx.com/sample.mp4"}'
  • 返回示例
{
  "code": 200,
  "msg": "success",
  "logid": "7a1e2b09-ee41-44a1-a21c-80dfbd500e9b",
  "data": {
    "status": "waiting",
    "id": "nJ5vjR7vQ5VZ"
  }
}
  • 返回字段说明
参数类型说明及样例
codeint接口状态,200 表示接口返回正常,其它值表示接口异常
msgstring接口返回消息
logidstring请求的 id
statusstring视频状态
idstring视频 ID

附录

接口签名算法

每个接口都需要对请求参数做签名得到 sign,由我方提供私钥 access_token 参与签名。 例如待签名的请求接口(body 中的参数不参与签名)是:

https://api.xxx.com/api/video/upload?access_key=xxx&timestamp=xxx

计算规则为:

  • step 1: 请求参数按照参数名字母升序排列(该例子中有 2 个参数,分别是 access_key 和 timestamp)
  • step 2: 请求参数根据&拼接字符串 string(该例子拼接后得到 access_key=xxx&timestamp=xxx)
  • step 3: 将 step2 的结果和 access_token 拼接(该例子拼接成 access_key=xxx&timestamp=xxx&access_token=xxx)
  • step 4: 对 step3 得到的字符串进行 MD5(32 位小写)得到 sign

添加 sign 后,最终请求的接口为:

https://api.xxx.com/api/video/upload?access_key=xxx&timestamp=xxx&sign=xxx

下面是一个使用 python 代码做接口签名的例子

#参数para以字典形式传入,如{"access_key": "xxx", "timestamp": "xxx"}
#参数sk为用户的私钥
def sign_para(para, sk):
    d = collections.OrderedDict(sorted(para.items()))
    s = '&'.join(['{}={}'.format(k, v) for k, v in d.items()]) + '&access_token={}'.format(sk)
    return hashlib.md5(s.encode('utf-8')).hexdigest()

文件上传方法

通过“获取上传地址”接口拿到上传地址后,客户需要在 timeout 时间内,将视频文件上传到该地址,下面是一个上传的例子:

#使用curl上传
curl -X PUT --data-binary @/tmp/12.mp4 -H 'content-type:video/mp4' "http://xxx.xxxx.com/8a0b88d0-e3fe-589e-b611-e03ce99c9e3f%2FMTI%3D.mp4%0A?Expires=1611823653&OSSAccessKeyId=V5PSR7b2JqZW&Signature=eosEagTbpTYNejYolpGbyotdsPE%3D&callback=eyJjYWxsYmFja0JvZHkiOiJvYmplY3Rfa2V5PSR7b2JqZWN0fVx1MDAyNnNpemU9JHtzaXplfVx1MDAyNmNvbnRlbnRfdHlwZT0ke21pbWVUeXBlfVx1MDAyNmhlaWdodD0ke2ltYWdlSW5mby5oZWlnaHR9XHUwMDI2d2lkdGg9JHtpbWFnZUluZm8ud2lkdGh9XHUwMDI2ZXRhZz0ke2V0YWd9XHUwMDI2dXBsb2FkZXJfaWQ9MTIzM1x1MDAyNmFwcF9pZD0wXHUwMDI2dHlwZT0wXHUwMDI2ZXh0ZW5kPVx1MDAyNmJ1Y2tldD15aWxhbi1qYXJ2aXMiLCJjYWxsYmFja0JvZHlUeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwiY2FsbGJhY2tVcmwiOiJodHRwOi8vNDcuOTQuMjMuMTg5Ojg1MTAvb3NzL2FsaS9jYWxsYmFjayJ9"
#使用Postman上传:
1. 请求方法选择PUT
2. Headers设置content-type为video/mp4
3. Body类型选择binary,然后选择文件
4. 点击Send上传
5. 上传正确应返回:
{
    "msg": "success",
    "data": {
        "file_id": 1234,
        "url": "xxx"
    }
}

上传模式说明

  • 直接上传:适用于存储在本地的视频文件,通过此方式将文件直接上传到视频托管服务

图片

  • Fetch 上传:适用于存储在云端的视频文件,客户提供文件的下载地地址,通过接口传入该下载地址,视频托管服务从该地址下载视频

图片