🤖 给 AI 的参考
查看 .md 原文
这是 Hearo(听见)的《实时字幕与翻译》文档,可作为开发参考。文档链接:https://hearo.apps.aisp24.com/docs/captions.md

实时字幕与翻译

每路独立 ASR 的实时字幕,可选翻译成多种语言;无需邀请 AI,单人也可用

字幕由每条连接(每个人)各自的 ASR 产生。在边缘对该参与者的独立音频流做识别,字幕归属由连接身份确定(一条流 = 一个人),并可按需翻译成多种语言下发。它和「邀请 AI」相互独立:开启字幕不需要 AI,房间里只有你一个人也能边说边出字幕。

💡 语言元数据:连接时用 ?lang= 声明你说的语言(如 zh-CN / en)。混合语言房间里,每个人各自声明,字幕引擎按当前说话人的语言识别。

开启 / 关闭

进房后随时通过控制消息开关(WebSocket 文本帧,或 WebRTC(实验)的 control 数据通道)。targets 是要翻译成的语言列表(逗号分隔);不填则只出原文。

json
// 开启:对我说的话做识别,并翻译成这些语言
{ "type": "caption_start", "lang": "zh-CN", "targets": "en,ja,fr" }

// 关闭
{ "type": "caption_stop" }

字幕事件

字幕通过房间广播给其他参与者,也回显给说话人自己。每条按 id 合并:partial 先流式出原文,整句结束(is_final:true)定稿,随后翻译作为同 id 的更新补入。

字段类型说明
typestring"caption"
idnumber同一句话的 partial / final / 译文更新共享此 id
speakerstring说话人名字(进房 name)
source_langstring源语言
textstring原文(partial 时为当前片段)
translationsobject{ 语言: 译文 },final 翻译完成后补入
is_finalboolfalse=实时片段;true=整句已定稿
json
// 边说边出(原文,实时)
{ "type":"caption","id":7,"speaker":"小明","source_lang":"zh-CN","text":"今天天气","translations":{},"is_final":false }
// 整句定稿(先发原文,AI 立即据此响应)
{ "type":"caption","id":7,"speaker":"小明","source_lang":"zh-CN","text":"今天天气不错。","translations":{},"is_final":true }
// 翻译补入(同 id 更新)
{ "type":"caption","id":7,"speaker":"小明","source_lang":"zh-CN","text":"今天天气不错。","translations":{"en":"The weather is nice today."},"is_final":true }

显示模式

客户端自行选择展示:原文 / 译文(取 translations[你选的语言])/ 双语。演示页的「开启实时字幕」面板即是如此。

实现要点

网关对每路音频在 TEN 服务端 VAD 门控下做 ASR:静音时不耗 ASR;检测到语音起始即给出信号。TEN 运行在平台私有 VAD 服务中,不向浏览器暴露。翻译按句(标点断句)调用一次 LLM,原文不受其延迟影响。

与 AI 的配合

房间里有字幕时,AI 智能体优先采用字幕而不再自己跑一遍 ASR:有人开口(partial)即打断 AI、有人说完(final 原文)AI 立刻应答——既省一次识别,归属也更准。详见 AI 智能体