音频驱动指令

最近更新时间:2026-05-27 14:59:11

我的收藏

接口说明

创建长连接通道 后,可以通过 WebSocket 长连接发送音频驱动数智人。
发送音频时请特别留意请求参数下方的发送注意事项,不然会导致发送不成功。

请求参数

参数名称
类型
必选
描述
ReqId
String
单次驱动的唯一标识。每一段音频指定一个32位 UUID 值(不包含‘-’)
注意:
每一段流式音频序列指定一个 ReqId,而不是单独一次音频分片请求指定一个。
值得注意的是,在发送 final 包时仍然使用的是指定的这一个 ReqId,不需要再生成一个。
SessionId
String
会话唯一标识。
Command
String
SEND_AUDIO,发送音频。
Data
Data
数据对象。

Data

名称
类型
必选
描述
Audio
string
音频原始数据的 byte 数组,经 Base64 编码后的字符串。只支持:
格式:PCM
采样率:16kHz
采样位深:16bits
声道:单声道
可以使用 FFmpeg 工具对音频格式进行调整。更多请参见 FFmpeg 转化音频格式说明
Seq
int
音频片包序号,序号必须从1开始。
IsFinal
bool
用于标记本次音频驱动是否结束,默认值 false。
注意:
当数据包发送完毕后,必须再发送一个 IsFinal=true 的空数据包(Audio 字段填空串)结束当次音频驱动使数字人回到静默状态。

没有及时发送 final 包会出现的问题:
1. 可能会出现数智人播报期间卡顿的问题。
2. 后台在指定时间间隔(默认2秒,可以在创建会话时通过参数 StreamMaxInterval 进行设置)内既没收到音频包又没收到 IsFinal=true 的尾包,则后台会自动补一个 IsFinal=true 的尾包,使数智人进入静默状态。
VideoSeiInfo
string
需要在视频流 SEI 中携带的信息,字符串内容为 JSON 格式。发送后会在视频流播报本次响应时在 SEI 中携带。当前仅支持 2D 形象,视频流中信息说明请参见 视频流嵌入信息说明
ActionParams
Array of [ActionParam]
定义音频驱动模式下数字人主播的指定动作序列。每个动作将在对应时间点触发,使主播执行相应行为。生效条件:
1. 所选动作(Code)必须已预置在该主播的可用动作库中,主播支持的动作可查询:查询形象支持的动作列表
2. 动作时间点(StartTime 单位 ms),提前于动作驱动时间点,建议提前 2s 发送;
3. 每次完整驱动的首帧驱动指令中的动作系列均会尽量保证生效,可能会有补帧的情况,导致动作滞后,注意特殊处理;
Interrupt
bool
用于打断当前驱动中的还未播放完毕的音频,默认值 false。(需要打断时传入 true,其他相关的参数不传即可)
注意:
1. 如果是麦克风实时收音发送,每录制160ms(5120B)的数据即可发出,中间不需要间隔等待;
2. 如果是有条件(比如读取离线音频文件或者从 TTS 获取音频),以最快速度发出前6个片包,片包大小为160ms(5120B);间隔120ms 后,发送后续片包,保持发送间隔为120ms。
3. 最后一个片包大小按实际发送(需小于160ms)。
4. 除开前6个包,发送音频实时率要介于[0.75,1],小于0.75会触发限速,大于1会导致画面卡顿。例如160ms 音频片包大小,发送间隔不能低于120ms,不能高于160ms。

请求示例

{
"Header": {},
"Payload": {
"ReqId": "d7aa08da33dd4a662ad5be508c5b77cf",
"SessionId": "m318552187863054171",
"Command": "SEND_AUDIO",
"Data": {
"Audio": "声音二进制数据编码Base64后的值",
"Seq": 1,
"IsFinal": false
},
"ActionParams": [
{
"Code": "action1",
"StartTime": 5000
},
{
"Code": "action2",
"StartTime": 22000
}
]
}
}