This commit is contained in:
田岩
2025-12-04 17:42:00 +08:00
parent 6065e73d5b
commit d97aaa770d
43 changed files with 691 additions and 210 deletions
+1 -1
View File
@@ -3,7 +3,7 @@ git 地址:https://github.com/modelscope/FunASR/blob/main/runtime/docs/SDK_tutor
docker pull registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.12 docker pull registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.12
docker exec -it 5808d9cf479122f0aaa59d5500148debfc80c4274159b96e2426a2b90b2976c8 bash docker exec -it 367797c69268b2c68f1443aa0f8dcb5d5ac01355dbdd06fa6e18758415506c8f bash
cd FunASR/runtime cd FunASR/runtime
nohup bash run_server_2pass.sh \ nohup bash run_server_2pass.sh \
@@ -231,6 +231,8 @@ class ByteDanceTTSSocketClient:
"format": request.encoding, "format": request.encoding,
"sample_rate": DEFAULT_SAMPLE_RATE, "sample_rate": DEFAULT_SAMPLE_RATE,
"enable_timestamp": True, "enable_timestamp": True,
"bit_rate":256000,
"speech_rate":20
}, },
"additions": json.dumps({"disable_markdown_filter": False}), "additions": json.dumps({"disable_markdown_filter": False}),
"speed": request.speed, # 语速参数(需服务端支持) "speed": request.speed, # 语速参数(需服务端支持)
+282
View File
@@ -2839,3 +2839,285 @@
2025-12-04 02:09:16.678 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 1537542304096 发送协程已退出 2025-12-04 02:09:16.678 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 1537542304096 发送协程已退出
2025-12-04 02:09:16.679 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 1537542304096 注销成功,当前活跃连接数:0 2025-12-04 02:09:16.679 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 1537542304096 注销成功,当前活跃连接数:0
2025-12-04 02:09:16.680 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 1537542304096 连接清理完成 2025-12-04 02:09:16.680 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 1537542304096 连接清理完成
2025-12-04 08:31:06.041 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2202228893552 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 08:31:06.068 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2202228893552
2025-12-04 08:31:06.069 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2202228893552 注册成功,当前活跃连接数:1
2025-12-04 08:31:06.834 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 2202228893552 连接就绪
2025-12-04 08:31:06.835 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 2202228893552 发送协程启动
2025-12-04 08:32:24.727 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 2202228893552 主动断开连接
2025-12-04 08:32:24.727 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2202228893552 开始清理连接
2025-12-04 08:32:24.728 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 2202228893552 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 08:32:24.728 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 2202228893552 发送协程已退出
2025-12-04 08:32:24.728 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2202228893552 注销成功,当前活跃连接数:0
2025-12-04 08:32:24.728 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2202228893552 连接清理完成
2025-12-04 08:53:35.101 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2821746141184 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 08:53:35.118 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2821746141184
2025-12-04 08:53:35.118 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2821746141184 注册成功,当前活跃连接数:1
2025-12-04 08:53:35.291 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2821746437008 已接受,等待身份信息(5秒超时),当前连接数: 1
2025-12-04 08:53:35.435 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 2821746141184 连接就绪
2025-12-04 08:53:35.436 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 2821746141184 发送协程启动
2025-12-04 08:53:35.436 | ERROR | audio_ai_chat.core.websocket_handler:handle_connection:248 - 客户端 2821746141184 处理异常:CONTROL
2025-12-04 08:53:35.437 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2821746141184 开始清理连接
2025-12-04 08:53:35.437 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 2821746141184 发送协程已退出
2025-12-04 08:53:35.438 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2821746141184 注销成功,当前活跃连接数:0
2025-12-04 08:53:35.438 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2821746141184 连接清理完成
2025-12-04 08:53:37.514 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2821746427984 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 08:53:38.099 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2821746887072 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 08:53:40.286 | WARNING | audio_ai_chat.core.websocket_handler:connect:143 - 连接 2821746437008 身份校验超时
2025-12-04 08:53:40.287 | ERROR | audio_ai_chat.core.websocket_handler:handle_connection:248 - 客户端 2821746437008 处理异常:连接 2821746437008 身份校验超时
2025-12-04 08:53:40.287 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2821746437008 开始清理连接
2025-12-04 08:53:40.287 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2821746437008 连接清理完成
2025-12-04 08:53:42.510 | WARNING | audio_ai_chat.core.websocket_handler:connect:143 - 连接 2821746427984 身份校验超时
2025-12-04 08:53:42.511 | ERROR | audio_ai_chat.core.websocket_handler:handle_connection:248 - 客户端 2821746427984 处理异常:连接 2821746427984 身份校验超时
2025-12-04 08:53:42.511 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2821746427984 开始清理连接
2025-12-04 08:53:42.511 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2821746427984 连接清理完成
2025-12-04 08:53:43.122 | WARNING | audio_ai_chat.core.websocket_handler:connect:143 - 连接 2821746887072 身份校验超时
2025-12-04 08:53:43.122 | ERROR | audio_ai_chat.core.websocket_handler:handle_connection:248 - 客户端 2821746887072 处理异常:连接 2821746887072 身份校验超时
2025-12-04 08:53:43.123 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2821746887072 开始清理连接
2025-12-04 08:53:43.123 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2821746887072 连接清理完成
2025-12-04 08:53:46.628 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2821746428128 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 08:53:46.638 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2821746428128
2025-12-04 08:53:46.638 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2821746428128 注册成功,当前活跃连接数:1
2025-12-04 08:53:46.813 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 2821746428128 连接就绪
2025-12-04 08:53:46.813 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 2821746428128 发送协程启动
2025-12-04 08:54:40.876 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 2821746428128 主动断开连接
2025-12-04 08:54:40.876 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2821746428128 开始清理连接
2025-12-04 08:54:40.877 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 2821746428128 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 08:54:40.877 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 2821746428128 发送协程已退出
2025-12-04 08:54:40.877 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2821746428128 注销成功,当前活跃连接数:0
2025-12-04 08:54:40.878 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2821746428128 连接清理完成
2025-12-04 09:23:35.454 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 1566411270144 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 09:23:35.485 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 1566411270144
2025-12-04 09:23:35.485 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 1566411270144 注册成功,当前活跃连接数:1
2025-12-04 09:23:36.147 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 1566411270144 连接就绪
2025-12-04 09:23:36.148 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 1566411270144 发送协程启动
2025-12-04 09:24:20.095 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 1566411270144 主动断开连接
2025-12-04 09:24:20.095 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 1566411270144 开始清理连接
2025-12-04 09:24:20.096 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 1566411270144 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 09:24:20.096 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 1566411270144 发送协程已退出
2025-12-04 09:24:20.096 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 1566411270144 注销成功,当前活跃连接数:0
2025-12-04 09:24:20.097 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 1566411270144 连接清理完成
2025-12-04 09:28:44.990 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 1566411568080 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 09:28:45.192 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 1566411568080
2025-12-04 09:28:45.192 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 1566411568080 注册成功,当前活跃连接数:1
2025-12-04 09:28:46.073 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 1566411568080 连接就绪
2025-12-04 09:28:46.074 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 1566411568080 发送协程启动
2025-12-04 09:28:58.518 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 1566411568080 主动断开连接
2025-12-04 09:28:58.518 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 1566411568080 开始清理连接
2025-12-04 09:28:58.519 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 1566411568080 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 09:28:58.519 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 1566411568080 发送协程已退出
2025-12-04 09:28:58.520 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 1566411568080 注销成功,当前活跃连接数:0
2025-12-04 09:28:58.520 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 1566411568080 连接清理完成
2025-12-04 09:33:54.199 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 1566412083200 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 09:33:54.217 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 1566412083200
2025-12-04 09:33:54.218 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 1566412083200 注册成功,当前活跃连接数:1
2025-12-04 09:33:54.218 | ERROR | audio_ai_chat.core.websocket_handler:handle_connection:248 - 客户端 1566412083200 处理异常:获取ASR连接失败
2025-12-04 09:33:54.218 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 1566412083200 开始清理连接
2025-12-04 09:33:54.219 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 1566412083200 注销成功,当前活跃连接数:0
2025-12-04 09:33:54.219 | INFO | audio_ai_chat.core.connection:close:316 - 连接上下文已关闭:client_id=1566412083200user_id=1001,对话历史条数=0
2025-12-04 09:33:54.219 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 1566412083200 连接清理完成
2025-12-04 09:36:39.525 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 1566412083152 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 09:36:39.716 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 1566412083152
2025-12-04 09:36:39.749 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 1566412083152 注册成功,当前活跃连接数:1
2025-12-04 09:36:39.750 | ERROR | audio_ai_chat.core.websocket_handler:handle_connection:248 - 客户端 1566412083152 处理异常:获取ASR连接失败
2025-12-04 09:36:39.752 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 1566412083152 开始清理连接
2025-12-04 09:36:39.752 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 1566412083152 注销成功,当前活跃连接数:0
2025-12-04 09:36:39.752 | INFO | audio_ai_chat.core.connection:close:316 - 连接上下文已关闭:client_id=1566412083152user_id=1001,对话历史条数=0
2025-12-04 09:36:39.753 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 1566412083152 连接清理完成
2025-12-04 09:36:59.488 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2691856082944 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 09:36:59.691 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2691856082944
2025-12-04 09:36:59.691 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2691856082944 注册成功,当前活跃连接数:1
2025-12-04 09:37:00.010 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2691856378672 已接受,等待身份信息(5秒超时),当前连接数: 1
2025-12-04 09:37:00.052 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2691856378672
2025-12-04 09:37:00.052 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2691856378672 注册成功,当前活跃连接数:2
2025-12-04 09:37:00.325 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 2691856082944 连接就绪
2025-12-04 09:37:00.326 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 2691856082944 发送协程启动
2025-12-04 09:37:00.381 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 2691856378672 连接就绪
2025-12-04 09:37:00.382 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 2691856378672 发送协程启动
2025-12-04 09:37:25.777 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 2691856378672 主动断开连接
2025-12-04 09:37:25.778 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2691856378672 开始清理连接
2025-12-04 09:37:25.778 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 2691856378672 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 09:37:25.778 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 2691856378672 发送协程已退出
2025-12-04 09:37:25.779 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2691856378672 注销成功,当前活跃连接数:1
2025-12-04 09:37:25.779 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2691856378672 连接清理完成
2025-12-04 09:41:34.538 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 2691856082944 主动断开连接
2025-12-04 09:41:34.538 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2691856082944 开始清理连接
2025-12-04 09:41:34.539 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 2691856082944 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 09:41:34.539 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 2691856082944 发送协程已退出
2025-12-04 09:41:34.540 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2691856082944 注销成功,当前活跃连接数:0
2025-12-04 09:41:34.540 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2691856082944 连接清理完成
2025-12-04 09:41:38.695 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2691856368256 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 09:41:38.713 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2691856368256
2025-12-04 09:41:38.713 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2691856368256 注册成功,当前活跃连接数:1
2025-12-04 09:41:38.713 | ERROR | audio_ai_chat.core.websocket_handler:handle_connection:248 - 客户端 2691856368256 处理异常:获取ASR连接失败
2025-12-04 09:41:38.714 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2691856368256 开始清理连接
2025-12-04 09:41:38.714 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2691856368256 注销成功,当前活跃连接数:0
2025-12-04 09:41:38.714 | INFO | audio_ai_chat.core.connection:close:316 - 连接上下文已关闭:client_id=2691856368256user_id=1001,对话历史条数=0
2025-12-04 09:41:38.715 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2691856368256 连接清理完成
2025-12-04 09:42:03.719 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2674482096128 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 09:42:03.783 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2674482096128
2025-12-04 09:42:03.783 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2674482096128 注册成功,当前活跃连接数:1
2025-12-04 09:42:04.533 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 2674482096128 连接就绪
2025-12-04 09:42:04.534 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 2674482096128 发送协程启动
2025-12-04 09:42:21.083 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 2674482096128 主动断开连接
2025-12-04 09:42:21.083 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2674482096128 开始清理连接
2025-12-04 09:42:21.084 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 2674482096128 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 09:42:21.084 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 2674482096128 发送协程已退出
2025-12-04 09:42:21.084 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2674482096128 注销成功,当前活跃连接数:0
2025-12-04 09:42:21.085 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2674482096128 连接清理完成
2025-12-04 09:45:15.614 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2674482394928 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 09:45:15.791 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2674482394928
2025-12-04 09:45:15.791 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2674482394928 注册成功,当前活跃连接数:1
2025-12-04 09:45:16.339 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 2674482394928 连接就绪
2025-12-04 09:45:16.339 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 2674482394928 发送协程启动
2025-12-04 09:45:39.432 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 2674482394928 主动断开连接
2025-12-04 09:45:39.433 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2674482394928 开始清理连接
2025-12-04 09:45:39.434 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 2674482394928 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 09:45:39.434 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 2674482394928 发送协程已退出
2025-12-04 09:45:39.434 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2674482394928 注销成功,当前活跃连接数:0
2025-12-04 09:45:39.435 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2674482394928 连接清理完成
2025-12-04 09:47:59.794 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2674482941808 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 09:47:59.814 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2674482941808
2025-12-04 09:47:59.814 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2674482941808 注册成功,当前活跃连接数:1
2025-12-04 09:47:59.815 | ERROR | audio_ai_chat.core.websocket_handler:handle_connection:248 - 客户端 2674482941808 处理异常:获取ASR连接失败
2025-12-04 09:47:59.815 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2674482941808 开始清理连接
2025-12-04 09:47:59.815 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2674482941808 注销成功,当前活跃连接数:0
2025-12-04 09:47:59.815 | INFO | audio_ai_chat.core.connection:close:316 - 连接上下文已关闭:client_id=2674482941808user_id=1001,对话历史条数=0
2025-12-04 09:47:59.816 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2674482941808 连接清理完成
2025-12-04 09:48:30.283 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2674482941904 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 09:48:30.387 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2674482941904
2025-12-04 09:48:30.388 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2674482941904 注册成功,当前活跃连接数:1
2025-12-04 09:48:30.388 | ERROR | audio_ai_chat.core.websocket_handler:handle_connection:248 - 客户端 2674482941904 处理异常:获取ASR连接失败
2025-12-04 09:48:30.389 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2674482941904 开始清理连接
2025-12-04 09:48:30.389 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2674482941904 注销成功,当前活跃连接数:0
2025-12-04 09:48:30.389 | INFO | audio_ai_chat.core.connection:close:316 - 连接上下文已关闭:client_id=2674482941904user_id=1001,对话历史条数=0
2025-12-04 09:48:30.390 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2674482941904 连接清理完成
2025-12-04 09:48:52.611 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2143937895424 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 09:48:52.639 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2143937895424
2025-12-04 09:48:52.639 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2143937895424 注册成功,当前活跃连接数:1
2025-12-04 09:48:53.319 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 2143937895424 连接就绪
2025-12-04 09:48:53.319 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 2143937895424 发送协程启动
2025-12-04 09:49:19.366 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 2143937895424 主动断开连接
2025-12-04 09:49:19.367 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2143937895424 开始清理连接
2025-12-04 09:49:19.367 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 2143937895424 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 09:49:19.368 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 2143937895424 发送协程已退出
2025-12-04 09:49:19.368 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2143937895424 注销成功,当前活跃连接数:0
2025-12-04 09:49:19.369 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2143937895424 连接清理完成
2025-12-04 09:51:02.244 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2143938230400 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 09:51:02.353 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2143938230400
2025-12-04 09:51:02.354 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2143938230400 注册成功,当前活跃连接数:1
2025-12-04 09:51:02.855 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 2143938230400 连接就绪
2025-12-04 09:51:02.856 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 2143938230400 发送协程启动
2025-12-04 09:51:20.228 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 2143938230400 主动断开连接
2025-12-04 09:51:20.228 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2143938230400 开始清理连接
2025-12-04 09:51:20.229 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 2143938230400 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 09:51:20.229 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 2143938230400 发送协程已退出
2025-12-04 09:51:20.230 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2143938230400 注销成功,当前活跃连接数:0
2025-12-04 09:51:20.230 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2143938230400 连接清理完成
2025-12-04 09:51:59.892 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2143938793328 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 09:51:59.922 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2143938793328
2025-12-04 09:51:59.922 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2143938793328 注册成功,当前活跃连接数:1
2025-12-04 09:51:59.923 | ERROR | audio_ai_chat.core.websocket_handler:handle_connection:248 - 客户端 2143938793328 处理异常:获取ASR连接失败
2025-12-04 09:51:59.923 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2143938793328 开始清理连接
2025-12-04 09:51:59.923 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2143938793328 注销成功,当前活跃连接数:0
2025-12-04 09:51:59.924 | INFO | audio_ai_chat.core.connection:close:316 - 连接上下文已关闭:client_id=2143938793328user_id=1001,对话历史条数=0
2025-12-04 09:51:59.924 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2143938793328 连接清理完成
2025-12-04 09:55:49.386 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2463641888864 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 09:55:49.579 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2463641888864
2025-12-04 09:55:49.579 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2463641888864 注册成功,当前活跃连接数:1
2025-12-04 09:55:50.097 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 2463641888864 连接就绪
2025-12-04 09:55:50.098 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 2463641888864 发送协程启动
2025-12-04 09:56:08.586 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 2463641888864 主动断开连接
2025-12-04 09:56:08.586 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2463641888864 开始清理连接
2025-12-04 09:56:08.587 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 2463641888864 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 09:56:08.588 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 2463641888864 发送协程已退出
2025-12-04 09:56:08.588 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2463641888864 注销成功,当前活跃连接数:0
2025-12-04 09:56:08.588 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2463641888864 连接清理完成
2025-12-04 09:56:50.202 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2463642190992 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 09:56:50.264 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2463642190992
2025-12-04 09:56:50.264 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2463642190992 注册成功,当前活跃连接数:1
2025-12-04 09:56:50.835 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 2463642190992 连接就绪
2025-12-04 09:56:50.836 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 2463642190992 发送协程启动
2025-12-04 09:57:11.801 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 2463642190992 主动断开连接
2025-12-04 09:57:11.801 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2463642190992 开始清理连接
2025-12-04 09:57:11.802 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 2463642190992 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 09:57:11.802 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 2463642190992 发送协程已退出
2025-12-04 09:57:11.803 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2463642190992 注销成功,当前活跃连接数:0
2025-12-04 09:57:11.803 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2463642190992 连接清理完成
2025-12-04 10:04:03.057 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2076949754736 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 10:04:03.210 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2076949754736
2025-12-04 10:04:03.210 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2076949754736 注册成功,当前活跃连接数:1
2025-12-04 10:04:03.872 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 2076949754736 连接就绪
2025-12-04 10:04:03.872 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 2076949754736 发送协程启动
2025-12-04 10:04:20.520 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 2076949754736 主动断开连接
2025-12-04 10:04:20.520 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2076949754736 开始清理连接
2025-12-04 10:04:20.521 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 2076949754736 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 10:04:20.522 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 2076949754736 发送协程已退出
2025-12-04 10:04:20.522 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2076949754736 注销成功,当前活跃连接数:0
2025-12-04 10:04:20.523 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2076949754736 连接清理完成
2025-12-04 10:04:37.874 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 1970278115328 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 10:04:38.076 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 1970278115328
2025-12-04 10:04:38.077 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 1970278115328 注册成功,当前活跃连接数:1
2025-12-04 10:04:38.856 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 1970278115328 连接就绪
2025-12-04 10:04:38.856 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 1970278115328 发送协程启动
2025-12-04 10:06:12.127 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 1970278115328 主动断开连接
2025-12-04 10:06:12.127 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 1970278115328 开始清理连接
2025-12-04 10:06:12.127 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 1970278115328 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 10:06:12.128 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 1970278115328 发送协程已退出
2025-12-04 10:06:12.128 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 1970278115328 注销成功,当前活跃连接数:0
2025-12-04 10:06:12.128 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 1970278115328 连接清理完成
2025-12-04 10:06:57.226 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2002946566096 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 10:06:57.250 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2002946566096
2025-12-04 10:06:57.250 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2002946566096 注册成功,当前活跃连接数:1
2025-12-04 10:06:57.953 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 2002946566096 连接就绪
2025-12-04 10:06:57.953 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 2002946566096 发送协程启动
2025-12-04 10:07:24.732 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 2002946566096 主动断开连接
2025-12-04 10:07:24.732 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2002946566096 开始清理连接
2025-12-04 10:07:24.733 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 2002946566096 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 10:07:24.733 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 2002946566096 发送协程已退出
2025-12-04 10:07:24.733 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2002946566096 注销成功,当前活跃连接数:0
2025-12-04 10:07:24.733 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2002946566096 连接清理完成
2025-12-04 10:08:37.900 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2634366068832 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 10:08:38.001 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2634366068832
2025-12-04 10:08:38.001 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2634366068832 注册成功,当前活跃连接数:1
2025-12-04 10:08:38.609 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 2634366068832 连接就绪
2025-12-04 10:08:38.609 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 2634366068832 发送协程启动
2025-12-04 10:10:33.549 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 2634366068832 主动断开连接
2025-12-04 10:10:33.549 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2634366068832 开始清理连接
2025-12-04 10:10:33.550 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 2634366068832 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 10:10:33.550 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 2634366068832 发送协程已退出
2025-12-04 10:10:33.550 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2634366068832 注销成功,当前活跃连接数:0
2025-12-04 10:10:33.550 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2634366068832 连接清理完成
2025-12-04 10:14:31.284 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 1918299616976 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 10:14:31.488 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 1918299616976
2025-12-04 10:14:31.488 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 1918299616976 注册成功,当前活跃连接数:1
2025-12-04 10:14:32.210 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 1918299616976 连接就绪
2025-12-04 10:14:32.210 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 1918299616976 发送协程启动
2025-12-04 10:14:56.399 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 1918299616976 主动断开连接
2025-12-04 10:14:56.400 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 1918299616976 开始清理连接
2025-12-04 10:14:56.401 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 1918299616976 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 10:14:56.401 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 1918299616976 发送协程已退出
2025-12-04 10:14:56.401 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 1918299616976 注销成功,当前活跃连接数:0
2025-12-04 10:14:56.402 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 1918299616976 连接清理完成
2025-12-04 10:15:18.544 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 1682518255616 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 10:15:18.634 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 1682518255616
2025-12-04 10:15:18.634 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 1682518255616 注册成功,当前活跃连接数:1
2025-12-04 10:15:19.377 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 1682518255616 连接就绪
2025-12-04 10:15:19.377 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 1682518255616 发送协程启动
2025-12-04 10:15:29.340 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 1682518255616 主动断开连接
2025-12-04 10:15:29.341 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 1682518255616 开始清理连接
2025-12-04 10:15:29.342 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 1682518255616 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 10:15:29.342 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 1682518255616 发送协程已退出
2025-12-04 10:15:29.342 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 1682518255616 注销成功,当前活跃连接数:0
2025-12-04 10:15:29.343 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 1682518255616 连接清理完成
2025-12-04 10:17:27.213 | INFO | audio_ai_chat.core.websocket_handler:connect:134 - 连接 2156400945104 已接受,等待身份信息(5秒超时),当前连接数: 0
2025-12-04 10:17:27.400 | INFO | audio_ai_chat.core.websocket_handler:connect:188 - 用户 1001(测试用户)身份校验通过(client_id: 2156400945104
2025-12-04 10:17:27.400 | INFO | audio_ai_chat.core.websocket_handler:_register_connection:58 - 客户端 2156400945104 注册成功,当前活跃连接数:1
2025-12-04 10:17:27.995 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:224 - 客户端 2156400945104 连接就绪
2025-12-04 10:17:27.995 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:79 - 客户端 2156400945104 发送协程启动
2025-12-04 10:17:34.742 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:246 - 客户端 2156400945104 主动断开连接
2025-12-04 10:17:34.742 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:252 - 客户端 2156400945104 开始清理连接
2025-12-04 10:17:34.743 | ERROR | audio_ai_chat.core.websocket_handler:_send_worker:127 - 客户端 2156400945104 发送协程异常退出:type object 'WebSocket' has no attribute 'Disconnect'
2025-12-04 10:17:34.743 | INFO | audio_ai_chat.core.websocket_handler:_send_worker:129 - 客户端 2156400945104 发送协程已退出
2025-12-04 10:17:34.743 | INFO | audio_ai_chat.core.websocket_handler:_unregister_connection:68 - 客户端 2156400945104 注销成功,当前活跃连接数:0
2025-12-04 10:17:34.743 | INFO | audio_ai_chat.core.websocket_handler:handle_connection:279 - 客户端 2156400945104 连接清理完成
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,201 @@
/**
* 支持安卓、iOS、H5的pcm格式,
* 如果想支持mp3,需要增加mp3相关解码合并处理等,个人测试效果不太好,所以没有加
*/
export class StreamPlayer {
constructor({
inputSampleRate = 16000,
numChannels = 1,
bitDepth = 16,
littleEndian = true,
pcmType = 'int',
callback = ()=>{}
} = {}) {
// 参数校验
if (![16, 32].includes(bitDepth)) throw new Error('bitDepth 必须是 16 或 32');
if (inputSampleRate <= 0) throw new Error('采样率必须大于 0');
if (!['int', 'float'].includes(pcmType)) throw new Error('pcmType 必须是 int 或 float');
this.audioContext = new(window.AudioContext || window.webkitAudioContext)();
this.inputSampleRate = inputSampleRate;
this.numChannels = numChannels;
this.bitDepth = bitDepth;
this.littleEndian = littleEndian;
this.pcmType = pcmType;
this.audioQueue = [];
this.playbackEndTime = 0;
this.currentSource = null;
this.lastBlockTail = null; // 用于交叉淡入淡出
this.callback = callback;
}
appendChunk(audioData) {
console.log('this.audioQueue', this.audioQueue.length);
this.audioQueue.push(audioData);
this._processQueue();
}
destroy() {
this.audioQueue = [];
this.playbackEndTime = 0;
if (this.currentSource) {
this.currentSource.stop();
this.currentSource = null;
}
if (this.audioContext) {
this.audioContext.close();
this.audioContext = null;
}
}
async _processQueue() {
if(this.audioQueue.length === 0) {
this.callback('ended')
return
}
if (!this.audioContext || this.currentSource) return;
const buffer = this._mergeArrayBuffers(this.audioQueue)
this.audioQueue = []
try {
const audioBuffer = this._convertPCM(buffer);
await this._schedulePlay(audioBuffer);
this._processQueue();
} catch (err) {
console.error('音频处理失败:', err.name, err.message, err.stack);
}
}
_convertPCM(buffer) {
// 1. 数据对齐:确保长度是样本大小的整数倍
const bytesPerSample = this.bitDepth / 8;
const requiredBytes = bytesPerSample * this.numChannels;
const validByteLength = Math.floor(buffer.byteLength / requiredBytes) * requiredBytes;
const validBuffer = buffer.slice(0, validByteLength);
const dataView = new DataView(validBuffer);
const numSamples = validByteLength / requiredBytes;
// 2. 创建音频缓冲区
const audioBuffer = this.audioContext.createBuffer(
this.numChannels,
numSamples,
this.inputSampleRate
);
// 3. 解析PCM数据
for (let ch = 0; ch < this.numChannels; ch++) {
const channelData = audioBuffer.getChannelData(ch);
for (let i = 0; i < numSamples; i++) {
// 计算字节位置(修正后的多声道索引)
const pos = (i * this.numChannels * bytesPerSample) + (ch * bytesPerSample);
let value;
// 根据位深和数据类型解析
if (this.bitDepth === 16) {
value = dataView.getInt16(pos, this.littleEndian) / 32768;
} else {
if (this.pcmType === 'int') {
value = dataView.getInt32(pos, this.littleEndian) / 2147483648;
} else {
value = dataView.getFloat32(pos, this.littleEndian);
}
}
channelData[i] = value;
}
// 4. 消除直流偏移
let sum = 0;
for (let i = 0; i < channelData.length; i++) {
sum += channelData[i];
}
const dcOffset = sum / channelData.length;
for (let i = 0; i < channelData.length; i++) {
channelData[i] -= dcOffset;
}
// 5. 块内淡入淡出(减少边界突变)
const fadeLength = Math.min(100, channelData.length);
for (let i = 0; i < fadeLength; i++) {
channelData[i] *= (i / fadeLength);
}
const startFadeOut = Math.max(0, channelData.length - fadeLength);
for (let i = startFadeOut; i < channelData.length; i++) {
const factor = 1 - (i - startFadeOut) / fadeLength;
channelData[i] *= factor;
}
}
// 6. 块间交叉淡入淡出(解决重音关键点)
const crossfadeLength = 50;
if (this.lastBlockTail && this.lastBlockTail.length === this.numChannels) {
for (let ch = 0; ch < this.numChannels; ch++) {
const channelData = audioBuffer.getChannelData(ch);
const prevTail = this.lastBlockTail[ch];
// 只处理有足够长度交叉的情况
if (prevTail.length >= crossfadeLength && channelData.length >= crossfadeLength) {
for (let i = 0; i < crossfadeLength; i++) {
const prevWeight = (crossfadeLength - i) / crossfadeLength;
const currWeight = i / crossfadeLength;
channelData[i] = channelData[i] * currWeight + prevTail[i] * prevWeight;
}
}
}
}
// 7. 保存当前块尾部用于下一次交叉
this.lastBlockTail = [];
for (let ch = 0; ch < this.numChannels; ch++) {
const channelData = audioBuffer.getChannelData(ch);
const tailStart = Math.max(0, channelData.length - crossfadeLength);
this.lastBlockTail[ch] = channelData.slice(tailStart);
}
return audioBuffer;
}
_schedulePlay(audioBuffer) {
return new Promise(resolve => {
const source = this.audioContext.createBufferSource();
source.buffer = audioBuffer;
source.connect(this.audioContext.destination);
const plannedStartTime = this.playbackEndTime;
const now = this.audioContext.currentTime;
let startTime = Math.max(plannedStartTime, now);
// 动态速率调整(示例,需根据实际测试调整阈值)
const timeDrift = plannedStartTime - now;
if (timeDrift < -0.02) {
source.playbackRate.value = Math.min(1.04, 1 - (timeDrift / audioBuffer.duration));
} else if (timeDrift > 0.02) {
source.playbackRate.value = Math.max(0.96, 1 - (timeDrift / audioBuffer.duration));
} else {
source.playbackRate.value = 1.0;
}
source.start(startTime);
this.playbackEndTime = startTime + (audioBuffer.duration / source.playbackRate.value);
source.onended = () => {
this.currentSource = null;
resolve();
};
this.currentSource = source;
});
}
// 合并多个 ArrayBuffer 的辅助函数
_mergeArrayBuffers(buffers) {
let totalLength = 0;
for (let buffer of buffers) {
totalLength += buffer.byteLength;
}
const result = new Uint8Array(totalLength);
let offset = 0;
for (let buffer of buffers) {
const view = new Uint8Array(buffer);
result.set(view, offset);
offset += view.length;
}
return result.buffer;
}
}
+108 -46
View File
@@ -4,11 +4,23 @@
<button @click="onStopRecord" :disabled="!isRecording">停止录音</button> <button @click="onStopRecord" :disabled="!isRecording">停止录音</button>
<view class="tip">{{ status }}</view> <view class="tip">{{ status }}</view>
<view class="tip">当前分贝{{ currentDecibels }}</view> <view class="tip">当前分贝{{ currentDecibels }}</view>
<yao-RecordFrame ref="recordFrame" @onFrameRecorded="frameRecorded" @currentDecibels="onCurrentDecibels" <yao-RecordFrame
@onStop="stopIt"> ref="recordFrame"
</yao-RecordFrame> @onFrameRecorded="frameRecorded"
<sdx-StreamPlayer ref="aaa">xx</sdx-StreamPlayer> @currentDecibels="onCurrentDecibels"
@onStop="stopIt"
></yao-RecordFrame>
<!-- <sdx-StreamPlayer ref="aaa">xx</sdx-StreamPlayer> -->
<button @click="test">接通电话</button> <button @click="test">接通电话</button>
<view
ref="renderJSModule"
:pcmChunk="currentPCMChunk"
:change:pcmChunk="renderJS.appendPCMChunk"
:isStop="isStop"
:change:isStop="renderJS.stop"
type="renderjs"
module="renderJS"
></view>
</view> </view>
</template> </template>
@@ -19,12 +31,14 @@
SerializationType, SerializationType,
CompressionType, CompressionType,
ControlCommand, ControlCommand,
ProtocolConst, ProtocolConst
} from './ProtocolCodec'; } from './ProtocolCodec';
export default { export default {
data() { data() {
return { return {
status: "未录音", currentPCMChunk: null,
isStop: false, //
status: '未录音',
currentDecibels: 0, currentDecibels: 0,
isRecording: false, isRecording: false,
ws: null, // WebSocket ws: null, // WebSocket
@@ -32,9 +46,10 @@
scriptProcessor: null, // scriptProcessor: null, //
audioBufferSource: null, // audioBufferSource: null, //
frameBufferList: [], // frameBufferList: [], //
wsUrl: "ws://127.0.0.1:8000/ws/audio", // // wsUrl: "ws://127.0.0.1:8000/ws/audio", //
// wsUrl: "ws://172.16.89.58:8000/ws/audio", // // wsUrl: 'ws://172.16.89.58:8000/ws/audio' //
// wsUrl: "ws://25.64.32.157:9603/trapractice/voiceCallSocket/voiceCall?summary=3D072C9D242C96EA3F0FD647CB14A6F4B4BEA4493BB2FAAB065935FB405071B8A903128E488B6D06BEB23FD4E3D15EE6", // // wsUrl: "ws://25.64.32.157:9603/trapractice/voiceCallSocket/voiceCall?summary=3D072C9D242C96EA3F0FD647CB14A6F4B4BEA4493BB2FAAB065935FB405071B8A903128E488B6D06BEB23FD4E3D15EE6", //
wsUrl: "wss://aitstest.jlbank.com.cn:7001/trapractice/voiceCallSocket/voiceCall?summary=3D072C9D242C96EA3F0FD647CB14A6F44A8F9EF1C3D9726612B7339B566489139850DF3BE002DF99495FD60B34A5899D", //
}; };
}, },
onUnload() { onUnload() {
@@ -53,7 +68,7 @@
}, },
fail: () => { fail: () => {
console.log('fail'); console.log('fail');
}, }
}); });
this.ws.onOpen((res) => { this.ws.onOpen((res) => {
console.log('WebSocket连接已打开', res); console.log('WebSocket连接已打开', res);
@@ -66,39 +81,41 @@
}); });
}); });
this.ws.onMessage((res) => { this.ws.onMessage((res) => {
const { const { msgType, body } = ProtocolCodec.unpack(res.data);
msgType,
body
} = ProtocolCodec.unpack(res.data)
if (msgType === MessageType.IDENTITY) { if (msgType === MessageType.IDENTITY) {
console.log('身份校验成功', body); console.log('身份校验成功', body);
this.onStartRecord() this.onStartRecord();
} else if (msgType === MessageType.AUDIO_DATA) { } else if (msgType === MessageType.AUDIO_DATA) {
this.$refs.aaa.appendBuffer(body) // this.$refs.aaa.appendBuffer(body)
}else { // this.currentPCMChunk = body;
const buffer = body;
if (buffer.byteLength < 2) return;
// ArrayBuffer
const uint8 = new Uint8Array(buffer);
const numArray = Array.from(uint8);
this.currentPCMChunk = numArray; //
} else {
console.log('其他消息', body); console.log('其他消息', body);
} }
});
})
}, },
// //
async applyRecordPermission() { async applyRecordPermission() {
try { try {
const res = await uni.requestPermissions({ const res = await uni.requestPermissions({
scope: "scope.record" scope: 'scope.record'
}); });
const isGranted = res[0].grantStatus === 1; const isGranted = res[0].grantStatus === 1;
if (!isGranted) { if (!isGranted) {
uni.showToast({ uni.showToast({
title: "请授予录音权限", title: '请授予录音权限',
icon: "none" icon: 'none'
}); });
} }
return isGranted; return isGranted;
} catch (e) { } catch (e) {
console.error("申请权限失败:", e); console.error('申请权限失败:', e);
return false; return false;
} }
}, },
@@ -124,25 +141,22 @@
sampleRate: 16000, sampleRate: 16000,
frameSize: 1024, frameSize: 1024,
gain: 1.0, gain: 1.0,
onFrameRecorded: ({ onFrameRecorded: ({ isLastFrame, frameBuffer }) => {
isLastFrame, try {
frameBuffer
}) => {
try{
this.ws.send({ this.ws.send({
data: ProtocolCodec.pack(MessageType.AUDIO_DATA, frameBuffer) data: ProtocolCodec.pack(MessageType.AUDIO_DATA, frameBuffer)
}); });
} catch(e){} } catch (e) {}
}, },
onDecibels: (decibels) => { onDecibels: (decibels) => {
this.currentDecibels = decibels; this.currentDecibels = decibels;
} }
}); });
this.isRecording = true; this.isRecording = true;
this.status = "录音中..."; this.status = '录音中...';
} catch (e) { } catch (e) {
console.error("启动录音失败:", e); console.error('启动录音失败:', e);
this.status = "启动录音失败"; this.status = '启动录音失败';
this.isRecording = false; this.isRecording = false;
} }
}, },
@@ -158,7 +172,7 @@
// //
this.$refs.recordFrame.stop(); this.$refs.recordFrame.stop();
this.isRecording = false; this.isRecording = false;
this.status = "已停止录音"; this.status = '已停止录音';
} }
// WebSocket // WebSocket
@@ -180,10 +194,7 @@
}, },
// //
frameRecorded({ frameRecorded({ isLastFrame, frameBuffer }) {
isLastFrame,
frameBuffer
}) {
// console.log("", isLastFrame, frameBuffer.length); // console.log("", isLastFrame, frameBuffer.length);
// 2. WebSocket // 2. WebSocket
@@ -193,11 +204,9 @@
data: frameBuffer data: frameBuffer
}); });
} catch (e) { } catch (e) {
console.error("发送音频帧失败:", e); console.error('发送音频帧失败:', e);
} }
} }
}, },
// //
@@ -209,9 +218,62 @@
// //
stopIt(base64) { stopIt(base64) {
this.stopRecordAndClean(); this.stopRecordAndClean();
console.log("录音停止,最终音频Base64", base64?.substring(0, 50) + "..."); console.log('录音停止,最终音频Base64', base64?.substring(0, 50) + '...');
}, }
}, }
};
</script>
<script module="renderJS" lang="renderjs">
import { StreamPlayer } from ".//StreamPlayer";
let player = null;
export default {
mounted() {
const _this = this;
player = new StreamPlayer({
inputSampleRate: 44100, // PCM8000/24000
numChannels: 1, // /
bitDepth: 16, // 16/32bit
littleEndian: true, //
pcmType: 'int', // int/float
callback: _this.callback
});
},
methods: {
appendPCMChunk(numArray) {
if (!numArray || numArray.length === 0) return;
// ArrayBuffer
const uint8 = new Uint8Array(numArray);
const arrayBuffer = uint8.buffer;
player.appendChunk(arrayBuffer);
},
//
stop() {
if (player) {
player.destroy();
player = null;
// 便
const _this = this;
player = new StreamPlayer({
inputSampleRate: 16000,
numChannels: 1,
bitDepth: 16,
littleEndian: true,
pcmType: 'int',
callback: _this.callback
});
}
},
// 线
callback(e) {
if (e === 'ended') {
this.$ownerInstance.callMethod('changeStreamPlaying', { type: false });
}
}
}
}; };
</script> </script>
@@ -238,4 +300,4 @@
font-size: 28rpx; font-size: 28rpx;
color: #333; color: #333;
} }
</style> </style>
@@ -70,14 +70,6 @@
} }
</script> </script>
<script module="renderJS" lang="renderjs"> <script module="renderJS" lang="renderjs">
/**
* 如果不需要支持iOS建议使用这个同时支持mp3和pcm
*/
// import { StreamPlayer } from "../../plugins/H5AndAndroidStreamPlayer";
/**
* 如果需要支持安卓iOS和H5使用这个支持pcm暂时不支持mp3
* 如果想支持mp3可以自己开发我在测试中mp3的效果太差所以放弃了
*/
import { StreamPlayer } from "../../plugins/StreamPlayer"; import { StreamPlayer } from "../../plugins/StreamPlayer";
let player=null let player=null
export default { export default {
@@ -87,7 +79,6 @@
}, },
methods: { methods: {
playTTS (base64) { playTTS (base64) {
console.log('base64', base64);
if(!base64)return if(!base64)return
const binaryStr = atob(base64) const binaryStr = atob(base64)
const bytes = new Uint8Array(binaryStr.length) const bytes = new Uint8Array(binaryStr.length)
@@ -1,13 +1,13 @@
{ {
"hash": "a4207d61", "hash": "1d959fb8",
"configHash": "c22f3258", "configHash": "0d2436b6",
"lockfileHash": "86a59871", "lockfileHash": "6ccee1ba",
"browserHash": "52f5bffd", "browserHash": "2ee35306",
"optimized": { "optimized": {
"text-encoding": { "text-encoding": {
"src": "../../../../../node_modules/text-encoding/index.js", "src": "../../../../../node_modules/text-encoding/index.js",
"file": "text-encoding.js", "file": "text-encoding.js",
"fileHash": "561a7cb8", "fileHash": "ad7e1515",
"needsInterop": true "needsInterop": true
} }
}, },
@@ -3,9 +3,9 @@ var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
}; };
// F:/aistream-test/测试流式传输uniapp/node_modules/text-encoding/lib/encoding-indexes.js // C:/Users/1/Desktop/testAudio/测试流式传输uniapp/node_modules/text-encoding/lib/encoding-indexes.js
var require_encoding_indexes = __commonJS({ var require_encoding_indexes = __commonJS({
"F:/aistream-test/测试流式传输uniapp/node_modules/text-encoding/lib/encoding-indexes.js"(exports, module) { "C:/Users/1/Desktop/testAudio/测试流式传输uniapp/node_modules/text-encoding/lib/encoding-indexes.js"(exports, module) {
(function(global) { (function(global) {
"use strict"; "use strict";
if (typeof module !== "undefined" && module.exports) { if (typeof module !== "undefined" && module.exports) {
@@ -50,9 +50,9 @@ var require_encoding_indexes = __commonJS({
} }
}); });
// F:/aistream-test/测试流式传输uniapp/node_modules/text-encoding/lib/encoding.js // C:/Users/1/Desktop/testAudio/测试流式传输uniapp/node_modules/text-encoding/lib/encoding.js
var require_encoding = __commonJS({ var require_encoding = __commonJS({
"F:/aistream-test/测试流式传输uniapp/node_modules/text-encoding/lib/encoding.js"(exports, module) { "C:/Users/1/Desktop/testAudio/测试流式传输uniapp/node_modules/text-encoding/lib/encoding.js"(exports, module) {
(function(global) { (function(global) {
"use strict"; "use strict";
if (typeof module !== "undefined" && module.exports && !global["encoding-indexes"]) { if (typeof module !== "undefined" && module.exports && !global["encoding-indexes"]) {
@@ -1796,9 +1796,9 @@ var require_encoding = __commonJS({
} }
}); });
// F:/aistream-test/测试流式传输uniapp/node_modules/text-encoding/index.js // C:/Users/1/Desktop/testAudio/测试流式传输uniapp/node_modules/text-encoding/index.js
var require_text_encoding = __commonJS({ var require_text_encoding = __commonJS({
"F:/aistream-test/测试流式传输uniapp/node_modules/text-encoding/index.js"(exports, module) { "C:/Users/1/Desktop/testAudio/测试流式传输uniapp/node_modules/text-encoding/index.js"(exports, module) {
var encoding = require_encoding(); var encoding = require_encoding();
module.exports = { module.exports = {
TextEncoder: encoding.TextEncoder, TextEncoder: encoding.TextEncoder,
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
var __renderjsModules={}; var __renderjsModules={};
__renderjsModules["5f91482f"] = (() => { __renderjsModules["49b84592"] = (() => {
var __defProp = Object.defineProperty; var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames; var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -45,7 +45,7 @@ __renderjsModules["5f91482f"] = (() => {
default: () => stdin_default default: () => stdin_default
}); });
// C:/Users/1/Desktop/testAudio/测试流式传输uniapp/uni_modules/sdx-StreamPlayer/plugins/StreamPlayer.js // C:/Users/1/Desktop/testAudio/测试流式传输uniapp/pages/index/StreamPlayer.js
var StreamPlayer = class { var StreamPlayer = class {
constructor({ constructor({
inputSampleRate = 16e3, inputSampleRate = 16e3,
@@ -106,7 +106,7 @@ __renderjsModules["5f91482f"] = (() => {
yield this._schedulePlay(audioBuffer); yield this._schedulePlay(audioBuffer);
this._processQueue(); this._processQueue();
} catch (err) { } catch (err) {
console.error("\u97F3\u9891\u5904\u7406\u5931\u8D25:", err); console.error("\u97F3\u9891\u5904\u7406\u5931\u8D25:", err.name, err.message, err.stack);
} }
}); });
} }
@@ -225,24 +225,45 @@ __renderjsModules["5f91482f"] = (() => {
var stdin_default = { var stdin_default = {
mounted() { mounted() {
const _this = this; const _this = this;
player = new StreamPlayer({ callback: _this.callback }); player = new StreamPlayer({
inputSampleRate: 44100,
// 后端PCM采样率(如8000/24000
numChannels: 1,
// 声道数(单声道/双声道)
bitDepth: 16,
// 位深(16/32bit
littleEndian: true,
// 端序(和后端一致)
pcmType: "int",
// 类型(int/float
callback: _this.callback
});
}, },
methods: { methods: {
playTTS(base64) { appendPCMChunk(numArray) {
console.log("base64", base64); if (!numArray || numArray.length === 0)
if (!base64)
return; return;
const binaryStr = atob(base64); const uint8 = new Uint8Array(numArray);
const bytes = new Uint8Array(binaryStr.length); const arrayBuffer = uint8.buffer;
for (let i = 0; i < binaryStr.length; i++) { player.appendChunk(arrayBuffer);
bytes[i] = binaryStr.charCodeAt(i);
}
player.appendChunk(bytes.buffer);
}, },
// 停止播放(销毁播放器)
stop() { stop() {
player && player.destroy(); if (player) {
player = null; player.destroy();
player = null;
const _this = this;
player = new StreamPlayer({
inputSampleRate: 16e3,
numChannels: 1,
bitDepth: 16,
littleEndian: true,
pcmType: "int",
callback: _this.callback
});
}
}, },
// 播放结束回调(通知主线程)
callback(e) { callback(e) {
if (e === "ended") { if (e === "ended") {
this.$ownerInstance.callMethod("changeStreamPlaying", { type: false }); this.$ownerInstance.callMethod("changeStreamPlaying", { type: false });
@@ -52,7 +52,7 @@ if (uni.restoreGlobal) {
} }
return target; return target;
}; };
const _sfc_main$3 = { const _sfc_main$2 = {
data() { data() {
return { return {
options: null, options: null,
@@ -111,7 +111,7 @@ if (uni.restoreGlobal) {
} }
} }
}; };
function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) { function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("view", { return vue.openBlock(), vue.createElementBlock("view", {
options: vue.wp($data.options), options: vue.wp($data.options),
"change:options": _ctx.record.startRecord, "change:options": _ctx.record.startRecord,
@@ -120,91 +120,8 @@ if (uni.restoreGlobal) {
}, null, 8, ["options", "change:options", "status", "change:status"]); }, null, 8, ["options", "change:options", "status", "change:status"]);
} }
if (typeof block0$1 === "function") if (typeof block0$1 === "function")
block0$1(_sfc_main$3); block0$1(_sfc_main$2);
const __easycom_0 = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$2], ["__file", "C:/Users/1/Desktop/testAudio/测试流式传输uniapp/uni_modules/yao-RecordFrame/components/yao-RecordFrame/yao-RecordFrame.vue"]]); const __easycom_0 = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$1], ["__file", "C:/Users/1/Desktop/testAudio/测试流式传输uniapp/uni_modules/yao-RecordFrame/components/yao-RecordFrame/yao-RecordFrame.vue"]]);
const block0 = (Comp) => {
(Comp.$renderjs || (Comp.$renderjs = [])).push("renderJS");
(Comp.$renderjsModules || (Comp.$renderjsModules = {}))["renderJS"] = "5f91482f";
};
const _sfc_main$2 = {
data() {
return {
currBuffer: null,
isStop: false,
isStreamPlaying: false
};
},
methods: {
connect() {
this.ws = uni.connectSocket({
url: "ws://172.16.89.58:8000/ws/audio",
complete: () => {
formatAppLog("log", "at uni_modules/sdx-StreamPlayer/components/sdx-StreamPlayer/sdx-StreamPlayer.vue:27", "complete");
},
success: () => {
formatAppLog("log", "at uni_modules/sdx-StreamPlayer/components/sdx-StreamPlayer/sdx-StreamPlayer.vue:30", "web");
this.ws.onOpen((res) => {
formatAppLog("log", "at uni_modules/sdx-StreamPlayer/components/sdx-StreamPlayer/sdx-StreamPlayer.vue:32", "WebSocket连接已打开", res);
this.ws.onMessage((res2) => {
let messageData = res2.data;
if (typeof messageData === "string") {
try {
const parsedData = JSON.parse(messageData);
this.handleMessage(parsedData);
} catch (e) {
this.handleMessage(messageData);
}
} else if (messageData instanceof ArrayBuffer) {
this.isStreamPlaying = true;
this.currBuffer = uni.arrayBufferToBase64(messageData);
}
});
});
}
});
},
end() {
this.isStop = !this.isStop;
},
changeStreamPlaying(e) {
this.isStreamPlaying = e.type;
},
appendBuffer(messageData) {
this.isStreamPlaying = true;
this.currBuffer = uni.arrayBufferToBase64(messageData);
}
}
};
function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock(
vue.Fragment,
null,
[
vue.createElementVNode("button", {
type: "default",
onClick: _cache[0] || (_cache[0] = (...args) => $options.connect && $options.connect(...args))
}, "播放音频"),
vue.createElementVNode("button", {
type: "default",
onClick: _cache[1] || (_cache[1] = (...args) => $options.end && $options.end(...args))
}, "结束播放"),
vue.createCommentVNode(" 逻辑层和renderjs的交互需要通过这种方式传递数据,具体看文档 "),
vue.createElementVNode("view", {
isStop: vue.wp($data.isStop),
"change:isStop": _ctx.renderJS.stop,
prop: vue.wp($data.currBuffer),
"change:prop": _ctx.renderJS.playTTS,
type: "renderjs",
module: "renderJS"
}, null, 8, ["isStop", "change:isStop", "prop", "change:prop"])
],
64
/* STABLE_FRAGMENT */
);
}
if (typeof block0 === "function")
block0(_sfc_main$2);
const __easycom_1 = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$1], ["__file", "C:/Users/1/Desktop/testAudio/测试流式传输uniapp/uni_modules/sdx-StreamPlayer/components/sdx-StreamPlayer/sdx-StreamPlayer.vue"]]);
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
var encoding$1 = { exports: {} }; var encoding$1 = { exports: {} };
var encodingIndexes = { exports: {} }; var encodingIndexes = { exports: {} };
@@ -2188,9 +2105,16 @@ if (uni.restoreGlobal) {
}; };
} }
} }
const block0 = (Comp) => {
(Comp.$renderjs || (Comp.$renderjs = [])).push("renderJS");
(Comp.$renderjsModules || (Comp.$renderjsModules = {}))["renderJS"] = "49b84592";
};
const _sfc_main$1 = { const _sfc_main$1 = {
data() { data() {
return { return {
currentPCMChunk: null,
isStop: false,
// 停止播放指令
status: "未录音", status: "未录音",
currentDecibels: 0, currentDecibels: 0,
isRecording: false, isRecording: false,
@@ -2205,9 +2129,10 @@ if (uni.restoreGlobal) {
frameBufferList: [], frameBufferList: [],
// 缓存音频帧 // 缓存音频帧
// wsUrl: "ws://127.0.0.1:8000/ws/audio", // 替换为实际后端地址 // wsUrl: "ws://127.0.0.1:8000/ws/audio", // 替换为实际后端地址
wsUrl: "ws://172.16.89.58:8000/ws/audio" // wsUrl: 'ws://172.16.89.58:8000/ws/audio' // 替换为实际后端地址
// 替换为实际后端地址
// wsUrl: "ws://25.64.32.157:9603/trapractice/voiceCallSocket/voiceCall?summary=3D072C9D242C96EA3F0FD647CB14A6F4B4BEA4493BB2FAAB065935FB405071B8A903128E488B6D06BEB23FD4E3D15EE6", // 替换为实际后端地址 // wsUrl: "ws://25.64.32.157:9603/trapractice/voiceCallSocket/voiceCall?summary=3D072C9D242C96EA3F0FD647CB14A6F4B4BEA4493BB2FAAB065935FB405071B8A903128E488B6D06BEB23FD4E3D15EE6", // 替换为实际后端地址
wsUrl: "wss://aitstest.jlbank.com.cn:7001/trapractice/voiceCallSocket/voiceCall?summary=3D072C9D242C96EA3F0FD647CB14A6F44A8F9EF1C3D9726612B7339B566489139850DF3BE002DF99495FD60B34A5899D"
// 替换为实际后端地址
}; };
}, },
onUnload() { onUnload() {
@@ -2218,17 +2143,17 @@ if (uni.restoreGlobal) {
this.ws = uni.connectSocket({ this.ws = uni.connectSocket({
url: this.wsUrl, url: this.wsUrl,
fail: () => { fail: () => {
formatAppLog("log", "at pages/index/index.vue:49", "fail"); formatAppLog("log", "at pages/index/index.vue:64", "fail");
}, },
success: () => { success: () => {
formatAppLog("log", "at pages/index/index.vue:52", "web"); formatAppLog("log", "at pages/index/index.vue:67", "web");
}, },
fail: () => { fail: () => {
formatAppLog("log", "at pages/index/index.vue:55", "fail"); formatAppLog("log", "at pages/index/index.vue:70", "fail");
} }
}); });
this.ws.onOpen((res) => { this.ws.onOpen((res) => {
formatAppLog("log", "at pages/index/index.vue:59", "WebSocket连接已打开", res); formatAppLog("log", "at pages/index/index.vue:74", "WebSocket连接已打开", res);
this.ws.send({ this.ws.send({
data: ProtocolCodec.pack(MessageType.IDENTITY, { data: ProtocolCodec.pack(MessageType.IDENTITY, {
user_id: "1001", user_id: "1001",
@@ -2238,15 +2163,19 @@ if (uni.restoreGlobal) {
}); });
}); });
this.ws.onMessage((res) => { this.ws.onMessage((res) => {
const { const { msgType, body } = ProtocolCodec.unpack(res.data);
msgType,
body
} = ProtocolCodec.unpack(res.data);
if (msgType === MessageType.IDENTITY) { if (msgType === MessageType.IDENTITY) {
formatAppLog("log", "at pages/index/index.vue:75", "身份校验成功", body); formatAppLog("log", "at pages/index/index.vue:87", "身份校验成功", body);
this.onStartRecord(); this.onStartRecord();
} else if (msgType === MessageType.AUDIO_DATA) { } else if (msgType === MessageType.AUDIO_DATA) {
this.$refs.aaa.appendBuffer(body); const buffer = body;
if (buffer.byteLength < 2)
return;
const uint8 = new Uint8Array(buffer);
const numArray = Array.from(uint8);
this.currentPCMChunk = numArray;
} else {
formatAppLog("log", "at pages/index/index.vue:99", "其他消息", body);
} }
}); });
}, },
@@ -2265,7 +2194,7 @@ if (uni.restoreGlobal) {
} }
return isGranted; return isGranted;
} catch (e) { } catch (e) {
formatAppLog("error", "at pages/index/index.vue:99", "申请权限失败:", e); formatAppLog("error", "at pages/index/index.vue:118", "申请权限失败:", e);
return false; return false;
} }
}, },
@@ -2281,16 +2210,13 @@ if (uni.restoreGlobal) {
}, },
// 开始录音 // 开始录音
onStartRecord() { onStartRecord() {
formatAppLog("log", "at pages/index/index.vue:119", "开始录音"); formatAppLog("log", "at pages/index/index.vue:138", "开始录音");
try { try {
this.$refs.recordFrame.start({ this.$refs.recordFrame.start({
sampleRate: 16e3, sampleRate: 16e3,
frameSize: 1024, frameSize: 1024,
gain: 1, gain: 1,
onFrameRecorded: ({ onFrameRecorded: ({ isLastFrame, frameBuffer }) => {
isLastFrame,
frameBuffer
}) => {
try { try {
this.ws.send({ this.ws.send({
data: ProtocolCodec.pack(MessageType.AUDIO_DATA, frameBuffer) data: ProtocolCodec.pack(MessageType.AUDIO_DATA, frameBuffer)
@@ -2305,7 +2231,7 @@ if (uni.restoreGlobal) {
this.isRecording = true; this.isRecording = true;
this.status = "录音中..."; this.status = "录音中...";
} catch (e) { } catch (e) {
formatAppLog("error", "at pages/index/index.vue:142", "启动录音失败:", e); formatAppLog("error", "at pages/index/index.vue:158", "启动录音失败:", e);
this.status = "启动录音失败"; this.status = "启动录音失败";
this.isRecording = false; this.isRecording = false;
} }
@@ -2334,17 +2260,14 @@ if (uni.restoreGlobal) {
this.currentDecibels = 0; this.currentDecibels = 0;
}, },
// 接收音频帧并处理 // 接收音频帧并处理
frameRecorded({ frameRecorded({ isLastFrame, frameBuffer }) {
isLastFrame,
frameBuffer
}) {
if (this.ws) { if (this.ws) {
try { try {
this.ws.send({ this.ws.send({
data: frameBuffer data: frameBuffer
}); });
} catch (e) { } catch (e) {
formatAppLog("error", "at pages/index/index.vue:194", "发送音频帧失败:", e); formatAppLog("error", "at pages/index/index.vue:207", "发送音频帧失败:", e);
} }
} }
}, },
@@ -2354,13 +2277,12 @@ if (uni.restoreGlobal) {
// 录音停止回调 // 录音停止回调
stopIt(base64) { stopIt(base64) {
this.stopRecordAndClean(); this.stopRecordAndClean();
formatAppLog("log", "at pages/index/index.vue:210", "录音停止,最终音频Base64", (base64 == null ? void 0 : base64.substring(0, 50)) + "..."); formatAppLog("log", "at pages/index/index.vue:221", "录音停止,最终音频Base64", (base64 == null ? void 0 : base64.substring(0, 50)) + "...");
} }
} }
}; };
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_yao_RecordFrame = resolveEasycom(vue.resolveDynamicComponent("yao-RecordFrame"), __easycom_0); const _component_yao_RecordFrame = resolveEasycom(vue.resolveDynamicComponent("yao-RecordFrame"), __easycom_0);
const _component_sdx_StreamPlayer = resolveEasycom(vue.resolveDynamicComponent("sdx-StreamPlayer"), __easycom_1);
return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [
vue.createElementVNode("button", { vue.createElementVNode("button", {
onClick: _cache[0] || (_cache[0] = (...args) => $options.onStartRecord && $options.onStartRecord(...args)), onClick: _cache[0] || (_cache[0] = (...args) => $options.onStartRecord && $options.onStartRecord(...args)),
@@ -2390,24 +2312,23 @@ if (uni.restoreGlobal) {
onCurrentDecibels: $options.onCurrentDecibels, onCurrentDecibels: $options.onCurrentDecibels,
onOnStop: $options.stopIt onOnStop: $options.stopIt
}, null, 8, ["onOnFrameRecorded", "onCurrentDecibels", "onOnStop"]), }, null, 8, ["onOnFrameRecorded", "onCurrentDecibels", "onOnStop"]),
vue.createVNode( vue.createCommentVNode(' <sdx-StreamPlayer ref="aaa">xx</sdx-StreamPlayer> '),
_component_sdx_StreamPlayer,
{ ref: "aaa" },
{
default: vue.withCtx(() => [
vue.createTextVNode("xx")
]),
_: 1
/* STABLE */
},
512
/* NEED_PATCH */
),
vue.createElementVNode("button", { vue.createElementVNode("button", {
onClick: _cache[2] || (_cache[2] = (...args) => $options.test && $options.test(...args)) onClick: _cache[2] || (_cache[2] = (...args) => $options.test && $options.test(...args))
}, "接通电话") }, "接通电话"),
vue.createElementVNode("view", {
ref: "renderJSModule",
pcmChunk: vue.wp($data.currentPCMChunk),
"change:pcmChunk": _ctx.renderJS.appendPCMChunk,
isStop: vue.wp($data.isStop),
"change:isStop": _ctx.renderJS.stop,
type: "renderjs",
module: "renderJS"
}, null, 8, ["pcmChunk", "change:pcmChunk", "isStop", "change:isStop"])
]); ]);
} }
if (typeof block0 === "function")
block0(_sfc_main$1);
const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__scopeId", "data-v-1cf27b2a"], ["__file", "C:/Users/1/Desktop/testAudio/测试流式传输uniapp/pages/index/index.vue"]]); const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__scopeId", "data-v-1cf27b2a"], ["__file", "C:/Users/1/Desktop/testAudio/测试流式传输uniapp/pages/index/index.vue"]]);
__definePage("pages/index/index", PagesIndexIndex); __definePage("pages/index/index", PagesIndexIndex);
const _sfc_main = { const _sfc_main = {
+1
View File
@@ -0,0 +1 @@
httpsconsole.volcengine.comquotaproductList