实时音视频
字幕类型 | 说明与限制 |
字幕类型 | 说明与限制 |
对齐时间戳字幕 SubtitleMode:0 | 字幕来源于 TTS,与 AI 实际播报的音频进行时间戳对齐。但字幕生成稍慢,部分特殊符号可能被转义而无法显示。该模式下,支持暂停和续播。 使用限制:
|
快速字幕 SubtitleMode:1 | 字幕为处理后的 LLM 回复文本(即会过滤空格回车等特殊字符)。返回时系统会将识别到的分句或整句一次性返回,字幕不对齐音频时间戳,可实现快速回调字幕信息。 使用限制: 当 TTSConfig.AutoActive 为 false 时该模式不可用。 |
音频帧对齐字幕 SubtitleMode:2 | 字幕来源于 TTS。与 AI 实际播报的音频可精准对齐,实现类似卡拉 OK 的逐字高亮效果,并支持暂停和续播。相较于对齐时间戳字幕,抗网络波动效果更好。 该模式下,系统会将字幕的位置信息直接嵌入到每个音频帧的附加信息(extraInfo)中。在客户端收到完整的句子文本后,再根据每个音频帧携带的字符索引,即可在播放音频的同时精准高亮对应的文字,从而实现音文的强同步。 使用限制: 启用该模式时,必须关闭音频快速发送(Burst)功能。 |
极速字幕 SubtitleMode:3 | 字幕为 LLM 的原始输出,不会过滤任何字符,完整保留换行符等格式。适用于内容保真、需快速回调字幕的场景。 |
参数 | 说明 |
参数 | 说明 |
AgentConfig.ServerMessageURLForRTS | 您的后端服务地址,用于接收字幕消息。必须是公网可访问的 URL,且能正确处理无 Content-Type 的 HTTP POST 请求。 |
AgentConfig.ServerMessageSignatureForRTS | 自定义认证密钥。此字符串会在回调请求中原样返回,用于校验请求合法性。 |
SubtitleConfig.SubtitleMode |
参数名 | 类型 | 描述 |
参数名 | 类型 | 描述 |
message | String | |
signature | String | 鉴权签名。可与StartVoiceChat接口中传入的AgentConfig.ServerMessageSignatureForRTS字段值进行对比以进行鉴权验证。 |
场景 | definite | paragraph | UI 处理建议 |
场景 | definite | paragraph | UI 处理建议 |
用户说话中 | false | false | 用序号大的字幕覆盖序号小的。 |
用户/AI 分句结束 | true | false | 重新开始新的一句话,覆盖前一句话。 |
常规对话整轮结束 | true | true | 此时如果继续解析显示字幕,字幕会重复显示。 |
Extrainfo 字幕索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Extrainfo 字幕索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
字幕 | ( | 开 | 心 | ) | 今 | 天 | 天 | 气 | 不 | 错 | ! |
Extrainfo 字幕索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
Extrainfo 字幕索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
字幕 | H | e | l | l | o | ! | | I | ' | m | | J | o | b | ! |
参数名 | 类型 | 描述 |
参数名 | 类型 | 描述 |
magic number | binary | 消息标识。固定为 subv,表示字幕数据。 |
length | binary | 字幕消息长度,单位为 bytes,大端序存储。 |
subtitle_message | binary | 字幕内容的 JSON 字符串,UTF-8 编码。 |
参数名 | 类型 | 描述说明 |
参数名 | 类型 | 描述说明 |
type | String | 消息类型,固定为 subtitle。 |
data | Object[] | 字幕详细信息。包含以下子字段: |
├── text | String | 字幕文本内容。 |
├── language | String | 字幕语言(例如:"zh-CN")。 |
├── userId | String | 来源者 ID。若是真人则为用户 UserId;若是 AI 则为 AI 的 UserId。 |
├── sequence | Int | 字幕序号。在单轮对话中递增。 |
├── definite | Boolean | 是否为完整分句。true: 是;false: 否。 |
├── paragraph | Boolean | 当前一次字幕输入是否结束。true: 是;false: 否。对于常规对话,可理解为当前整句结束;对于通过多次 ExternalTextToSpeech 传入的持续文本播报,true 仅表示当前一次外部文本输入结束,不表示业务层面的整段回复结束。 |
├── roundId | Int | 对话轮次 ID。 |
├── customInfo | Object | 业务自定义信息。通过服务端 UpdateVoiceChat 或客户端 sendUserBinaryMessage 的 ExternalTextToSpeech 指令传入 AdvanceConfig.CustomInfo 时,该对象随对应 roundId 的字幕原样透传。RTC 不解析对象中的键和值。 customInfo 支持 SubtitleMode 为 0、1 或 3 的字幕模式。 |
├── firstCharPos | Int | 该 text 片段在完整对话中的起始字符索引。 |
├── lastCharPos | Int | 该 text 片段在完整对话中的结束字符索引。 |
├── voiceprintName | String | |
├── voiceprintId | String | 声纹 ID。 |
└── voiceprintScore | Int | 声纹相似度分数。 |
接收方式 | 用户字幕 | AI 字幕 |
接收方式 | 用户字幕 | AI 字幕 |
客户端接收 | 字幕来源:ASR 模块语音识别内容 返回方式:流式返回,新字幕是之前内容的累加。 示例:用户说 您好,查询一下上海天气。,您会依次收到 您好, 您好,查询 您好,查询一下上海天气。 字幕状态:
| 字幕来源:LLM 文本或 TTS 朗读内容(SubtitleMode决定) 返回方式:流式返回,且仅在识别到完整分句后才返回。每个分句都作为一条独立的消息发送,新的分句不包含上一个已结束的分句。 示例:AI 说 天气炎热,气温为 30 摄氏度。,则会依次返回两个独立分句 天气炎热, 气温为 30 摄氏度。。在常规对话中,可通过 paragraph: true 判断当前整句结束。 字幕状态:
|
服务端接收 | 字幕来源:ASR 模块语音识别内容 返回方式:仅在识别到完整分句后才返回。每个分句都作为一条独立的消息发送,新的分句不包含上一个已结束的分句。 示例:用户说 您好,查询一下上海天气。,您将依次收到字幕:您好, 和 查询一下上海天气。 字幕状态:
| 字幕来源:LLM 文本或 TTS 朗读内容(SubtitleMode决定) 返回方式:仅在识别到完整分句后才返回。每个分句都作为一条独立的消息发送,新的分句不包含上一个已结束的分句。 示例: AI 说 天气炎热,气温为 30 摄氏度。,您会依次收到分句:天气炎热,和气温为 30 摄氏度。 字幕状态:
|