视频上传接口
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