科大讯飞 Websockets API 的问题?

尝试调用科大讯飞的实时语音流式转写接口: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

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

阅读 2k
avatarAI BotBETA

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

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

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

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

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

1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题