当前位置: 首页 > 知识库问答 >
问题:

python - 科大讯飞 Websockets API 的问题?

姜嘉荣
2023-09-27

尝试调用科大讯飞的实时语音流式转写接口:https://www.xfyun.cn/doc/asr/voicedictation/API.html

xunfei = XunFei(APPID='...', APISecret='...', AudioFile=r'test.pcm')url = xunfei.create_url()async def hello():    async with websockets.connect(url) as websocket:        cc = xunfei.read_audio()        print("数据:" + json.dumps(cc))        await websocket.send(str(json.dumps(cc)))        while True:            message = await websocket.recv()            print(f"收到消息: {json.loads(message)}")if __name__ == "__main__":    asyncio.run(hello())

但老是报错

Traceback (most recent call last):  File "/var/www/QBA/config/voice.py", line 135, in <module>    asyncio.run(hello())  File "/usr/local/lib/python3.11/asyncio/runners.py", line 190, in run    return runner.run(main)           ^^^^^^^^^^^^^^^^  File "/usr/local/lib/python3.11/asyncio/runners.py", line 118, in run    return self._loop.run_until_complete(task)           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  File "/usr/local/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete    return future.result()           ^^^^^^^^^^^^^^^  File "/var/www/QBA/config/voice.py", line 131, in hello    message = await websocket.recv()              ^^^^^^^^^^^^^^^^^^^^^^  File "/usr/local/lib/python3.11/site-packages/websockets/legacy/protocol.py", line 568, in recv    await self.ensure_open()  File "/usr/local/lib/python3.11/site-packages/websockets/legacy/protocol.py", line 944, in ensure_open    raise self.connection_closed_exc()websockets.exceptions.ConnectionClosedOK: received 1000 (OK) Websocket closed!,sid=iat000dc91f@dx18ad01d4a38a11f802!reason=server read msg timeout; then sent 1000 (OK) Websocket closed!,sid=iat000dc91f@dx18ad01d4a38a11f802!reason=server read msg timeout

不懂这是为什么,但是我发个普通的消息就会立马得到反馈

共有2个答案

齐迪
2023-09-27

是我自己的问题,在发送数据的时候必须有 3 种数据包:012 分别代表起始帧、中间、结束、否则就会没响应直接结束

孙德本
2023-09-27

从错误信息来看,问题似乎是WebSocket连接在接收消息时被服务器关闭了,并且给出了原因:“server read msg timeout”,即服务器读取消息超时。这可能是由于服务器没有在预期的时间内接收到你的客户端发送的下一个消息。

在科大讯飞的实时语音流式转写接口的API文档中,并没有明确说明API对于WebSocket连接的消息频率有何限制。但是,一些WebSocket服务器可能会有对于接收消息的频率或者间隔的限制。

在给出具体的解决方案之前,我们需要了解更多关于这个API的具体细节,例如API是否需要特定的消息格式,API对消息频率有什么限制等等。以下是一些可能的解决方案:

  1. 增加消息之间的延迟:如果API没有明确限制消息的发送频率,你可以尝试在发送每个消息之后添加一个小的延迟,例如0.1秒,以避免过快地发送消息。
  2. 检查API文档:再次检查科大讯飞的实时语音流式转写接口的API文档,看看是否有任何关于消息发送频率或者间隔的限制。
  3. 检查服务器状态:如果可能的话,尝试联系科大讯飞的技术支持,看看他们是否有关于这个问题的更多信息。
  4. 使用不同的库:如果你使用的是websockets库,尝试切换到另一个库,例如websocket库,看看问题是否还存在。

请注意,以上的建议只是基于你提供的信息的一些可能的解决方案。具体的解决方案可能需要你进一步了解API的具体细节。

 类似资料:
  • 一面:自我介绍,让选择介绍其中一篇论文,主要会围绕论文展开一些问题以及场景分析,后面也有一些八股(Pytorch的广播机制相关的问题、Beam search的介绍,其他的记不太清了)感觉这些回答的没那么好。 二面:自我介绍,论文内容详细介绍,感觉面试官对于motivation和contribution比较在意,准备的也并没有那么好。 三面:自我介绍,论文内容的介绍,难点创新点等。其余的问题比较综合

  • 一面 30min 问nlp基础知识与大模型方面相关的 二面20min 闲聊 hr面30min 问工作地点和意向

  • 讯飞的特色,问的都是基础,更多是看自己能往外拓展多少,20min 自我介绍 问项目 vue2和vue3的区别(????我投的是后端岗) vue3用过哪些组合式api java三大特性 java的基础类型 String类可以被继承吗 String、StringBuilder、StringBuffer 数据库有哪些种类 关系型数据库相对于非关系型数据的优缺点 mysql表有哪些种类 mysql有哪些字

  • 感觉面试很奇怪,但是两个面试官人都很好 9.9一面 自我介绍 几个类似三次握手这样简单的八股 Java的一些简单八股,springboot的优点(我就说了自动装配),问我中间件有没有用过,我说没有,就没有接着问了。 怎么学习新技术的? 最近有没有接触新的事物,有没有新事物让自己觉得很有成就感。(然后和面试官聊了十几分钟我这半年看足球的情况) 面试官说我有点紧张,所以想让我稍微放松点,然后就开始问我

  • 科大讯飞9.1(一面,20min) 自我介绍 项目规模,主要负责啥,有没有写设计文档,怎么进行接口设计? 对前端了解吗?有自己写过代码吗? 对JVM的理解(对堆的过程进行扩展) 项目里有使用多线程并发操作吗? 线程池的过程 mybatis有没有自己做过扩展 给我讲一下mysql 对数据库有没有做过优化操作? 问我rabittmq和kafaka有什么区别 一般遇到问题怎么解决? 最近有没有学什么新技

  • 更新 10.11收到意向 本来以为就两面,结果前两天hr通知还有技术主管 上来自我介绍 哪里人 意向城市 介绍项目 针对项目提问一些问题 八股………………………………………… redis会用吗(不会) mysql隔离级别 mysql索引怎么加 mysql存储引擎 线程池说一下 什么时候使用线程池 死锁条件,怎么解决 垃圾回收算法 内存泄漏和内存溢出的区别 spring的特点 ioc aop具体讲一