小编rms*_*res的帖子

FastAPI 中音频流的 Websockets 桥接器

客观的

我的目标是使用音频流。从逻辑上讲,这是我的目标:

  1. 音频流来自 WebSocket A(FastAPI端点)
  2. 音频流被桥接到不同的 WebSocket,B,它将返回一个 JSON(Rev-ai的 WebSocket)
  3. Json 结果通过 WebSocket A 实时发回。因此,虽然音频流仍在传入。

可能的解决方案

为了解决这个问题,我有很多想法,但最终我一直试图桥WebSocket A接到WebSocket B. 到目前为止,我的尝试涉及一个ConnectionManager类,其中包含一个Queue.queue. 音频流的块被添加到这个队列中,这样我们就不会直接从WebSocket A.

ConnectionManager还包含一个发生器方法从队列中得到的所有值。

我的 FastAPI 实现websocket A是这样消耗的:

@app.websocket("/ws")
async def predict_feature(websocket: WebSocket):
    await manager.connect(websocket)
    try:
        while True:
            chunk = await websocket.receive_bytes()
            manager.add_to_buffer(chunk)
    except KeyboardInterrupt:
        manager.disconnect()
Run Code Online (Sandbox Code Playgroud)

在此摄取的同时,我希望有一个任务可以将我们的音频流桥接到WebSocket B,并将获得的值发送到WebSocket A。可以通过上述generator方法消耗音频流。

由于 WebSocket B 消费消息的方式,生成器方法是必要的,如 Rev-ai 的示例所示: …

python websocket python-asyncio starlette fastapi

3
推荐指数
1
解决办法
1768
查看次数

标签 统计

fastapi ×1

python ×1

python-asyncio ×1

starlette ×1

websocket ×1