mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-25 16:43:55 +08:00
修复设备播放音频时打断后使用唤醒词时流控器未重置造成的死锁
This commit is contained in:
@@ -133,12 +133,28 @@ def _get_or_create_rate_controller(conn, frame_duration, is_single_packet):
|
|||||||
Returns:
|
Returns:
|
||||||
(rate_controller, flow_control)
|
(rate_controller, flow_control)
|
||||||
"""
|
"""
|
||||||
# 判断是否需要重置:单包模式且 sentence_id 变化,或者控制器不存在
|
# 检查是否需要重置控制器
|
||||||
need_reset = (
|
need_reset = False
|
||||||
is_single_packet
|
|
||||||
and getattr(conn, "audio_flow_control", {}).get("sentence_id")
|
if not hasattr(conn, "audio_rate_controller"):
|
||||||
!= conn.sentence_id
|
# 控制器不存在,需要创建
|
||||||
) or not hasattr(conn, "audio_rate_controller")
|
need_reset = True
|
||||||
|
else:
|
||||||
|
rate_controller = conn.audio_rate_controller
|
||||||
|
|
||||||
|
# 后台发送任务已停止, 则需要重置
|
||||||
|
if (
|
||||||
|
not rate_controller.pending_send_task
|
||||||
|
or rate_controller.pending_send_task.done()
|
||||||
|
):
|
||||||
|
need_reset = True
|
||||||
|
# 流式单包模式下, sentence_id 变化, 需要重置
|
||||||
|
elif (
|
||||||
|
is_single_packet
|
||||||
|
and getattr(conn, "audio_flow_control", {}).get("sentence_id")
|
||||||
|
!= conn.sentence_id
|
||||||
|
):
|
||||||
|
need_reset = True
|
||||||
|
|
||||||
if need_reset:
|
if need_reset:
|
||||||
# 创建或获取 rate_controller
|
# 创建或获取 rate_controller
|
||||||
|
|||||||
Reference in New Issue
Block a user