Skip to content
On this page

视频上传接口

1.接口功能

该功能通过调用千面动捕服务的上传接口,允许用户上传包含视频文件和制作信息的数据。用户需要配置相关参数,包括域名、用户凭证、视频文件路径、动捕类型和骨架类型等。上传成功后,用户可以通过检查返回的状态码和消息来验证操作的结果。此外,用户还可以提供回调地址,以便在视频制作完成时接收通知

2.请求方法

Post

3.请求路径

https://www.qmai.vip/business/upload

4.请求参数

  • companyKey:必填,企业用户的上传凭证(可在用户详情页查看)。

  • bonetype:必填,骨架类型。目前仅支持一次API选择一个格式。

          1:boyFBX 格式。
          2:BIP格式:不支持capturetype值含面捕"3"
          3:Mixamo格式:不支持 capturetype 值含面捕"3"。
          4:Unreal格式:不支持 capturetype 值含面捕"3"。
          5:VMD格式
          7:girlFBX格式
          8:anim格式
          9:OnlyFace格式:OnlyFace格式时,capturetype值只能为:"1,3"。
    
  • capturetype:必填,动捕类型。capturetype为以下数值的组合,用逗号分割,如“0,2,3”。全身/半身/自动判断必须有且仅有一个,面捕和手捕可以任意选择。

          0:全身(默认)
          1:半身
          2:手捕
          3:面捕
          5:自动判断(全身或半身)
    
  • videoPath:必填,上传的视频路径。视频的时长和文件大小限制参考链接: https://www.qmai.vip/consult?from=2

  • isStaticCamera:必填,上传视频的摄像机状态。

          1:通用摄像机
    
  • mulPersonInfo: 多人视频目标框信息。单人视频不用传入参数,多人视频需要传入参数给出目标人物框信息,格式为:"frame,x,y,w,h"(即将开放)

  • rollback_url:可选,回调地址。需调用者启动服务进行消息接收,请求方法为POST,参数形式为"http://127.0.0.1:12345"

5.响应信息

服务端将以 JSON 格式返回响应数据。成功的响应会包含状态码、消息和数据;错误的响应会包含状态码和错误信息。

  • Message:千面动捕参数校验消息和成功消息。

  • videoId:视频文件上传成功后会返回视频记录的ID号。

  • status:状态码

      200:成功
      600:系统异常
      500:参数异常
    
  • videoStatus:上传成功为待制作,否则为空。

6.python示例代码

# encoding=utf-8
import os
import requests

# Configuration
domain_url = "https://www.qmai.vip"
key = "f351974e-9d4e-46f1-b221-d0bf7c6d25df"
video_path = r"data\xiaoyu.mp4"
capture_type = "0"
bone_type = "1"

# Ensure URL ends with "/"
if not domain_url.endswith("/"):
    domain_url += '/'

# Check if video file exists
assert os.path.exists(video_path)

# Prepare data and files
files = {'videoFile': open(video_path, 'rb')}
data = {"capturetype": capture_type, "bonetype": bone_type, "companyKey": key}

# API endpoint URL
url = f"{domain_url}business/upload/"
print(url)
print(data)

# Make API request
response = requests.post(url, data=data, files=files)

# Check response status
if response.status_code == 200:
    print(response.text)
else:
    print(f"{response.status_code}, 访问链接失败")

7.回调地址响应信息

  • message:处理信息。

  • videoId:上传的视频ID。

  • status:接口调用状态

      200:成功
      600:系统异常
      500:参数异常
    
  • videoStatus:视频制作状态(待制作、制作中、制作完成、制作失败)。

8.python示例代码(含回调)

# encoding=utf-8
import os
import requests

# Configuration
domain_url = "https://www.qmai.vip"
key = "f351974e-9d4e-46f1-b221-d0bf7c6d25df"
video_path = r"data\xiaoyu.mp4"
capture_type = "0"
bone_type = "1"
rollback_url = "http://192.168.141.68:80"

# Ensure URL ends with "/"
if not domain_url.endswith("/"):
    domain_url += '/'

# Check if video file exists
assert os.path.exists(video_path)

# Prepare data and files
files = {'videoFile': open(video_path, 'rb')}
data = {
    "capturetype": capture_type,
    "bonetype": bone_type,
    "companyKey": key,
    "rollbackUrl": rollback_url
}

# API endpoint URL
url = f"{domain_url}business/upload/"
print(url)
print(data)

# Make API request
response = requests.post(url, data=data, files=files)

# Check response status
if response.status_code == 200:
    print(response.text)
else:
    print("访问链接失败")

9.启动回调服务代码示例

import datetime

import sanic
from sanic import Sanic
from sanic.response import json

app = Sanic("test")


@app.route('/', methods=['POST'])
async def test(request: sanic.Request):
    now_time = datetime.datetime.now()
    print(f"Hello, {now_time}")
    print(request.json)
    return json({'hello': 'world'})


if __name__ == '__main__':
    app.run(host="127.0.0.1", port=12345)

    # test
    # curl -X POST -H "Content-Type: application/json" -d '{"x":"1"}' -v 192.168.141.68:80