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

如何配置SFSpeechRecognizer:在线用在线识别,离线fallback到设备端识别?

实现联网优先、断网自动 fallback 到离线语音识别

苹果原生的SFSpeechRecognizer和SFSpeechAudioBufferRecognitionRequest并没有提供开箱即用的“联网自动用在线识别、断网自动切离线”的配置,需要自己实现逻辑来完成这个需求,具体步骤如下:

  • 监听网络状态:用NWPathMonitor实时检测设备的联网状态,判断当前在线/离线状态。
  • 动态设置识别请求参数:
    • 联网状态下,创建SFSpeechAudioBufferRecognitionRequest时,将requiresOnDeviceRecognition设为false,使用在线识别;
    • 离线状态下,将该属性设为true,切换到设备端识别。
  • 处理识别中的网络切换:如果正在进行在线识别时突然断网,立即取消当前识别请求,重新创建开启离线识别的请求,继续音频流的识别。
  • 提前准备离线资源:确保设备已下载对应语言的离线识别包——先通过SFSpeechRecognizer.supportsOnDeviceRecognition确认设备支持离线识别,之后系统会自动触发对应语言包的下载(需用户同意),也可通过系统设置手动提前下载。

简单代码片段示例:

import Network

// 初始化网络监视器
let monitor = NWPathMonitor()
monitor.pathUpdateHandler = { path in
    DispatchQueue.main.async {
        let useOnDeviceRecognition = !path.status.isConnected
        // 后续创建识别请求时,根据这个变量设置requiresOnDeviceRecognition
    }
}
let queue = DispatchQueue(label: "NetworkMonitor")
monitor.start(queue: queue)

注意:如果设备不支持离线识别(supportsOnDeviceRecognition为false),断网时无法进行识别,需要提前做兼容处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:37:42