详细参数
创建会话
创建一次会话,Vidu 会用你传入的 customer_rtc 加入你的 RTC 频道,准备推送数字人画面。
请求头
请求体示例
请求字段说明
modelStringpersonaStringresolutionStringimage_uristring条件image_uri和avatar_id二选一,数字人形象图片地址,支持图片 URL 和 base64。仅支持 1 张【单人】图片,支持全身 / 半身、各种风格。格式:PNG / JPG / JPEG / WEBP;图片大小 ≤ 50MB;base64 decode 后字节长度 < 20M,且需包含内容类型前缀,例如 data:image/png;base64,{base64_encode}avatar_idString条件customer_rtcobject条件customer_rtc和managed_rtc二选一managed_rtcobject条件customer_rtc和managed_rtc二选一actionobjectcustomer_rtc 字段
providerenum必填artc(阿里)/ trtc(腾讯)/ agora(声网)/ volcengine(火山引擎)app_idstring条件channel_idstring条件user_idstring条件tokenstring必填agora_int_uiduint32managed_rtc 字段
providerenumartc(阿里,默认值)/ trtc(腾讯)/ agora(声网)/ volcengine(火山引擎)。enable_recordingboolfalse。action字段
enabledbool · falseaction 或为 false 则不匹配library_idString · "0""0" 或不传表示平台默认库。库不存在或已删除返回 400,库不属于本账号返回 403,均不创建会话响应字段说明
| 字段 | 说明 |
|---|---|
| live.id | 直播 ID |
| live.status | waiting(数字人未就绪);全部取值:waiting / prepared / on_live / ending / ended |
| live.trace_id | 链路 ID |
| live.model | 实际生效的模型(vidu-s2 / vidu-s1) |
| live.resolution | 实际生效的分辨率(720p / 1080p / 2K) |
| client_secret | WebSocket 建连的短期签名 token(有效期 24h) |
| managed_rtc.provider | 本次实际生效的供应商 |
| managed_rtc.app_id | RTC 应用 ID |
| managed_rtc.channel_id | RTC 频道 ID |
| managed_rtc.user_id | 分配给客户端的用户 ID(与推流端身份不同) |
| managed_rtc.token | 客户端入会 token |
| managed_rtc.token_expire_at | token 到期时间,秒级 Unix 时间戳。有效期不少于 24 小时 10 分钟,覆盖单次组件版直播最长 24 小时的会话时长 |
| live.action | 回显运行时动作匹配配置 |
查询直播
响应体为 {"live": { ... }},结构同创建响应中的 live 对象。
查询录播
平台托管 RTC 且 managed_rtc.enable_recording=true 时,直播结束后可查询录播文件下载地址。
WebSocket 流协议
WebSocket 是核心通道:既发控制信令,也上行 PCM 音频和转写文本。
建立连接
client_secret query 参数;服务端场景用 Authorization Header,二者任一即可;若同时提供,二者必须属于同一用户与同一 live,否则返回 403。
live_idstring必填conn_idstringclient_secretstring连接约定
| 项 | 约定 |
|---|---|
| 文本帧 | TextMessage + JSON(WsSignal),最大 16 MiB |
| 二进制帧 | BinaryMessage(裸 PCM 音频),最大 16 MiB |
| 首帧要求 | 必须为 conn_init;成功回执前上行的音频与控制信令会被丢弃(详见「信号类型」) |
| 心跳 | 服务端约每 5s 发送 ping;约 15s 未回 pong 即断开(普通数据帧不续期) |
通用消息格式
请求体示例
typeintlive_idstringuser_idstringconn_idstringseq_idintconn_init_ack 的 seq_id 为请求 seq_id + 1(其他回执不适用)payloadobjecttype 不同携带对应子结构信号类型
客户端 → MaaS
| type | 名称 | 说明 |
|---|---|---|
| 1 | conn_init | 必填,连接初始化;首帧必须发送。成功回执前,上行 PCM 音频帧、audio_interrupted、prompt_operation、baseline_reset、switch_avatar 会被丢弃,call_hangup 与 type=9/10 仍会处理 |
| 5 | call_hangup | 主动挂断;直接关闭 WS 等效 |
| 7 | audio_interrupted | 打断数字人当前回复,最佳时机为每次 VAD 检测到用户开口时 |
| 9 | input_transcription | 驱动数字人动作的文本,content 为空则忽略 |
| 10 | output_transcription | 模型生成的回复文本;content 为空则忽略 |
| 11 | prompt_operation | 运行中增删参考图,仅 model=vidu-s2 支持;成功与失败均回 prompt_operation_ack(type=12) |
| 15 | baseline_reset | 把数字人画面复位到闭口静息态;无载荷。成功与失败均不回执 |
| 16 | switch_avatar | 播放转场视频并切换数字人形象;成功不回执,失败下发 type=103 error |
MaaS → 客户端
| type | 名称 | 说明 |
|---|---|---|
| 2 | conn_init_ack | 初始化回执 |
| 6 | force_hangup | 服务端强制挂断,随后服务端关闭 WS |
| 12 | prompt_operation_ack | 参考图操作回执;成功与失败都会下发 |
| 103 | error | switch_avatar 失败回执,payload.error.source 固定为 switch_avatar |
信令示例
conn_init(type=1)
conn_init_ack(type=2)— 成功
input_transcription(type=9) — 驱动数字人动作的文本,或者你的 ASR 识别出的用户话:
output_transcription(type=10) — 你的 LLM 生成的回复话:
audio_interrupted(type=7)
call_hangup(type=5)
force_hangup(type=6)
prompt_operation(type=11)
直播运行中增删参考图(手持物 / 换装 / 换背景),仅 model=vidu-s2 的 video 直播支持;conn_init 成功前上行的 prompt_operation 会被丢弃。
请求字段
typeinteger必填live_idstring必填conn_idstring可选seq_idinteger可选payload.prompt_operation.op_typestring可选payload.prompt_operation.imagesobject[]条件images[].image_uristring条件images[].image_idstring必填images[].kindstring可选images[].user_textstring可选请求示例:
回执:服务端始终回 prompt_operation_ack(type=12),成功与失败都会回执,seq_id 原样回填。
回执字段
typeintegerlive_idstringseq_idintegerpayload.prompt_operation_ack.successboolpayload.prompt_operation_ack.error_codestringpayload.prompt_operation_ack.error_msgstring错误码:
| 错误码 | 触发条件 |
|---|---|
| PROMPT_OP_PARAM_INVALID | 入参非法(图片数量、image_id、image_uri 协议等)。 |
| PROMPT_OP_MODEL_NOT_SUPPORTED | 当前直播不是 vidu-s2 的 video 直播。 |
| PROMPT_OP_IMAGE_TRANSFER_FAILED | 参考图转存或签名失败(多图任一失败即整单失败)。 |
| PROMPT_OP_RENDER_NOT_CONNECTED | 渲染服务未就绪,暂时无法执行,可稍后重试。 |
| PROMPT_OP_FAILED | 其它失败。 |
baseline_reset(type=15)
客户端在对话过程中可随时触发,立即把数字人画面姿态复位到不说话的初始画面。
请求字段
typeinteger必填15。live_idstring必填conn_idstring可选seq_idinteger可选payloadobject可选请求示例
回执语义:无论成功或失败均不下发回执,请勿以是否收到回执判断执行结果。
重复触发是幂等的(等价于重复下发同一闭口姿态),但不建议无意义地高频连发。
switch_avatar(type=16)
直播运行中,客户端可让数字人播放一组转场视频,并在播放过程中把数字人切换为新的形象。
消息为 JSON 文本帧,type=16,外层结构与其他信令一致。
请求字段
typeinteger必填live_idstring必填conn_idstring可选seq_idinteger可选payload.switch_avatar.switch_videosstring[]必填payload.switch_avatar.avatar_idstring必填请求示例
回执语义:成功不下发任何回执(不要以 WS 是否写出成功判断执行结果);失败时下发一帧 error。
失败回执字段
typeinteger103。live_idstringseq_idintegerseq_id。payload.error.sourcestringswitch_avatar。payload.error.codestringpayload.error.messagestring错误码
| 错误码 | 触发条件 |
|---|---|
SWITCH_AVATAR_PARAM_INVALID | 入参非法:switch_videos 为空、数量超过 10 个、含非 http(s) 地址或时长越界;avatar_id 未传; |
SWITCH_AVATAR_LIVE_NOT_ACTIVE | 直播未在运行中(或已结束 / 不可用)。 |
SWITCH_AVATAR_MEDIA_TRANSFER_FAILED | 转场视频或新形象图片处理失败。 |
SWITCH_AVATAR_RENDER_NOT_CONNECTED | 渲染服务未就绪,暂时无法切换,可稍后重试。 |
SWITCH_AVATAR_FAILED | 其它失败。 |
注意事项
-
新形象在转场视频播放完成后生效;转场期间画面按视频列表顺序播放。
-
avatar_id 场景会一并应用该形象的形象描述。
音频二进制帧
通过 WebSocket BinaryMessage 发送,无 JSON 封装,直接传输原始 PCM 字节流。
| 参数 | 值 |
|---|---|
| 编码 | PCM 16-bit 有符号小端(s16le) |
| 采样率 | 24,000 Hz |
| 声道 | 单声道(mono) |
| 数据速率 | 48 字节 / 毫秒 |
| 建议帧大小 | 20ms(960 字节)或 100ms(4,800 字节) |
动作库
自建动作库供创建会话时用 action.library_id 绑定。按账号 owner 隔离,同一用户下多个 API Key 共用一套库;每账号最多 20 个库,每库最多 100 条动作。均需 Authorization: Token vda_xxx,ID 在 JSON 中为 string。
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /action-libraries | 创建库。name 必填,超配额或重名返回 400 |
| GET | /action-libraries?pager.page=0&pager.pagesz=10 | 列表,返回 total + items,创建时间倒序,只含本账号未删除库 |
| GET | /action-libraries/{id} | 库详情。他人库或不存在均返回 404 |
| PATCH | /action-libraries/{id} | 改 name / description,重名返回 400 |
| DELETE | /action-libraries/{id} | 删库,库内动作一并删除;进行中的会话不受影响 |
| POST | /action-libraries/{id}/actions | 新增动作,同步改写 description 后入库,常见耗时数秒 |
| GET | /action-libraries/{id}/actions[/{action_id}] | 列表 / 详情,可查看改写后的 description |
| PATCH | /action-libraries/{id}/actions/{action_id} | 改 name 不触发改写;改 description 会先改写,失败则原记录不变 |
| DELETE | /action-libraries/{id}/actions/{action_id} | 删除一条动作 |
字段约束
| 字段 | 必填 | 说明 |
|---|---|---|
库 name | 是 | 1~50 字符,同账号未删除范围内唯一 |
库 description | 否 | ≤ 200,可空 |
动作 name | 是 | 1~20 字符,库内未删除范围内唯一 |
动作 description | 是 | 请求侧 5~500;服务端改写后再校验 5~500,改写失败则不入库,可重发同一请求重试 |
库对象另返回 id、action_count(未删除动作数)、created_at / updated_at(ISO 8601);动作对象另返回 id、action_library_id 与同样的时间字段。
错误响应及说明
创建会话时与 RTC 来源相关的错误:
| 场景 | HTTP 状态码 | 说明 |
|---|---|---|
managed_rtc 与 customer_rtc 同时传 | 400 | 字段定位 managed_rtc;不创建会话、不占用并发 |
provider 传入未定义取值 | 400 | 请求校验拦截 |
平台侧 artc 凭证未配置或 token 签发失败 | 500 | 创建失败,不回退其他供应商 |
平台侧 trtc / agora / volcengine 凭证未配置或 token 签发失败 | 503 | 创建失败,不回退其他供应商 |
建连被拒绝时返回 HTTP 状态码:
| HTTP 状态码 | 场景 | 处理建议 |
|---|---|---|
401 | header 与 client_secret 均缺失,或 client_secret 无效 / 过期 | 补充或更新相关信息 |
403 | live 不属于当前用户 | 更换live或者API key |
400 | 非外接 live、live 已结束、live_id 非法 | 确认live信息 |
409 | 该 live 已有活跃连接 | 查阅live状态 |
建连成功后,初始化结果通过 conn_init_ack 返回,其中的 error_code 取值如下:
| error_code | 场景 | 处理建议 |
|---|---|---|
NOT_READY | 渲染服务未就绪 | 稍后重试 conn_init,无需重连 WS |
LIVE_ENDED | live 已结束 | 需重新创建 |
LIVE_CONN_INIT_FAILED | 其他初始化失败 | 关闭当前 WS,重新创建;仍失败则带 live_id / trace_id 反馈 |
接入要点
- 首帧必须是
conn_init;NOT_READY属正常现象,重试conn_init即可,不要重连 WS。 - 保持心跳:及时响应服务端 ping;约 15s 未回 pong 会被判定为死连接并断开。
- 建议服务端代理 WebSocket 鉴权,避免 Vidu API Key 泄漏到浏览器端。
- 目前已支持阿里(artc)、腾讯(trtc)、声网(agora)和火山引擎(volcengine)的 RTC。
- 如不想自建 RTC 频道,可传
managed_rtc使用平台托管 RTC。
定价信息
- 按秒计费,每秒1积分(0.03125元)
- 如果用户账户余额的最小积分数小于45积分(约1.4元),则无法发起任务
- 使用平台托管 RTC 不额外收费:不新增独立计费项、计费 SKU 或附加扣费,仍沿用上述组件版直播计费规则(任务类型 live)
FAQ
使用阿里RTC,容易进错入口,请使用这个地址:https://live.console.aliyun.com/#/liveRtc/list。具体操作为在视频直播控制台 → 左侧导航栏的 直播+ > 实时音视频 > 应用管理 > 创建应用。
创建完成后点「管理」,在基本信息页获取 AppID 与 AppKey。
当前Linux服务端不支持使用体验包,需要购买旗舰版且找客服开通权限才可使用。以下环境可以使用体验包且不需要客服: iOS, Android, HarmonyOS, Mac, Windows, Web,Electron, Flutter、 uni-app、 微信小程序.
如需获取Linux sdk体验包可以填写申请问卷:https://cloud.tencent.com/apply/p/435hepcpuft,填写完成后,系统会在1-2天内免费开通30天的linux环境使用权。