涂图

  • 首页
  • 解决方案
    • 拍照和图片编辑
    • 视频录制和后期编辑
    • 模板视频
    • 人像美颜
    • 人脸特效
    • 滤镜特效
    • 贴纸特效
  • API服务
    • 人像服务
    • 视频融合
    • 人脸云
    • 在线滤镜
  • 客户案例
  • 下载
  • 文档
  • 关于我们
  • 控制台
  • 一、新手上路
  • 控制台入门
    • 控制台使用说明
  • 二、SDK 文档
  • 图像 SDK
    • 产品说明
      • 使用指南
      • 性能测试报告
    • iOS 文档
      • 快速开始
      • 安装与更新
      • 集成向导
      • 相机组件的使用
      • 相册组件的使用
      • 照片美化组件的使用
      • 主题包基础使用
      • 自定义滤镜
      • 自定义贴纸
      • 自定义界面
      • 自定义 ProgressHUD 提示框
      • API 文档
      • 致谢
    • Android 文档
      • 快速开始
      • 安装与更新
      • 集成向导
      • 相机组件的使用
      • 照片美化组件的使用
      • 头像设置组件的使用
      • 多选相册组件的使用
      • 主题包基础使用
      • 自定义贴纸
      • 自定义滤镜
      • 自定义界面
      • 自定义进度信息提示框
      • 自定义 Activity 打开相机
      • API 文档
      • 致谢
    • iOS 技术问题
      • 「Incorrenct app key」
      • 更换滤镜效果图
      • 导航栏与状态栏
      • 组件中使用部分滤镜
      • Cocoapods 相关问题
      • 图片尺寸变化
      • Photos.framework 相关错误
      • 多包名发布
      • GPUImage 的相关错误
      • TuSDKTSALAsset 转换系统对象
      • 滤镜无法显示名称
      • 获取相机的点击事件
    • Android 技术问题
      • Incorrenct app key
      • 重复引用包
      • Recyclerview 库缺失
      • 方法数超出 65536 限制
      • 传入图片路径
      • 指定裁剪比例
      • 指定相册每行列数
      • 禁用相册自动跳转
      • 如何使用部分滤镜?
      • 代码混淆
      • TuSDK 使用的依赖库
      • 多渠道打包
      • 设置相机输出尺寸
      • 相机横屏设置
      • 自定义照片美化组件各功能模块效果默认参数值
    • 版本更新日志
      • iOS 版本更新日志
      • Android 更新日志
  • 短视频 SDK
    • 产品说明
      • 使用指南
      • 性能测试报告
    • iOS 文档
      • 快速开始
      • 集成向导
      • 录制相机的使用
      • 视频编辑器的使用
      • 功能 API 的使用
      • API 文档
    • Android 文档
      • 快速开始
      • 集成向导
      • 录制相机的使用
      • 视频编辑器的使用
      • 功能 API 的使用
      • API 文档
    • iOS 技术问题
      • 常见问题
    • Android 技术问题
      • 常见问题
    • 版本更新日志
      • iOS 版本更新日志
      • Android 版本更新日志
  • 视频融合 SDK
    • 产品说明
      • 使用指南
      • 模板设计规范
      • 支持的 AE 功能
      • 模板管理
    • iOS 文档
      • 快速开始
      • 安装与更新
      • 集成向导
      • 模版加载器的使用
      • 模板播放器的使用
      • 模板导出器的使用
      • API文档
    • Android 文档
      • 快速开始
      • 安装与更新
      • EVA播放器的使用
      • 模板资源管理器的使用
      • 模板保存器的使用
      • API 文档
    • 模板导出
      • 模板导出插件安装
      • 导出插件使用
      • 模板打包规范
    • 版本更新日志
      • iOS 版本更新日志
      • Android 版本更新日志
      • 导出插件版本更新日志
  • 直播特效 SDK
    • 产品说明
      • 产品介绍
    • iOS 文档
      • TuSDK直播特效接入说明-iOS
    • Android 文档
      • TuSDK直播特效接入说明-Android
  • 三、云服务文档
  • 人像服务
    • 使用文档
      • 快速入门
      • 核心功能
    • API概述
      • API 概述
      • API 文档
    • 常见问题
      • 常见问题
  • 视频融合(云渲染)
    • 使用文档
      • 快速入门
      • 模板设计规范
      • 支持的 AE 功能
      • 模板管理
    • API概述
      • API概述
      • API 文档
    • 模板导出
      • 模板导出插件安装
      • 导出插件使用
      • 模板打包规范
    • 常见问题
    • 版本更新日志
      • 导出插件版本更新日志
  • 人脸云
    • 使用文档
      • 快速入门
      • 核心功能
    • API 概述
      • API 概述
    • 常见问题
      • 常见问题
  • 在线滤镜
    • 使用文档
      • 快速入门
      • 核心功能
      • FILTER API
      • API 错误码表
    • API概述
      • API 概述
    • 常见问题
      • 常见问题
  • 人脸核查服务
    • 使用说明
      • 产品介绍
      • 服务开通
      • 用户数据管理
    • 费用说明
      • 费用说明
    • 客户端说明
      • 操作须知
      • 客户端配置
      • 基本功能操作
      • 统计数据操作
    • 常见问题
      • 常见问题
  • 四、综合
  • 云服务账单说明
  • 应用包名与密钥
  • 遇到问题,怎么办?
  • 如何使用贴纸管理、滤镜管理?
  • 基础服务开发者升级流程
  • 五、常见问题
  • 常见问题

TUTUCLOUD eva 视频融合 API 文档

接口鉴权

参数 sign 生成步骤:

  1. 抽取所有请求参数 (类型为 file 的参数不参与签名)。
  2. 对 参数名 以字典升序 (a-z) 进行排序。
     sortedParams = {
         "key1": "value1",
         "key2": "value2"
     }
  3. 以 参数名参数值 的形式拼接排序后的参数。
     stringParams = "key1value1key2value2"
  4. 把从控制台创建应用后获取的私钥 api_secret 作为后缀拼接到上一步生成的字符串后面, 得到 待签名字符串。
     stringParams = "key1value1key2value2api_secret"
  5. 最后再对 待签名字符串 用 MD5 摘要算法,得到签名结果 sign (32位小写)。
     sign = md5("key1value1key2value2api_secret")
  6. 校验工具

签名示例:

私钥 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

HTTP header

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 获取

assets 参数

该参数类型为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"
    },
    ...
]

args 参数

参数名 值范围 默认值 说明
audio_mix_weight [0.0, 1.0] 1.0 默认混音系数
prefer_bitrate 码率

示例:

args = {
    "audio_mix_weight": 0.8,
    "prefer_bitrate": 10000
}

cURL 请求示例

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 请求示例

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

HTTP header

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 请求示例 (img)

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 请求示例 (url)

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 服务不可用

  • 接口鉴权
  • 视频渲染请求
  • 视频渲染状态查询
  • 上传替换素材
  • 获取时间戳
  • 返回码
  • 在线技术支持
  • 专业售前售后团队
  • 版本定期更新
  • 全方位解决方案

商务合作

  • 177-6716-7529
  • 2969573855
  • sales@tusdk.com
  • 浙江省 杭州市 西湖区 西斗门9号 福地创业园1号楼3楼301室

关注我们

qrcode

©2019-2020 TUTUCLOUD. All Rights Reserved. 杭州微禾迅科技有限公司 | 浙ICP备14040447号-1 | 浙公网安备33010602001649号

  • 177-6716-7529
  • sales@tusdk.com
  • 2969573855