参数 sign
生成步骤:
file
的参数不参与签名)。参数名
以字典升序 (a-z) 进行排序。 sortedParams = {
"key1": "value1",
"key2": "value2"
}
参数名参数值
的形式拼接排序后的参数。 stringParams = "key1value1key2value2"
待签名字符串
。 stringParams = "key1value1key2value2api_secret"
待签名字符串
用 MD5 摘要算法,得到签名结果 sign
(32位小写)。 sign = md5("key1value1key2value2api_secret")
签名示例:
私钥 api_secret = "my_api_secret"
请求参数 = {
"url": "http://my.test/my.jpg",
"api_key": "my_api_key",
"timestamp": 123456
}
排序后参数 = {
"api_key": "my_api_key",
"timestamp": 123456,
"url": "http://my.test/my.jpg"
}
待签名字符串 = "api_keymy_api_keytimestamp123456urlhttp://my.test/my.jpgmy_api_secret"
sign = "be83843c50dbfe8211256694c1cc5c58"
POST https://api.eva.tutucloud.com/v1/render
Content-Type: multipart/form-data
参数名 | 类型 | 是否必填 | 说明 |
---|---|---|---|
api_key | string | 是 | 应用 api_key |
sign | string | 是 | 参数签名 |
tpl_id | int | 是 | 模板ID |
tpl_version | string | 是 | 模板版本 |
assets | json (array) | 是 | 替换素材数组, 详见 assets 参数 表 |
args | json | 否 | 渲染可选参数, 详见 args 参数 表 |
notify_url | string | 否 | 渲染结果异步通知地址. |
timestamp | int | 否 | unix时间戳, 从接口 /timestamp 获取 |
该参数类型为json数组, 每一个数组项为替换素材的描述。 可替换素材类型为 ( 视频, 图片, 音频, 文本 ), 对应的 id 为 (video_x, image_x, audio_x, text_x)
参数名 | 类型 | 是否必填 | 说明 |
---|---|---|---|
id | string | 是 | 替换资源 id, 见 模板 可替换素材列表 |
value | string | 是 | 类型为文本时, 值为替换的文本内容, 其它类型时, 值为替换文件的 url 链接 |
audio_mix_weight | float | 否 | 混音系数, 范围 [0, 1], 仅 (video, image, audio) 可用 |
crop | json | 否 | 画面的 crop 区域, 参数 {x,y,w,h}, 范围 [0, 1], 仅 (video, image) 可用 |
示例:
assets = [
{
"id": "video_1",
"value": "http://test.my/video.mp4",
"audio_mix_weight": 0.5,
"crop": {
"x": 0.3,
"y": 0.2,
"w": 0.4,
"h": 0.4
}
},
{
"id": "image_1",
"value": "http://test.my/image.jpg"
},
{
"id": "text_2",
"value": "tutucloud eva"
},
...
]
参数名 | 值范围 | 默认值 | 说明 |
---|---|---|---|
audio_mix_weight | [0.0, 1.0] | 1.0 | 默认混音系数 |
prefer_bitrate | 码率 |
示例:
args = {
"audio_mix_weight": 0.8,
"prefer_bitrate": 10000
}
curl -X POST \
https://api.eva.tutucloud.com/v1/render \
-H 'content-type: multipart/form-data' \
-F api_key=39802830831bed188884e193d8465226 \
-F sign=04b29480233f4def5c875875b6bdc3b1 \
-F tpl_id=123 \
-F tpl_version=g234fdsafda12321 \
-F 'assets=[{"id":"image_1", "value":"http://my.test/my.jpg"},{"id":"text_1","value":"my_replace_text"}]' \
-F 'args={"audio_mix_weight": 0.8}'
{
"message": "Success",
"code": 200,
"data": {
"task_id": "GfNE_AXLj0CHizT_9UDVp"
}
}
如果有提供 notify_url
参数, 服务会在渲染结束后对渲染结果以 POST
方式, 通知内容格式为 content-type:application/json
的形式进行异步通知请求, 如果收到请求返回的 HTTP 响应状态码为 200 则视为通知成功. 如通知失败, 会在6分钟内额外进行7次通知 (分别在 10s 后, 20s 后, 40s 后, 70s 后, 120s 后, 200s 后, 330s 后). 通知内容的 json
示例如下.
// 异步通知内容示例
{
"message": "Success",
"code": 200, // 200 为渲染成功, 其它详见返回码
"task_id": "GfNE_AXLj0CHizT_9UDVp",
"sign": "14b29480233f4d2f5c875875b6bdc3b3", // 收到通知请求后需对来源进行验证, 验证方式为 `md5("<task_id>+<api_secret>") == "<sign>"`
"data": {
"assets": [
{
"id": "image_1",
"value": "http://file.eva.tutucloud.com/my/img/abc.jpg"
},
{
"id": "text_1",
"value": "my_replace_text"
}
],
"render_time": 48,
"video": "http://file.eva.tutucloud.com/my.mp4"
}
}
GET https://api.eva.tutucloud.com/v1/render/task
参数名 | 类型 | 是否必填 | 说明 |
---|---|---|---|
api_key | string | 是 | 应用 api_key |
sign | string | 是 | 参数签名 |
task_id | string | 是 | task ID (渲染请求返回) |
timestamp | int | 否 | unix时间戳, 从接口 /timestamp 获取 |
curl -X GET \
'https://api.eva.tutucloud.com/v1/render/task?task_id=GfNE_AXLj0CHizT_9UDVp&api_key=39802830831bed188884e193d8465226&sign=04b29480233f4def5c875875b6bdc3b1'
{
"message": "Success",
"code": 200, // 200 为渲染成功, 渲染尚未完成时code为 4300, 其它详见返回码
"data": {
"assets": [
{
"name": "image_1",
"value": "http://file.eva.tutucloud.com/my/img/abc.jpg"
},
{
"name": "text_1",
"value": "my_replace_text"
}
],
"render_time": 48,
"video": "http://file.eva.tutucloud.com/my.mp4"
}
}
POST https://api.eva.tutucloud.com/v1/asset
Content-Type: multipart/form-data
参数名 | 类型 | 是否必填 | 说明 |
---|---|---|---|
api_key | string | 是 | 应用 api_key |
sign | string | 是 | 参数签名 |
file | file | file , file_base64 , file_url 3选1 |
文件 列表 |
file_base64 | json | file , file_base64 , file_url 3选1 |
文件 base64 编码 数组 |
file_url | json | file , file_base64 , file_url 3选1 |
文件URL 数组 |
timestamp | int | 否 | unix时间戳, 从接口 /timestamp 获取 |
curl -X POST \
https://api.eva.tutucloud.com/v1/eva/asset \
-H 'content-type: multipart/form-data' \
-F api_key=39802830831bed188884e193d8465226 \
-F sign=04b29480233f4def5c875875b6bdc3b1 \
-F file=@my.jpg \
-F file=@my.mp4
curl -X POST \
https://api.eva.tutucloud.com/v1/eva/asset \
-H 'content-type: multipart/form-data' \
-F api_key=39802830831bed188884e193d8465226 \
-F sign=04b29480233f4def5c875875b6bdc3b1 \
-F 'url=["http://my.test/my.jpg","http://my.test/my.mp4"]'
{
"message": "Success",
"code": 200,
"data": {
"urls": [
"http://file.eva.tutucloud.com/my.jpg",
"http://file.eva.tutucloud.com/my.mp4"
]
}
}
GET https://api.eva.tutucloud.com/timestamp
如请求其它接口时传了timestamp
参数, 服务器则会和当前时间进行比较, 如晚于服务器当前时间超过60秒, 则会拒绝服务。
无
{
"message": "Success",
"code": 200,
"data": {
"timestamp": 1553249584
}
}
返回码 | 说明 |
---|---|
200 | 请求成功 |
4000 | 无效的请求 |
4001 | 无效的 api_key 参数 |
4002 | 缺少必填参数 |
4003 | 签名验证失败 |
4004 | 获取上传文件失败 |
4007 | 文件格式不支持 |
4008 | 文件大小超过最大限制 |
4009 | 从 url 下载文件失败 |
4010 | 服务未开通 |
4011 | 余额不足 |
4014 | url 输入文件未找到或已过期 |
4100 | 参数 args 格式错误, 应为 json |
4300 | task 还未处理完成 |
4301 | 参数 assets 格式错误, 应为 json |
4302 | 参数 assets 不能为空 |
4303 | assets 替换素材数量超过最大限制 |
4304 | asset 替换素材ID错误 |
4305 | eva 模板未找到 |
4306 | eva 模板文件下载失败或模板版本已失效 |
4307 | task_id 有误, task未找到 |
4308 | task 处理超时 |
4309 | notify_url 不是有效的 url |
4341 | 模板文件缺少 图片文件 |
4342 | 模板文件缺少 字体文件 |
4343 | 模板文件缺少 音频文件 |
4344 | 模板文件缺少 视频文件 |
500 | 内部服务错误 |
5001 | 服务处理失败 |
5003 | 服务不可用 |
©2019-2020 TUTUCLOUD. All Rights Reserved. 杭州微禾迅科技有限公司 | 浙ICP备14040447号-1 | 浙公网安备33010602001649号