讯飞语音-语音听写
概述
讯飞语音听写(iFLYTEK Speech-to-Text)是科大讯飞提供的高精度语音识别(ASR)服务,能够将用户的实时语音快速、准确地转换为文字,适用于会议记录、笔记整理、字幕生成等多种场景。- 语音听写流式接口,用于1分钟内的即时语音转文字技术,支持实时返回识别结果,达到一边上传音频一边获得识别文本的效果。会话时长最多持续60s,或者超过10s未发送数据,服务端会主动断开连接。
 - 该语音能力是通过
 Websocket API的方式给开发者提供一个通用的接口。Websocket API具备流式传输能力,适用于需要流式数据传输的AI服务场景,比如边说话边识别。- 支持多语种和方言、个性化热词、动态修正。
 - 动态修正:
 
- 未开启动态修正:实时返回识别结果,每次返回的结果都是对之前结果的追加。
 - 开启动态修正:实时返回识别结果,每次返回的结果有可能是对之前结果的追加,也有可能是要替换之前某次返回的结果(即修正)。
 - 使用动态修正功能直接设置相应参数即可使用,参数设置方法:
 dwa=wpgs;- 动态修正功能仅中文支持。
 - 语音听写 WebAPI 默认支持50路并发,SDK不支持并发。
 - 常见问题:常见问题
 
在线体验
官网:实时语音听写
官方Demo 说明
- 讯飞语音听写(iFlytek Speech-to-Text)提供了多个不同版本的 Demo,以满足不同开发环境和使用场景的需求。
 JAVA-SDK-DEMO调用参考教程:AI大学堂- 下载地址:调用示例
 
两种调用方式
- 讯飞语音听写提供了两种接口调用方式:基于 WebSocket 的 Web API 接口、各个平台的 SDK。
 
WebAPI SDK 平台兼容性 ✅ 高(前端、后端都能用) ❌ 限制较多 鉴权签名 需要手动实现 自动封装 音频采集 自行实现 内建 是否离线支持 ❌ 否 ✅ 部分平台支持 上手难度 中(需掌握音频编码等) 低(只需调用) 性能依赖 云端 设备性能、网络或本地模型 
WebAPI 方式
- 优点
 
- 跨平台:只要能发 HTTP/WebSocket 请求就能用,适合前端、Node.js、小程序等。
 - 轻量灵活:无需集成 SDK,不受平台约束。
 - 云端识别:不依赖本地计算,效果与云端模型保持一致。
 
- 缺点
 
- 需要处理鉴权签名(HMAC),通常放到后端实现。
 - 音频处理需自行实现(浏览器中使用
 MediaRecorder/AudioContext等)。
- 常见使用场景
 
- 前端 Web 项目(如浏览器语音输入、会议字幕)
 - 微信小程序
 - 低资源客户端或跨平台需求
 
SDK 方式
- 优点
 
- 本地封装更完整:提供内建录音、音频处理、状态管理等功能。
 - 可能支持离线识别(如 Android 端 SDK 支持本地模型)。
 - 鉴权和签名由 SDK 管理,开发更方便。
 
- 缺点
 
- 平台相关性强:要根据平台(Android、Windows、Linux)分别引入 SDK。
 - 不适用于纯 Web 页面。
 
- 常见使用场景
 
- 移动端 App(Android、iOS)
 - 本地桌面应用(Windows、Linux)
 - 有更强控制需求、或需要离线语音识别的业务
 
跑通 官方Demo
JS 语言Demo
直接在Web客户端使用API密钥调用讯飞语音听写服务存在严重的安全风险。密钥一旦暴露,可能导致恶意滥用和费用损失。所以,一般在服务端生成鉴权的 URL,然后返回给前端。但是,即使让后端生成URL,也会有一定的安全隐患。因为URL可以复用,如果签名的有效时间比较长,比如几分钟甚至几小时,那这段时间内这个 URL 可以被他人复用,实现“重放攻击”。即使你设置了时间戳签名,如果攻击者能快速抓到当前请求,也能立即转发或用在其他客户端中。所以,一般不建议前端直接连接讯飞的语音服务接口。
下载Demo
下载地址:https://www.xfyun.cn/doc/asr/voicedictation/API.html#%E8%B0%83%E7%94%A8%E7%A4%BA%E4%BE%8B
获取 API 密钥
配置密钥
在
example/iat/index.html中配置API 密钥
运行测试
- ⚠️ 由于浏览器安全限制,直接打开 index.html 可能无法录音。需通过以下方式运行:
 
- 方法1:使用 VS Code 的 Live Server 插件
 - 方法2:本地 HTTP 服务
 - VS Code 安装
 Live Server插件。- 使用
 Live Server打开example/iat/index.html。- 点击 「开始录音」 按钮(浏览器会请求麦克风权限,需允许)
 
JAVA 语言Demo
在生产环境中,强烈建议由后端统一调用讯飞的 WebAPI 接口,而不是让前端直接访问讯飞服务。
下载Demo
下载地址:https://www.xfyun.cn/doc/asr/voicedictation/API.html#%E8%B0%83%E7%94%A8%E7%A4%BA%E4%BE%8B
官方文档:https://www.xfyun.cn/doc/asr/voicedictation/API.html#%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E
获取 API 密钥
配置密钥
在
WebIATWS类中配置静态常量
运行测试
- ⚠️ 启动程序,可能出现下面的错误
 
我们需要替换一下lib目录下的JAR包
JAR包下载地址:okhttp
JAR包下载地址:okio
🤔 好像直接换
okio-1.17.5.jar就可以了
- ⚠️ 再次运行程序,可能会出现以下错误
 
因为在
WebIATWS类中,文件路径使用了 Windows 风格的反斜杠路径,为了提高跨平台兼容性,建议将路径改为使用正斜杠或使用 Java 的File.separator来构建路径。
- ✅ 重新运行程序,进行测试
 
JAVA-SDK-DEMO
下载Demo
下载地址:https://github.com/iFLYTEK-OP/websdk-java-demo
官方文档:https://www.xfyun.cn/doc/asr/voicedictation/Java-SDK.html
获取 API 密钥
配置密钥
参考 README.md,在
src/main/resources/test.properties下进行配置
运行测试
运行
IatClientApp类的main方法可以修改main方法,切换到方式二,处理麦克风输入的音频数据
注意事项
WebSocket注意事项
- 服务端支持的
 websocket-version为13,请确保客户端使用的框架支持该版本。- 服务端返回的所有的帧类型均为TextMessage,对应于原生websocket的协议帧中opcode=1,请确保客户端解析到的帧类型一定为该类型,如果不是,请尝试升级客户端框架版本,或者更换技术框架。
 - 如果出现分帧问题,即一个json数据包分多帧返回给了客户端,导致客户端解析json失败。出现这种问题大部分情况是客户端的框架对websocket协议解析存在问题,如果出现请先尝试升级框架版本,或者更换技术框架。
 - 客户端会话结束后如果需要关闭连接,尽量保证传给服务端的错误码为websocket错误码1000(如果客户端框架没有提供关闭时传错误码的接口。则无需关注本条)。
 
白名单
- 默认关闭IP白名单,即该服务不限制调用IP。
 - 若打开IP白名单,则服务端会检查调用方IP是否在讯飞开放平台配置的IP白名单中,对于没有配置到白名单中的IP发来的请求,服务端会拒绝服务。
 - IP白名单需设置为外网IP,请勿设置局域网IP。
 - 不同Appid的不同服务都需要分别设置IP白名单。
 - 如果握手阶段返回
 {"message":"Your IP address is not allowed"},则表示由于IP白名单配置有误或还未生效,服务端拒绝服务。
调用流程说明
- 建立WebSocket连接的时候,请求地址需要携带接口鉴权的必要参数。通过接口密钥基于
 hmac-sha256计算签名,向服务器端发送WebSocket协议握手请求。- 握手成功后,客户端通过WebSocket连接同时上传和接收数据。数据上传完毕,客户端需要上传一次数据结束标识。
 - 接收到服务器端的结果全部返回标识后断开WebSocket连接。
 
简单实现
以下是一个前端直接调用讯飞语音 API 的完整示例。这个示例包括了语音的采集、与讯飞 WebAPI 建立 WebSocket 连接,并实时显示语音识别的结果。
 
















