曜幕(MLS)openApi 接口文档
Base URL:
- 生产环境:
http://{PROD_DOMAIN}
所有 openApi 接口路径统一为:
POST /mls/mlsOpenApi/{接口名}{接口名} 即下文各章节标题中的接口名(如 uploadMlsPart、addMlsTask)。
0. 概览
0.1 鉴权方式
openApi 全部接口使用 AK 签名鉴权,通过请求头传递 X-AccessId、X-TimeStamp、X-SignatureNonce、X-Signature(计算规则见 1.2)。
- 操作人身份由 AK 决定:调用方无需、也无法在入参中指定用户身份(
uin、userId等由服务端依据 AK 解析)。 - 不需要
token,接口也不接受登录态。 - 以下接口清单为可调用的完整集合。调用清单外的接口名将返回
flag=1007。
本文档只描述 openApi 开放的接口。控制台接口(登录态)使用不同的入口与鉴权方式,不在本文档范围内。
0.2 接口清单
| 分组 | 接口 | 路径 |
|---|---|---|
| 分片上传 | 上传文件分片 | POST /mls/mlsOpenApi/uploadMlsPart |
| 完成分片上传 | POST /mls/mlsOpenApi/completeMlsUpload |
|
| 获取素材上传签名参数 | POST /mls/mlsOpenApi/getMaterialAccess |
|
| 基础配置 | 获取支持语言列表 | POST /mls/mlsOpenApi/getSupportLanguageList |
| 获取任务类型列表 | POST /mls/mlsOpenApi/getMlsModeTypeList |
|
| 获取阶段计费价目 | POST /mls/mlsOpenApi/getMlsStageList |
|
| 获取音色列表 | POST /mls/mlsOpenApi/getMlsTimbreList |
|
| 获取翻译场景列表 | POST /mls/mlsOpenApi/getMlsTranslationSceneList |
|
| 任务 | 获取任务列表 | POST /mls/mlsOpenApi/getUserMlsList |
| 获取任务详情 | POST /mls/mlsOpenApi/getMlsDetail |
|
| 创建任务 | POST /mls/mlsOpenApi/addMlsTask |
|
| 编辑任务 | POST /mls/mlsOpenApi/updateMlsTask |
|
| 删除任务 | POST /mls/mlsOpenApi/deleteMlsTask |
|
| 失败重试 | POST /mls/mlsOpenApi/retryMlsTask |
|
| 任务素材 | 新增/编辑任务素材 | POST /mls/mlsOpenApi/saveMlsTaskResource |
| 删除任务素材 | POST /mls/mlsOpenApi/deleteMlsTaskResource |
|
| 从历史版本创建副本 | POST /mls/mlsOpenApi/copyMlsTaskResourceVersion |
|
| 分组资源:分组列表 | POST /mls/mlsOpenApi/getMlsResourceGroups |
|
| 分组资源:分组文件列表 | POST /mls/mlsOpenApi/getMlsResourceGroupFiles |
|
| 剧集 | 新增剧集 | POST /mls/mlsOpenApi/addMlsDrama |
| 编辑剧集 | POST /mls/mlsOpenApi/updateMlsDrama |
|
| 剧集列表 | POST /mls/mlsOpenApi/getMlsDramaList |
|
| 剧集详情 | POST /mls/mlsOpenApi/getMlsDramaDetail |
|
| 删除剧集 | POST /mls/mlsOpenApi/deleteMlsDrama |
|
| 向剧集添加视频 | POST /mls/mlsOpenApi/addMlsDramaVideo |
|
| 集列表 | POST /mls/mlsOpenApi/getMlsEpisodeList |
|
| 集详情 | POST /mls/mlsOpenApi/getMlsEpisodeDetail |
|
| 更新集名称 | POST /mls/mlsOpenApi/updateMlsEpisode |
|
| 删除集 | POST /mls/mlsOpenApi/deleteMlsDramaVideo |
|
| 批量提交剧集任务 | POST /mls/mlsOpenApi/submitMlsDramaTasks |
|
| 视频预处理 | 预处理失败重试 | POST /mls/mlsOpenApi/retryMlsVideoPreprocess |
| 额度(积分) | 获取当前额度 | POST /mls/mlsOpenApi/getMlsAmount |
| 额度使用记录 | POST /mls/mlsOpenApi/getMlsAmountRunList |
|
| 判断额度是否充足 | POST /mls/mlsOpenApi/checkMlsAmount |
|
| 反馈工单 | 反馈分类树 | POST /mls/mlsOpenApi/getMlsFeedbackCategoryTree |
| 提交反馈 | POST /mls/mlsOpenApi/submitMlsFeedback |
|
| 关单前追评 | POST /mls/mlsOpenApi/appendMlsFeedbackMessage |
|
| 我的反馈列表 | POST /mls/mlsOpenApi/getMyMlsFeedbackList |
|
| 我的反馈详情 | POST /mls/mlsOpenApi/getMyMlsFeedbackDetail |
|
| 关闭工单 | POST /mls/mlsOpenApi/closeMyMlsFeedback |
不在本清单中的接口无法通过 openApi 调用,详见 附录 A。
1. 鉴权与返回约定(请先阅读)
1.1 Header 鉴权参数
| Header | 必填 | 说明 |
|---|---|---|
X-AccessId |
是 | 用户 AK 的 accessId |
X-TimeStamp |
是 | 当前时间戳(秒) |
X-SignatureNonce |
是 | 签名随机串(建议每次请求使用新的随机值) |
X-Signature |
是 | 签名值,计算规则见下 |
缺失任一 Header 返回:
{"flag":1004,"flagString":"X-AccessId参数不能为空"}
AK 不存在、已停用或签名不匹配,返回:
{"flag":101,"flagString":"验证失败"}
1.2 X-SIGNATURE 计算规则
将以下字段按顺序拼接,中间以换行符 \n 连接:
accessId(即X-AccessId)accessKey(用户 AK 的 accessSecret)signatureNonce(即X-SignatureNonce)timeStamp(即X-TimeStamp)body(HTTP 请求原始 Body 字符串;无 Body 时为空字符串)
stringToSign = accessId + "\n" + accessKey + "\n" + signatureNonce + "\n" + timeStamp + "\n" + body
X-SIGNATURE = md5(stringToSign)
注意事项
body是未经解析的原始 Body 文本。签名必须在序列化 JSON 之后计算,任何空格、换行、字段顺序差异都会导致签名不一致。timeStamp仅参与签名,服务端不做时效校验,请调用方自行控制重放风险(配合signatureNonce唯一化)。- 建议使用
POST+application/json;签名按 POST 原始 Body 计算。
签名参考实现
$body = json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$nonce = (string)mt_rand(10000000, 99999999);
$ts = time();
$sign = md5($accessId . "\n" . $accessKey . "\n" . $nonce . "\n" . $ts . "\n" . $body);
// Header
// Content-Type: application/json
// X-AccessId: $accessId
// X-TimeStamp: $ts
// X-SignatureNonce: $nonce
// X-Signature: $sign
String body = objectMapper.writeValueAsString(payload);
String nonce = String.valueOf(ThreadLocalRandom.current().nextLong(10000000L, 100000000L));
String ts = String.valueOf(Instant.now().getEpochSecond());
String raw = accessId + "\n" + accessKey + "\n" + nonce + "\n" + ts + "\n" + body;
String sign = DigestUtils.md5Hex(raw.getBytes(StandardCharsets.UTF_8));
1.3 返回码约定
flag = 100:请求成功flag != 100:请求失败,具体原因见flagString
常用 flag:
| flag | 含义 |
|---|---|
| 100 | 成功 |
| 101 | 鉴权失败(AK 无效或签名错误) |
| 110 | 业务参数错误(flagString 为具体原因) |
| 1001 | 请求地址无效(路径缺 {接口名}) |
| 1004 | 鉴权 Header 缺失 |
| 1007 | 请求接口不存在(不在开放范围,见附录 A) |
分页字段的位置分两种,请以各接口示例为准:
total与data同级:getUserMlsList、getMlsAmountRunList;count位于data内:getMlsTimbreList、getMlsResourceGroups、getMlsResourceGroupFiles、getMlsDramaList、getMlsEpisodeList、getMyMlsFeedbackList。
1.4 请求格式约定
- 所有接口统一使用
application/json作为请求体格式。 - 请在请求 Header 中设置
Content-Type: application/json。 - 接口名大小写敏感,须与本文档完全一致。
1.5 用户身份如何确定
调用方无需也无法在入参中指定用户身份,服务端依据 X-AccessId 对应的账号解析出请求归属的「当前用户」。
请在请求体中不要传
uin、parentUin、userId等身份字段;即使传入也会被服务端忽略并按 AK 绑定账号处理。
1.6 前置条件:手机号绑定
以下接口要求 AK 绑定账号满足「渠道用户免绑,非渠道用户须绑定手机号」,否则返回 flag=110 且 flagString 为提示信息:
addMlsTask、addMlsDrama、addMlsDramaVideo、submitMlsDramaTasks、uploadMlsPart、completeMlsUpload、saveMlsTaskResource、deleteMlsTaskResource、copyMlsTaskResourceVersion
2. 分片上传
2.1 上传接口测试样例视频
为便于联调「分片上传 → 完成上传」流程,可使用下方公开测试视频作为本地源文件:下载后按接口要求将各分片做 Base64 编码,再依次调用 上传文件分片、完成分片上传 两个接口即可完整走通。
| 项目 | 说明 |
|---|---|
| 建议文件名 | test.mp4(与本地保存名、fileName 参数保持一致即可) |
| 下载地址(HTTPS) | https://static-pro.guangdianyun.tv/common/file/test.mp4 |
该文件仅用于接口功能验证与联调,请勿作为生产业务素材依赖;实际分片时请遵守单分片小于 10M 等下文参数约束。
2.2 POST /mls/mlsOpenApi/uploadMlsPart
上传文件分片。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| fileName | string | 是 | 完整文件名(含后缀)。与本地保存名、completeMlsUpload 保持一致 |
| part | string | 是 | 分片内容,需先做一次 base64_encode;单分片小于 10M |
| partNum | int | 是 | 分片序号,取值范围 1~1000 |
分片序号从
1开始连续递增,completeMlsUpload前不可有缺号。
请求示例
{
"fileName": "test.mp4",
"part": "base64_encode('xxxxxxx')",
"partNum": 1
}
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"partSize": 2097152,
"partName": "1-test.mp4.part"
}
}
data中字段以上传服务的实际返回为准;上例为常见返回。
常见错误
| flagString | 说明 |
|---|---|
fileName参数不能为空 |
缺少文件名 |
title参数不能为空 |
— |
| 手机号相关提示 | 非渠道用户未绑定手机号 |
获取上传凭据失败 |
账号未开通素材上传权限,请联系管理员 |
2.3 POST /mls/mlsOpenApi/completeMlsUpload
完成分片上传;成功后返回可播放的视频地址与封面。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| fileName | string | 是 | 与分片上传阶段保持一致的文件名(含后缀) |
请求示例
{
"fileName": "test.mp4"
}
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"fileName": "test.mp4",
"size": 38112078,
"location": "https://vod.example.com/u/1000/mp4/0x0/9c259c15483898854dad9938736a6c78.mp4",
"thumbnail": "https://cdn.example.com/pic/g-dvr/u/1000/images/9c259c15483898854dad9938736a6c78/0/0"
}
}
| 字段 | 说明 |
|---|---|
| size | 文件字节数 |
| location | 视频地址,可直接作为 addMlsTask 的 origin_url |
| thumbnail | 封面图地址 |
2.4 POST /mls/mlsOpenApi/getMaterialAccess
获取素材直传所需的签名参数,用于客户端直传素材到对象存储。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| userId | string | 否 | 子用户标识,默认空字符串 |
| classify | string | 否 | 业务分类,默认 video |
| parentId | string | 否 | 分组 ID,默认 01 |
| toolService | string | 否 | 业务标识,非空时合并进 diyParam.toolService |
| subDiyParam | string | 否 | JSON 字符串,会与默认 diyParam 合并(同名键覆盖);非合法 JSON 返回 flag=102 |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"signatureNonce": 54321,
"accessId": "xxxxxxxx",
"expireTime": 1771214133,
"signature": "14224ad83a75b14b349300868161d726",
"filePrefix": "mls-1000",
"diyParam": "{\"platform\":\"apaas\",\"service\":\"private-upload\",\"classify\":\"video\",\"groupID\":\"01\",\"subUser\":\"\",\"subCode\":\"subId\",\"subService\":\"mls\"}"
}
}
| 字段 | 说明 |
|---|---|
| signatureNonce | 签名随机数 |
| accessId | 上传服务 accessId |
| expireTime | 签名过期时间(Unix 秒,约 24 小时后) |
| signature | 上传签名 |
| filePrefix | 文件前缀 |
| diyParam | 用户自定义参数(JSON 字符串) |
3. 基础配置(只读)
3.1 POST /mls/mlsOpenApi/getSupportLanguageList
获取当前账号可用的语言配置列表。
返回范围由账号的语种配置决定,共三种模式:
| 模式 | 说明 |
|---|---|
basic(默认) |
仅返回已开放的启用语种 |
all |
返回全部启用语种(不再限制是否开放) |
special |
返回「已开放语种」与「账号专属白名单语种」的并集 |
未配置时按 basic 处理。
请求参数
无。
早期文档提到的
enable入参已不再生效:本接口固定只返回启用中的语种。
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"list": [
{
"id": 2,
"language_name": "英文",
"language_code": "english",
"enable": 1,
"is_open": 1,
"model_name": "english",
"create_time": 1770444003,
"uptime": 1770444003
}
]
}
}
data.list[] 字段说明:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | int | 语言 ID |
| language_name | string | 语言中文名 |
| language_code | string | 语言编码,创建任务时传 languages |
| enable | int | 1 启用 / 0 停用 |
| is_open | int | 1 已开放 |
| model_name | string | 语言标识 |
| create_time / uptime | int | Unix 秒 |
列表条数按账号配置变化,请勿硬编码语言数量或 ID 范围。
3.2 POST /mls/mlsOpenApi/getMlsModeTypeList
获取可创建的任务类型(服务端有缓存,配置变更约 1 小时生效)。创建任务前先调此接口,用于渲染类型下拉、控制是否展示语种/源片选择。
请求参数
无。
出参 data[]
| 字段 | 类型 | 说明 |
|---|---|---|
| mode_type | string | 类型编码,创建任务时传 mode_type |
| mode_name | string | 展示名称 |
| mode_type_index | string | 类型索引编码,用于分类分组;多种 mode_type 可共用同一索引 |
| billing_mode | string | 固定 stage;计费以阶段价目为准,见 3.3 getMlsStageList |
| requires_language | bool | 创建时是否必须选择输出语种 |
| requires_origin | bool | 创建时是否必须传源视频(原片);false 时可仅传 resources 并由字幕等推算时长 |
| allow_coexist | bool | 同一集下是否允许与其它类型的任务并存 |
| is_internal | bool | 是否为内部类型(查询列表时可用 exclude_internal=1 过滤) |
| execution_mode | string | 执行形态:legacy 原样下发;stages 下发时转为 custom + stages |
| stages | array | 阶段模板;execution_mode=stages 时非空,项为 {stageId, policy};legacy 时为 [] |
| remark | string | 备注说明 |
返回示例
{
"flag": 100,
"flagString": "success",
"data": [
{
"mode_type": "full_pipeline",
"mode_name": "全流程",
"mode_type_index": "full_pipeline",
"billing_mode": "stage",
"requires_language": true,
"requires_origin": true,
"allow_coexist": false,
"is_internal": false,
"execution_mode": "legacy",
"stages": [],
"remark": "多语言全流程输出:前置+语种叠加"
},
{
"mode_type": "demo_stages_pipeline",
"mode_name": "示例阶段流水线",
"mode_type_index": "demo_stages",
"billing_mode": "stage",
"requires_language": true,
"requires_origin": true,
"allow_coexist": true,
"is_internal": false,
"execution_mode": "stages",
"stages": [
{"stageId": "subtitle_translate", "policy": "complete"},
{"stageId": "tts", "policy": "complete"},
{"stageId": "compose", "policy": "complete"}
],
"remark": "下发时转为 mode_type=custom + stages"
}
]
}
类型以服务端配置为准,不要在前端硬编码
mode_type与单价;阶段单价一律取 3.3 getMlsStageList。
3.3 POST /mls/mlsOpenApi/getMlsStageList
获取阶段计费价目(服务端有缓存,配置变更约 1 小时生效),供展示单价。
虚拟阶段 storage(成片存储)、source_upload(源视频上传)会出现在列表中,但不会下发给处理流程。
请求参数
无。
出参 data[]
| 字段 | 类型 | 说明 |
|---|---|---|
| stage_id | string | 阶段编码,与 stageId 对齐 |
| stage_name | string | 展示名称 |
| price_per_second | int | 单价:积分/秒 |
| bill_scope | string | once 一条视频一次;per_language 按语种;source 源视频上传;storage 成片存储 |
| sort | int | 排序,越小越前 |
| remark | string | 备注 |
返回示例
{
"flag": 100,
"flagString": "success",
"data": [
{
"stage_id": "audio_separate",
"stage_name": "音频分离",
"price_per_second": 1,
"bill_scope": "once",
"sort": 20,
"remark": "一条视频一次,多语种不重复"
}
]
}
3.4 POST /mls/mlsOpenApi/getMlsTimbreList
获取音色库,供选用配音音色。
请求参数
| 参数 | 类型 | 必选 | 说明 |
|---|---|---|---|
| enable | int | 否 | 启用状态;不传默认只查启用 |
| name | string | 否 | 名称模糊搜索 |
| page | int | 否 | 页码,与 num 同时 > 0 时才分页 |
| num | int | 否 | 每页条数 |
出参 data
| 字段 | 类型 | 说明 |
|---|---|---|
| list | array | 音色列表 |
| list[].id | int | ID |
| list[].name | string | 名称 |
| list[].fileUrl | string | 音频 URL |
| list[].fileExt | string | 扩展名 |
| list[].fileSize | int | 字节数 |
| list[].enable | int | 1 启用 / 0 停用 |
| list[].createTime | int | 上传时间 Unix 秒 |
| list[].updateTime | int | 更新时间 |
| count | int | 符合条件总数 |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"list": [
{
"id": 1,
"name": "女声-温柔",
"fileUrl": "https://xxx/timbre/1.mp3",
"fileExt": "mp3",
"fileSize": 204800,
"enable": 1,
"createTime": 1770444003,
"updateTime": 1770444003
}
],
"count": 1
}
}
3.5 POST /mls/mlsOpenApi/getMlsTranslationSceneList
获取启用的翻译场景列表(服务端有缓存,配置变更约 1 小时生效)。
用户选择场景后,将 scene_code 作为 job_param.sceneCode 传给创建任务接口;服务端会为该场景装配对应的翻译提示词。
请求参数
无。
出参 data
⚠️ 本接口
data直接是数组,不是{list: [...]}。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | int | 场景 ID |
| scene_code | string | 场景编码,传 job_param.sceneCode |
| scene_name | string | 场景名称 |
| enable | int | 1 启用 / 0 停用 |
| remark | string | 备注 |
返回示例
{
"flag": 100,
"flagString": "success",
"data": [
{
"id": 1,
"scene_code": "news",
"scene_name": "新闻",
"enable": 1,
"remark": "新闻类内容翻译"
}
]
}
缓存说明:场景列表有约 1 小时缓存,修改后最多 1 小时生效。
4. 任务(多语言输出)
任务即「一条源视频 → 一个或多个目标语种成片」,主键为 episodeId。
4.1 POST /mls/mlsOpenApi/getUserMlsList
分页查询当前账号的多语言输出任务列表(仅未删除)。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| page | int | 否 | 页码,默认 1 |
| num | int | 否 | 每页数量,默认 15,上限 100 |
| title | string | 否 | 按任务标题模糊筛选 |
| resStatus | int | 否 | 状态筛选,默认 -1 全部;0 待处理、1 处理中、2 部分完成、3 全部完成、4 全部失败 |
| episodeId | int | 否 | 按任务 ID 精确筛选 |
| drama_video_id | int | 否 | 按所属集 ID 筛选 |
| createTimeStart | int | 否 | 创建时间起(Unix 秒) |
| createTimeEnd | int | 否 | 创建时间止(Unix 秒);早于 createTimeStart 时报错 |
| mode_type | string | 否 | 按任务类型精确筛选,非法值返回 mode_type无效 |
| mode_type_index | string | 否 | 按类型索引分组筛选 |
| source_type | string | 否 | 来源筛选,默认 all;batch 剧集批量、single 单条、all 全部 |
| brief | bool | 否 | 精简模式,默认 false;为真时 results 置 '[]',param / job_param / stages 置空,且不返回 jobResource |
| with_resources | bool | 否 | 是否返回 jobResource,默认 true;brief=true 时强制为 false |
| exclude_internal | bool | 否 | 为真时排除内部类型(is_internal=1)的任务 |
请求示例
{
"page": 1,
"num": 15,
"resStatus": -1,
"title": "工程1",
"episodeId": ""
}
返回示例
{
"flag": 100,
"flagString": "success",
"data": [
{
"episodeId": 26,
"dramaId": 14,
"drama_video_id": 0,
"source_type": "single",
"uin": 1000,
"parentId": "01",
"userId": 1000,
"title": "工程1",
"duration": 32,
"origin_url": "https://vod.example.com/u/1000/mp4/0x0/mls-1000a1b2c3d4e5f6a7b8c9d0e1f2a3b4.mp4",
"origin_ready": 1,
"thumbnail": "https://cdn.example.com/pic/xxx",
"languages": "italian",
"mode_type": "full_pipeline",
"mode_type_index": "full_pipeline",
"resStatus": 0,
"results": "[{\"language\":\"italian\",\"status\":0,\"uptime\":1776133477,\"url\":\"\"}]",
"job_id": "mls-xxxxxxxx",
"param": {},
"job_param": {},
"stages": ["audio_separate", "subtitle_translate"],
"is_pay": 0,
"is_del": 0,
"create_time": 1776133477,
"uptime": 1776133477,
"complete_time": 0,
"jobResource": {}
}
],
"total": 3
}
主要出参字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| episodeId | int | 任务 ID |
| dramaId | int | 所属剧集 ID,0 表示无剧集 |
| drama_video_id | int | 所属集(视频)ID,0 表示未关联 |
| source_type | string | batch(剧集批量) / single(单条) |
| title | string | 任务标题 |
| duration | int | 时长(秒) |
| origin_url | string | 源视频地址,已转 https |
| origin_ready | int | 源片就绪:1 就绪 / 0 预处理中或失败 |
| thumbnail | string | 封面图 |
| languages | string | 目标语种,多个以逗号分隔 |
| mode_type / mode_type_index | string | 任务类型 / 类型索引 |
| resStatus | int | 0 待处理、1 处理中、2 部分完成、3 全部完成、4 全部失败 |
| results | string | JSON 字符串,数组项 {language, status, uptime, url};status 同 resStatus 语义;url 为成片地址(已转 https) |
| job_id | string | 当前任务实例 ID,重试/新增语种后会变更 |
| param | object | 任务级参数快照,见 附录 C |
| job_param | object | 结构化业务参数,见 附录 D |
| stages | array | 阶段快照 |
| is_pay | int | 是否已计费 |
| create_time / uptime / complete_time | int | Unix 秒 |
| jobResource | object | 任务素材资源(最新对象 + versions[]);brief 时为空对象 |
列表按
episodeId倒序返回。无数据时返回{"flag":100,"flagString":"success","data":[],"total":0}。
4.2 POST /mls/mlsOpenApi/getMlsDetail
获取单条任务详情。出参字段与 4.1 单条结构一致,额外返回 jobResource 明细。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| episodeId | int | 是 | 任务 ID |
| brief | bool | 否 | 同 4.1 |
| with_resources | bool | 否 | 同 4.1,默认 true |
请求示例
{
"episodeId": 26
}
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"episodeId": 26,
"title": "工程1",
"resStatus": 0,
"results": "[{\"language\":\"italian\",\"status\":0,\"uptime\":1776133477,\"url\":\"\"}]",
"jobResource": {}
}
}
常见错误
| flagString | 说明 |
|---|---|
episodeId参数不能为空 |
缺少参数 |
| 记录不存在或无权限 | 任务不存在或不属于当前账号 |
4.3 POST /mls/mlsOpenApi/addMlsTask
创建多语言任务。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| title | string | 是 | 任务标题。传 drama_video_id 时可省略,服务端取该集标题 |
| origin_url | string | 条件 | 源视频地址;mode_type 的 requires_origin=true 时必填(见 3.2) |
| languages | string | 条件 | 目标语种编码,多个以逗号分隔(如 english,italian);requires_language=true 时必填 |
| mode_type | string | 否 | 任务类型,默认 full_pipeline;非法值返回 mode_type无效 |
| duration | int | 条件 | 时长(秒)。无源片类型(requires_origin=false)时,若无法从 resources 解析出时长,须显式传 duration |
| resources | array | 否 | 上传素材数组,项结构见下表 |
| param | object | 否 | 任务级参数,见 附录 C |
| job_param | object | 否 | 结构化业务参数,见 附录 D |
| stages | array | 否 | 阶段快照;传了则以下发值写入(execution_mode=stages 且不传时使用套餐模板) |
| list_type | string | 否 | 列表类型,默认内置值 |
| dramaId | int | 否 | 所属剧集 ID |
| drama_video_id | int | 否 | 所属集 ID;传了则校验归属并自动继承集标题/剧集 ID |
resources[] 项:
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| language | string | 是 | 语种,长度 ≤ 50 |
| fileType | string | 是 | 资源类型,长度 ≤ 100(如 subtitle、audio、video) |
| fileUrl | string | 是 | 资源地址,长度 ≤ 255 |
resources中language+fileType不可重复;resources也可传 JSON 字符串。
请求示例
{
"title": "工程1",
"origin_url": "https://vod.example.com/u/1000/mp4/0x0/mls-1000a1b2c3d4e5f6a7b8c9d0e1f2a3b4.mp4",
"languages": "italian",
"mode_type": "full_pipeline"
}
无源片(如仅字幕翻译)示例:
{
"title": "字幕任务",
"mode_type": "subtitle_only",
"languages": "english",
"resources": [
{"language": "original", "fileType": "subtitle", "fileUrl": "https://xxx/1.srt"}
]
}
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"episodeId": 30,
"job_id": "mls-xxxxxxxx",
"mode_type": "full_pipeline",
"mode_type_index": "full_pipeline",
"dramaId": 0,
"drama_video_id": 0
}
}
| 字段 | 说明 |
|---|---|
| episodeId | 新建任务 ID |
| job_id | 任务实例 ID,可用于查询处理进度 |
| mode_type / mode_type_index | 实际写入的任务类型 |
| dramaId / drama_video_id | 实际关联的剧集 / 集,未关联为 0 |
| duration | 仅当由 resources 推算时长时返回 |
常见错误
| flagString | 说明 |
|---|---|
title参数不能为空 |
缺少标题 |
mode_type无效 |
类型不存在 |
无源片时请上传可解析时长的资源(如 srt),或传入 duration |
无源片类型未提供时长来源 |
额度不足,不允许提交 |
可用积分不足,见 8.3 checkMlsAmount |
| 手机号相关提示 | 非渠道用户未绑定手机号 |
集(视频)不存在或无权限 |
drama_video_id 归属校验失败 |
4.4 POST /mls/mlsOpenApi/updateMlsTask
编辑任务。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| episodeId | int | 是 | 任务 ID |
| title | string | 是 | 任务标题(必填,不可省略) |
| languages | string | 否 | 追加目标语种,多个以逗号分隔 |
| param | object | 否 | 任务级参数,见 附录 C |
| job_param | object | 否 | 结构化业务参数,见 附录 D |
行为说明
resStatus = 1(处理中)时不允许修改,返回处理中不允许修改。languages:- 当
mode_type的requires_language = false时不允许修改,返回当前任务类型不允许修改语种; - 传入的语种若包含新语种,会写入
results(status=0)并把resStatus重置为0、重新生成job_id; - 若所有传入语种都已存在,则只更新标题等字段,不重置状态。
- 当
- 语种编码非法返回
flag=110(flagString为具体原因)。
请求示例
{
"episodeId": 26,
"title": "222",
"languages": "indonesian"
}
返回示例
{
"flag": 100,
"flagString": "success"
}
常见错误
| flagString | 说明 |
|---|---|
episodeId参数不能为空 |
缺少任务 ID |
title参数不能为空 |
缺少标题 |
处理中不允许修改 |
resStatus = 1 |
当前任务类型不允许修改语种 |
该类型不支持语种 |
| 记录不存在或无权限 | 归属校验失败 |
4.5 POST /mls/mlsOpenApi/deleteMlsTask
删除任务(软删),同时软删该任务下素材。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| episodeId | int | 是 | 任务 ID |
请求示例
{
"episodeId": 27
}
返回示例
{
"flag": 100,
"flagString": "success"
}
常见错误
| flagString | 说明 |
|---|---|
任务处理中,禁止删除 |
resStatus = 1,需等待处理结束 |
任务不存在或无权限删除 |
归属校验失败 |
4.6 POST /mls/mlsOpenApi/retryMlsTask
失败重试。若任务因视频预处理未完成/失败导致未就绪,会先自动重试预处理。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| episodeId | int | 是 | 任务 ID |
| languages | string | 否 | 指定重试的语种,多个以逗号分隔;不传则重置全部未成功语种 |
| stages | array | 否 | 阶段快照;传了则写入快照 |
行为说明
resStatus = 3(全部完成)返回任务已完成无需重试。- 不传
languages:把results中status != 2且status != 4的语种重置为0(即重跑未成功/未完成的)。 - 传
languages:仅重置这些语种中未成功的;若全部已成功,返回所选语言已完成。 - 重试会重新生成
job_id,并把resStatus置0、complete_time置0。 - 若集下存在互斥任务(
allow_coexist = false),返回冲突提示。
请求示例
{
"episodeId": 26,
"languages": "italian"
}
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"job_id": "mls-xxxxxxxx",
"preprocess_retry": {
"job_no": "PP202609290001",
"retry_mode": "pull"
}
}
}
preprocess_retry仅在本次同时触发了预处理重试时返回。
常见错误
| flagString | 说明 |
|---|---|
记录不存在或无权限 |
归属校验失败 |
任务已完成无需重试 |
resStatus = 3 |
所选语言已完成 |
指定语种均已成功 |
重试失败 |
写库失败 |
5. 任务素材与资源
5.1 POST /mls/mlsOpenApi/saveMlsTaskResource
在已有任务上新增或编辑素材。
- 新增/编辑:均插入新版本;同一「语种 + 资源类型」的旧版本仅降级为历史版本,历史版本保留。
resStatus = 1(处理中)不允许操作,返回处理中不允许修改素材。- 素材会自动关联任务所属的集。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| episodeId | int | 是 | 任务 ID |
| language | string | 是 | 语种,长度 ≤ 50 |
| fileType | string | 是 | 资源类型,长度 ≤ 100 |
| fileUrl | string | 是 | 资源地址,长度 ≤ 255 |
| id | int | 否 | 兼容字段,可忽略;编辑请直接传新 fileUrl |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"id": 88,
"version": "v3-20260929",
"versionSeq": 3
},
"uptime": 1776133477
}
| 字段 | 说明 |
|---|---|
| data.id | 新素材主键 |
| data.version | 新版本号,如 v3-20260929 |
| data.versionSeq | 同键递增序号 |
| uptime | 写入时间(Unix 秒,与 data 同级) |
resStatus = 1时会被拒绝;任务不存在时返回任务不存在。
5.2 POST /mls/mlsOpenApi/deleteMlsTaskResource
软删指定历史素材版本。
当前最新版本不可删除;如需替换请用 5.1 上传新地址或 5.3 从历史版本创建副本。
resStatus = 1处理中不允许删除。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| episodeId | int | 是 | 任务 ID |
| id | int | 是 | 素材主键(须为非最新版本的历史版本) |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"deletedId": 12
}
}
常见错误
| flagString | 说明 |
|---|---|
id参数不能为空 |
缺少素材 ID |
处理中不允许修改素材 |
resStatus = 1 |
当前最新版本不可删除,请上传新文件覆盖或从历史版本创建副本 |
传入了最新版本 |
素材不存在或无权限 |
归属校验失败 |
5.3 POST /mls/mlsOpenApi/copyMlsTaskResourceVersion
基于选中历史版本的内容生成新版本并升为最新版本;版本号形如 v3-20260929-copy。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| episodeId | int | 是 | 任务 ID |
| sourceId | int | 是 | 源版本素材 id;兼容传 id |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"id": 90,
"version": "v4-20260929-copy",
"versionSeq": 4,
"url": "https://xxx/replaced.srt",
"sourceId": 10
}
}
5.4 POST /mls/mlsOpenApi/getMlsResourceGroups
按语种 + fileType 查询分组摘要(不含文件明细)。用于 TTS 候选等「一类型多文件、按 ID 分组」的资源;jobResource 默认不返回这类数据。
按集(drama_video_id)聚合查询:可传 drama_video_id 直接按集查,或传 episodeId 由服务端解析所属集。二者至少传一,都传时以 drama_video_id 为准;无剧集的孤立任务回退按任务查。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| drama_video_id | int | 条件 | 集 ID(也兼容 dramaVideoId),与 episodeId 至少传一 |
| episodeId | int | 条件 | 任务 ID |
| language | string | 是 | 语种 |
| fileType | string | 是 | 资源类型 |
| page | int | 否 | 页码,与 pageSize 同时 > 0 才分页 |
| pageSize | int | 否 | 每页数量,上限 200;兼容传 num |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"list": [
{
"groupKey": "timbre",
"groupValue": "12345",
"fileCount": 3,
"uptime": 1776133477
}
],
"count": 1
}
}
分页时额外返回
page/pageSize。
常见错误
| flagString | 说明 |
|---|---|
episodeId 与 drama_video_id 不能同时为空 |
缺少定位参数 |
language、fileType 不能为空 |
缺少筛选条件 |
项目不存在或无权限 |
drama_video_id 归属校验失败 |
5.5 POST /mls/mlsOpenApi/getMlsResourceGroupFiles
查询某分组下文件列表。平铺返回该分组下全部版本(含历史),不嵌套 versions。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| drama_video_id | int | 条件 | 集 ID(也兼容 dramaVideoId),与 episodeId 至少传一 |
| episodeId | int | 条件 | 任务 ID |
| language | string | 是 | 语种 |
| fileType | string | 是 | 资源类型 |
| groupKey | string | 是 | 分组键 |
| groupValue | string | 是 | 分组值 |
| page | int | 否 | 页码,与 pageSize 同时 > 0 才分页 |
| pageSize | int | 否 | 每页数量,上限 200;兼容传 num |
| https | bool | 否 | 默认 true,返回 https 地址 |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"groupKey": "timbre",
"groupValue": "12345",
"count": 1,
"list": [
{
"id": 88,
"episodeId": 26,
"drama_video_id": 0,
"fileName": "1.mp3",
"groupKey": "timbre",
"groupValue": "12345",
"url": "https://xxx/1.mp3",
"source": "backend",
"uptime": 1776133477,
"version": "v2-20260929",
"versionSeq": 2,
"isLatest": true
}
]
}
}
常见错误
| flagString | 说明 |
|---|---|
language、fileType、groupKey、groupValue 不能为空 |
缺少筛选条件 |
6. 剧集与集管理
层级关系:剧集(drama)→ 集 / 视频(drama_video)→ 任务(task)。
- 剧集通过
dramaId标识; - 集(视频)通过
id标识(在其它接口中称drama_video_id); - 一条集可提交多种
mode_type的任务。
6.1 POST /mls/mlsOpenApi/addMlsDrama
新增剧集。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| name | string | 是 | 剧集名称 |
| remark | string | 否 | 备注 |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"dramaId": 15,
"name": "短剧A",
"mode_types": "",
"languages": "",
"source_type": "batch",
"remark": ""
}
}
新建剧集的
mode_types/languages为空,会在首次submitMlsDramaTasks时写入并锁定。
常见错误
| flagString | 说明 |
|---|---|
name参数不能为空 |
缺少名称 |
| 手机号相关提示 | 非渠道用户未绑定手机号 |
6.2 POST /mls/mlsOpenApi/updateMlsDrama
更新剧集名称 / 备注。
任务类型与输出语种不可通过本接口修改,由
submitMlsDramaTasks首次提交时写入。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| dramaId | int | 是 | 剧集 ID |
| name | string | 是 | 剧集名称(不传则沿用原值,但不能为空) |
| remark | string | 否 | 备注;不传则沿用原值 |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"dramaId": 15,
"name": "短剧A-改",
"mode_types": "full_pipeline",
"languages": "english",
"source_type": "batch",
"remark": "备注"
}
}
常见错误
| flagString | 说明 |
|---|---|
参数无效 |
dramaId 缺失 |
name参数不能为空 |
名称为空 |
剧集不存在或无权限 |
归属校验失败 |
6.3 POST /mls/mlsOpenApi/getMlsDramaList
剧集列表。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| page | int | 否 | 页码,默认 1 |
| num | int | 否 | 每页数量,默认 15,上限 100 |
| name | string | 否 | 名称模糊搜索 |
| dramaId | int | 否 | 按剧集 ID 精确查询 |
| source_type | string | 否 | 默认 batch;可选 batch、single、all |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"list": [
{
"dramaId": 15,
"name": "短剧A",
"mode_types": "full_pipeline",
"languages": "english",
"source_type": "batch",
"remark": "",
"create_time": 1776133477,
"uptime": 1776133477,
"video_count": 12
}
],
"count": 1
}
}
常见错误
| flagString | 说明 |
|---|---|
source_type无效,可选:batch、single、all |
取值非法 |
6.4 POST /mls/mlsOpenApi/getMlsDramaDetail
剧集详情,含各集及其下属任务摘要。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| dramaId | int | 是 | 剧集 ID |
| brief | bool | 否 | 同 4.1,精简任务载荷 |
| with_resources | bool | 否 | 同 4.1,默认 true |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"dramaId": 15,
"name": "短剧A",
"remark": "",
"mode_types": "full_pipeline",
"mode_type_list": ["full_pipeline"],
"mode_types_configured": true,
"languages": "english",
"source_type": "batch",
"create_time": 1776133477,
"uptime": 1776133477,
"videos": [
{
"id": 101,
"dramaId": 15,
"title": "第1集",
"origin_url": "https://xxx/1.mp4",
"thumbnail": "https://xxx/1.jpg",
"duration": 120,
"origin_ready": 1,
"preprocess_status": 2,
"preprocess_fail_msg": "",
"sort": 1,
"source_type": "batch",
"list_type": "default",
"task_count": 1,
"tasks": [],
"jobResource": {}
}
]
}
}
| 字段 | 说明 |
|---|---|
| mode_types | 逗号分隔的类型串(首次提交后写入) |
| mode_type_list | mode_types 解析后的数组 |
| mode_types_configured | 是否已配置类型(true 后提交时不可再改类型/语种) |
| preprocess_status | 预处理状态:3 为失败 |
常见错误
| flagString | 说明 |
|---|---|
参数无效 |
dramaId 缺失 |
剧集不存在或无权限 |
归属校验失败 |
6.5 POST /mls/mlsOpenApi/deleteMlsDrama
删除剧集:级联删除各集及其下属任务(软删)。
剧集下存在处理中任务(
resStatus = 1)时拒绝删除。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| dramaId | int | 是 | 剧集 ID |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"dramaId": 15,
"deleted_task_count": 12
}
}
deleted_task_count为被级联软删的任务数。
常见错误
| flagString | 说明 |
|---|---|
剧集下存在处理中的任务,无法删除 |
需等待任务结束 |
剧集不存在或无权限 |
归属校验失败 |
6.6 POST /mls/mlsOpenApi/addMlsDramaVideo
向剧集添加视频(集)。新增后服务端会按需启动该集的视频预处理。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| dramaId | int | 是 | 剧集 ID |
| title | string | 是 | 集标题 |
| origin_url | string | 是 | 源视频地址 |
| sort | int | 否 | 排序,默认 0 |
| list_type | string | 否 | 列表类型,默认内置值;非法值返回 list_type无效 |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"id": 102,
"dramaId": 15,
"title": "第2集",
"origin_url": "https://xxx/2.mp4",
"thumbnail": "",
"duration": 0,
"origin_ready": 0,
"preprocess_status": 0,
"sort": 2,
"source_type": "batch",
"list_type": "default",
"task_count": 0,
"tasks": [],
"jobResource": {}
}
}
origin_ready = 0表示预处理进行中;处理完成后才会变为1(此时才可提交任务)。
常见错误
| flagString | 说明 |
|---|---|
title参数不能为空 |
缺少标题 |
origin_url参数不能为空 |
缺少源视频地址 |
剧集不存在或无权限 |
归属校验失败 |
| 手机号相关提示 | 非渠道用户未绑定手机号 |
6.7 POST /mls/mlsOpenApi/getMlsEpisodeList
集(视频)列表,返回各集及其下属任务摘要。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| page | int | 否 | 页码,默认 1 |
| num | int | 否 | 每页数量,默认 15,上限 100 |
| title | string | 否 | 标题模糊搜索 |
| dramaId | int | 否 | 按剧集筛选 |
| drama_video_id | int | 否 | 按集 ID 精确查询 |
| source_type | string | 否 | 默认 all;可选 batch、single、all |
| list_type | string | 否 | 按列表类型筛选 |
| brief | bool | 否 | 同 4.1 |
| with_resources | bool | 否 | 同 4.1,默认 true |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"list": [
{
"id": 101,
"dramaId": 15,
"drama_name": "短剧A",
"title": "第1集",
"origin_url": "https://xxx/1.mp4",
"origin_ready": 1,
"preprocess_status": 2,
"duration": 120,
"sort": 1,
"task_count": 1,
"tasks": [],
"jobResource": {}
}
],
"count": 1
}
}
6.8 POST /mls/mlsOpenApi/getMlsEpisodeDetail
集(视频)详情,额外返回 drama_name。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| drama_video_id | int | 是 | 集 ID |
| brief | bool | 否 | 同 4.1 |
| with_resources | bool | 否 | 同 4.1,默认 true |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"id": 101,
"dramaId": 15,
"drama_name": "短剧A",
"title": "第1集",
"origin_url": "https://xxx/1.mp4",
"origin_ready": 1,
"task_count": 1,
"tasks": [],
"jobResource": {}
}
}
常见错误
| flagString | 说明 |
|---|---|
参数无效 |
drama_video_id 缺失 |
集(视频)不存在或无权限 |
归属校验失败 |
6.9 POST /mls/mlsOpenApi/updateMlsEpisode
更新集(视频)名称。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| drama_video_id | int | 是 | 集 ID(注意不是 episodeId) |
| title | string | 是 | 集标题(不传则沿用原值,但不能为空) |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"id": 101,
"title": "第1集-改"
}
}
常见错误
| flagString | 说明 |
|---|---|
参数无效 |
drama_video_id 缺失 |
title参数不能为空 |
标题为空 |
集(视频)不存在或无权限 |
归属校验失败 |
6.10 POST /mls/mlsOpenApi/deleteMlsDramaVideo
删除集(视频):级联软删该集下的任务。
该集存在处理中任务(
resStatus = 1)时拒绝删除。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| id | int | 是 | 集 ID;兼容传 drama_video_id |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"id": 101,
"deleted_task_count": 1
}
}
常见错误
| flagString | 说明 |
|---|---|
该集存在处理中的任务,无法删除 |
需等待任务结束 |
集(视频)不存在或无权限 |
归属校验失败 |
6.11 POST /mls/mlsOpenApi/submitMlsDramaTasks
批量提交剧集下未提交的视频任务(事务:全成功或全失败)。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| dramaId | int | 是 | 剧集 ID |
| mode_types | string | 条件 | 任务类型,多个以逗号分隔;首次提交必填,后续提交不可修改 |
| languages | string | 条件 | 输出语种,多个以逗号分隔;类型需要语种时必填 |
| param | object | 否 | 任务级参数,见 附录 C |
| job_param | object | 否 | 结构化业务参数,见 附录 D |
| stages | array | 否 | 阶段快照 |
行为说明
- 首次提交:写入剧集的
mode_types/languages并锁定,之后不可修改(改了返回任务类型已确定,不可修改/输出语种已确定,不可修改)。 - 按「集 + 类型」去重,已存在且未完成(
resStatus IN (0,1))的组合会跳过。 - 存在预处理失败的集时整体拒绝:
视频「xxx」预处理失败,请重试预处理或删除后重新上传。 - 提交前整体预估额度,可用积分不足时整体拒绝:
额度不足,不允许提交。 - 若无待提交组合,返回
created: []且message为没有待提交的任务。
请求示例
{
"dramaId": 15,
"mode_types": "full_pipeline",
"languages": "english,italian"
}
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"created": [
{
"videoId": 101,
"videoTitle": "第1集",
"mode_type": "full_pipeline",
"episodeId": 31,
"job_id": "mls-xxxxxxxx"
}
],
"created_count": 1,
"mode_types": "full_pipeline",
"languages": "english,italian",
"first_submit": true
}
}
常见错误
| flagString | 说明 |
|---|---|
剧集下暂无视频,请先上传视频 |
剧集为空 |
剧集不存在或无权限 |
归属校验失败 |
任务类型配置无效: xxx |
mode_types 中存在非法类型 |
额度不足,不允许提交 |
可用积分不足 |
| 手机号相关提示 | 非渠道用户未绑定手机号 |
7. 视频预处理
7.1 POST /mls/mlsOpenApi/retryMlsVideoPreprocess
视频预处理失败重试。三种定位方式任选其一,优先级:job_no > videoId/id > episodeId。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| job_no | string | 条件 | 预处理任务号;须为最新且未作废的记录 |
| videoId | int | 条件 | 集(视频)ID;兼容传 id |
| episodeId | int | 条件 | 任务 ID,服务端据此解析所属集 |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"job_no": "PP202609290002",
"retry_mode": "pull",
"ref_type": "drama_video",
"ref_id": 101,
"message": "预处理已重新提交(仅网络上传)"
}
}
| 字段 | 说明 |
|---|---|
| retry_mode | pull 仅网络上传;transcode 从转码开始;processing 已在处理中 |
| ref_type | drama_video 或 task |
常见错误
| flagString | 说明 |
|---|---|
请传入 videoId、episodeId 或 job_no |
未提供定位参数 |
预处理任务不存在或无权限 |
job_no 归属校验失败 |
该预处理记录已作废,请在列表查看最新任务 |
job_no 已作废 |
请对最新一条预处理记录重试 |
job_no 非最新 |
视频不存在或无权限 |
集归属校验失败 |
说明:本接口只重跑预处理(源片转码/上传),不会重置任务;若要重跑任务请用 4.6 retryMlsTask(其内部会在需要时自动触发预处理重试)。
8. 额度(积分)
8.1 POST /mls/mlsOpenApi/getMlsAmount
获取当前账号额度。
请求参数
无。
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"last_amount": 10000,
"reserved": 1200,
"available": 8800,
"invite_reward_total": 0
}
}
| 字段 | 说明 |
|---|---|
| last_amount | 账户余额 |
| reserved | 待处理 / 处理中未完结任务占用的额度 |
| available | 可用额度 = last_amount - reserved |
| invite_reward_total | 累计邀请奖励 |
8.2 POST /mls/mlsOpenApi/getMlsAmountRunList
额度(积分)使用记录。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| page | int | 否 | 页码,默认 1 |
| num | int | 否 | 每页数量,默认 15,上限 100 |
| uptimeStart | int | 否 | 时间起(Unix 秒);兼容 uptime_start |
| uptimeEnd | int | 否 | 时间止(Unix 秒);兼容 uptime_end |
| tradeType | int | 否 | 1 存入 / 2 支出;兼容 trade_type |
返回示例
{
"flag": 100,
"flagString": "success",
"data": [
{
"id": 1,
"uin": 1000,
"trade_amount": -12,
"last_amount": 9988,
"trade_type": 2,
"trade_desc": "全流程-英语 翻译费用",
"episodeId": 26,
"uptime": 1776133477,
"task_title": "工程1"
}
],
"total": 1
}
8.3 POST /mls/mlsOpenApi/checkMlsAmount
创建任务前判断额度是否充足。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| duration | int | 条件 | 时长(秒);无源片类型可用 resources 推算 |
| languages | string | 条件 | 目标语种,多个以逗号分隔;与 languageCount 二选一 |
| languageCount | int | 条件 | 目标语种数量 |
| mode_type | string | 否 | 任务类型,默认 full_pipeline;非法值返回 mode_type无效 |
| param | object | 否 | 任务级参数(影响 timestamp_check 等) |
| stages | array | 否 | 阶段快照 |
| include_source_upload | bool | 否 | 是否把源视频上传费用计入预估;兼容 includeSourceUpload |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"sufficient": true,
"required": 1200,
"last_amount": 10000,
"reserved": 0,
"available": 10000,
"billable_seconds": 120,
"language_count": 2,
"mode_type": "full_pipeline",
"base_price_per_second": 3,
"lang_price_per_second": 1,
"timestamp_check": false
}
}
| 字段 | 说明 |
|---|---|
| sufficient | 可用额度是否 ≥ required |
| required | 本次预估消耗 |
| available | 可用额度 = last_amount - reserved |
| billable_seconds | 计费秒数 |
| timestamp_check | 任务参数是否启用时间戳校对 |
base_price_per_second/lang_price_per_second仅为参考,真实单价请以 3.3 getMlsStageList 为准。
常见错误
| flagString | 说明 |
|---|---|
duration、languages或languageCount无效 |
需要语种的任务未提供语种,或时长非法 |
9. 反馈工单
工单状态:pending 待受理 → processing 处理中 → replied 已回复 → closed 已关闭(不可重开)。
9.1 POST /mls/mlsOpenApi/getMlsFeedbackCategoryTree
反馈分类树(仅启用)。为两级结构。
请求参数
无。
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"list": [
{
"id": 1,
"name": "功能异常",
"sort": 1,
"children": [
{"id": 11, "name": "无法上传", "sort": 1}
]
}
]
}
}
9.2 POST /mls/mlsOpenApi/submitMlsFeedback
提交反馈工单,初始状态 pending。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| title | string | 是 | 标题,≤ 200 字 |
| content | string | 是 | 详情,≤ 2000 字 |
| feedbackSource | string | 是 | 反馈来源(如 h5、web),≤ 64 字 |
| categoryId | int | 是 | 一级分类 ID,须为启用的一级分类 |
| subCategoryId | int | 否 | 二级分类 ID,须属于 categoryId 且启用 |
| images | array | 否 | 图片 URL 数组,≤ 10 张,只传 URL |
| pageUrl | string | 否 | 页面地址,≤ 512 字 |
| clientVersion | string | 否 | 客户端版本,≤ 64 字 |
| deviceInfo | string | 否 | 设备信息,≤ 255 字 |
| relatedType | string | 否 | 关联业务类型,≤ 32 字 |
| relatedId | string | 否 | 关联业务 ID,≤ 64 字 |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"id": 1001
}
}
常见错误
| flagString | 说明 |
|---|---|
标题必填且不超过200字 |
标题为空或超长 |
详情必填且不超过2000字 |
详情为空或超长 |
反馈来源不能为空 |
缺少 feedbackSource |
请选择反馈分类 |
缺少 categoryId |
一级分类无效 / 二级分类无效 |
分类校验失败 |
9.3 POST /mls/mlsOpenApi/appendMlsFeedbackMessage
关单前追评。
已回复(
replied)的工单追评后回到processing;已关闭(closed)不可追评。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| id | int | 是 | 工单 ID |
| content | string | 是 | 追评内容,≤ 2000 字 |
| images | array | 否 | 图片 URL 数组,≤ 10 张 |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"id": 1001
}
}
常见错误
| flagString | 说明 |
|---|---|
id不能为空 |
缺少工单 ID |
内容必填且不超过2000字 |
内容为空或超长 |
工单已关闭,无法继续反馈 |
状态为 closed |
9.4 POST /mls/mlsOpenApi/getMyMlsFeedbackList
我的反馈列表。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| page | int | 否 | 页码,默认 1 |
| num | int | 否 | 每页数量,默认 10,上限 50 |
| status | string | 否 | 按状态筛选 |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"list": [
{
"id": 1001,
"title": "无法上传视频",
"feedbackSource": "web",
"categoryId": 1,
"categoryName": "功能异常",
"subCategoryId": 11,
"subCategoryName": "无法上传",
"status": "pending",
"userUnread": 0,
"createTime": 1776133477,
"updateTime": 1776133477,
"closeTime": 0
}
],
"count": 1
}
}
列表按
userUnread倒序、id倒序返回。
9.5 POST /mls/mlsOpenApi/getMyMlsFeedbackDetail
我的反馈详情,仅返回对用户可见的消息;打开后会自动清除未读标记。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| id | int | 是 | 工单 ID |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"id": 1001,
"title": "无法上传视频",
"status": "replied",
"userUnread": 0,
"content": "上传一直失败",
"images": ["https://xxx/1.png"],
"pageUrl": "https://xxx/upload",
"clientVersion": "1.2.0",
"deviceInfo": "iPhone 15",
"relatedType": "task",
"relatedId": "26",
"messages": [
{
"id": 1,
"senderType": "user",
"msgType": "user",
"content": "上传一直失败",
"images": ["https://xxx/1.png"],
"adminName": "",
"createTime": 1776133477
}
]
}
}
9.6 POST /mls/mlsOpenApi/closeMyMlsFeedback
用户关闭工单(不可重开)。
请求参数
| 名称 | 类型 | 必选 | 说明 |
|---|---|---|---|
| id | int | 是 | 工单 ID |
| remark | string | 否 | 关闭备注,≤ 512 字 |
返回示例
{
"flag": 100,
"flagString": "success",
"data": {
"id": 1001,
"closeTime": 1776133477
}
}
常见错误
| flagString | 说明 |
|---|---|
id不能为空 |
缺少工单 ID |
反馈不存在 |
归属校验失败 |
工单已关闭 |
已处于 closed |
附录 A:接口可用范围
openApi 的可用范围以本文档「0.2 接口清单」为准。调用清单之外的接口名,一律返回:
{"flag":1007,"flagString":"请求接口不存在,请参照文档说明"}
部分能力(如账号注册登录、控制台会话、渠道对接、支付回调、内部运维与各类回调通知等)不通过 openApi 提供,请按各自的对接方式处理。
如需新增开放接口,请联系对接负责人评估后开通。
附录 B:典型调用时序
B.1 单条任务(有源片)
1. POST /mls/mlsOpenApi/getSupportLanguageList → 取可用 language_code
2. POST /mls/mlsOpenApi/getMlsModeTypeList → 取 mode_type / requires_origin / requires_language
3. POST /mls/mlsOpenApi/uploadMlsPart → 分片上传(partNum 从 1 递增)
4. POST /mls/mlsOpenApi/completeMlsUpload → 取 location
5. POST /mls/mlsOpenApi/checkMlsAmount → 预估额度是否充足
6. POST /mls/mlsOpenApi/addMlsTask → 取 episodeId
7. POST /mls/mlsOpenApi/getMlsDetail → 轮询 resStatus / results
8. POST /mls/mlsOpenApi/retryMlsTask → 失败时重试
9. POST /mls/mlsOpenApi/deleteMlsTask → 清理
B.2 剧集批量任务
1. POST /mls/mlsOpenApi/addMlsDrama → 取 dramaId
2. POST /mls/mlsOpenApi/addMlsDramaVideo → 逐集添加(origin_ready 初始为 0)
3. POST /mls/mlsOpenApi/getMlsDramaDetail → 轮询各集 origin_ready,全部为 1 后才可提交
4. POST /mls/mlsOpenApi/retryMlsVideoPreprocess → 预处理失败时重试
5. POST /mls/mlsOpenApi/submitMlsDramaTasks → 首次提交须传 mode_types / languages,提交后锁定
6. POST /mls/mlsOpenApi/getMlsDramaDetail → 查看各任务进度
B.3 查询进度建议
- 优先轮询 4.1 getUserMlsList(可一次按
drama_video_id或resStatus过滤多条),比逐条getMlsDetail更省请求。 - 传
brief=1可显著减小响应体(不返回results/param/job_param/stages/jobResource);确认全部完成后,再对需要的任务单独取详情。
附录 C:任务级环境变量 param
param 为任务级环境变量对象,随任务写入并在下发处理流程时透传。常用字段:
| 字段 | 类型 | 说明 |
|---|---|---|
timestampCheck |
bool | 是否启用时间戳校对 |
| 其它 | — | 按类型(mode_type)由服务端约定的扩展字段 |
param会原样透传给下游,新增字段请与业务确认,避免与既有约定冲突。
附录 D:结构化业务参数 job_param
job_param 描述「怎么做」,服务端会对字段做校验后透传给下游处理流程。常用字段:
| 字段 | 类型 | 说明 |
|---|---|---|
sceneCode |
string | 翻译场景编码,取自 3.5 getMlsTranslationSceneList;传入后服务端会为该场景装配对应的翻译提示词 |
stages |
object | 阶段级参数,如 stages.subtitle_translate.prompt |
| 其它 | — | 按类型与阶段扩展 |
附录 E:变更记录
| 日期 | 变更 |
|---|---|
| 2026-09-30 | 文档重写:按实现校准全部入参 / 出参,补齐基础配置、任务素材、剧集与集、预处理重试、额度、反馈工单等共 40 个接口;新增调用时序(附录 B) |
| — | 明确 openApi 可用范围以「0.2 接口清单」为准,清单外接口返回 flag=1007 |
| — | 修正 getSupportLanguageList(enable 入参已失效) |
| — | 修正 updateMlsTask(title 为必填) |
| — | 修正 deleteMlsTask(处理中禁止删除) |
| — | 补充 addMlsTask 返回 job_id / mode_type / dramaId / drama_video_id |