You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web Speech API recognition监听器默认超时如何配置

Web Speech API长时转录超时问题解决方案

根因说明

Web Speech API的W3C规范本身没有定义识别会话的默认超时时长,实际观测到的2分钟左右自动触发no-speech、end事件终止识别的现象,是Chromium内核浏览器(Chrome、Edge等)的底层硬编码限制:浏览器会在单次识别会话运行到固定阈值、且未检测到持续有效语音输入时主动断开会话,该阈值没有对外暴露配置入口,无法通过API参数直接修改。

直接在onend中无脑重启的方案确实存在缺陷,会违背麦克风静音时停止识别的业务逻辑,可以通过状态标记的方式解决这个矛盾。

具体实现方案

  • 维护独立的识别运行状态标记,和识别实例本身的运行状态解耦:
    1. 新增布尔类型变量isRecognitionExpectedToRun,标记当前业务层面是否需要保持识别运行。当用户取消麦克风静音、需要开启转录时,将该值设为true并启动识别;当用户主动静音麦克风、需要停止转录时,将该值设为false并主动停止识别。
    2. 在识别实例的onend、onerror回调中,不直接执行重启逻辑,先判断上述状态标记:仅当标记为true时,说明是浏览器超时/异常导致的断连,此时再执行重启;标记为false时说明是主动停止,不做任何操作。
  • 参考实现代码:
// 业务层维护的识别运行状态标记,默认关闭
let isRecognitionExpectedToRun = false;
const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
recognition.continuous = true;
recognition.interimResults = true;
recognition.lang = 'zh-CN'; // 按需设置识别语言

// 麦克风开启时调用,主动启动转录
function startTranscription() {
  if (isRecognitionExpectedToRun) return;
  isRecognitionExpectedToRun = true;
  recognition.start();
}

// 麦克风静音时调用,主动停止转录
function stopTranscription() {
  isRecognitionExpectedToRun = false;
  recognition.stop();
}

// 识别会话结束回调
recognition.onend = () => {
  // 仅业务层要求运行时才自动重启,加100ms延迟避免触发浏览器调用频率限制
  if (isRecognitionExpectedToRun) {
    setTimeout(() => recognition.start(), 100);
  }
};

// 识别错误回调
recognition.onerror = (e) => {
  // no-speech、网络闪断属于非致命错误,等待onend触发走重启逻辑即可
  if (['no-speech', 'network', 'aborted'].includes(e.error)) return;
  // 其余致命错误按需加日志或用户提示
  console.error('语音识别异常:', e.error);
};

// 识别结果回调,自行维护结果数组做长文本拼接
const transcriptionResult = [];
recognition.onresult = (event) => {
  const result = event.results[event.resultIndex];
  if (result.isFinal) {
    transcriptionResult.push(result[0].transcript);
  }
};

注意事项

  • 重启时增加100~200ms的延迟,不要在onend回调中同步调用start(),否则会触发浏览器「识别实例已在运行」的报错。
  • 不要依赖no-speech事件判断麦克风静音状态,该事件触发时机完全由浏览器底层逻辑控制,和实际麦克风输入状态无绑定关系,麦克风状态要通过音轨enabled属性、用户点击静音按钮的交互动作自行维护。
  • 长通话场景下识别重启不会丢失已生成的转录内容,只要自行维护结果数组存储每次onresult返回的最终结果,即可实现30分钟及以上时长的连续转录。

内容的提问来源于stack exchange,提问作者adyry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 15:39:15