From 26bac6ab4b035a424af25c435535e7f6796189d4 Mon Sep 17 00:00:00 2001 From: dio Date: Mon, 20 Jul 2026 17:19:05 +0800 Subject: [PATCH] fixed websocket-server-2pass.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed the issue where the client lost the last segment of audio in online mode and ensured that the server no longer returns offline results in online mode. In online mode, you can see that in the figure, 2pass-online misses the character “型”, and the result can only be obtained using 2pass-offline. Also, offline results should not be returned in online mode. --- .../websocket/bin/websocket-server-2pass.cpp | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/runtime/websocket/bin/websocket-server-2pass.cpp b/runtime/websocket/bin/websocket-server-2pass.cpp index 45c016c19..dcb3372d8 100644 --- a/runtime/websocket/bin/websocket-server-2pass.cpp +++ b/runtime/websocket/bin/websocket-server-2pass.cpp @@ -65,7 +65,7 @@ context_ptr WebSocketServer::on_tls_init(tls_mode mode, return ctx; } -nlohmann::json handle_result(FUNASR_RESULT result, websocketpp::connection_hdl& hdl, std::map,std::owner_less>& data_map) { +nlohmann::json handle_result(FUNASR_RESULT result, websocketpp::connection_hdl& hdl, std::map,std::owner_less>& data_map, std::string modetype) { std::shared_ptr data_msg = nullptr; auto it = data_map.find(hdl); if (it != data_map.end()) { @@ -95,20 +95,23 @@ nlohmann::json handle_result(FUNASR_RESULT result, websocketpp::connection_hdl& data_msg->end_time = FunASRGetTpassEnd(result); // 记录句子的结束时间 jsonresult["timestamp"] = data_msg->timestamp; - std::string tmp_tpass_msg = FunASRGetTpassResult(result, 0); - if (tmp_tpass_msg != "") { - LOG(INFO) << "wav_name: " << data_msg->msg["wav_name"].get() << " | offline results : " << tmp_tpass_msg; - jsonresult["text"] = tmp_tpass_msg; - jsonresult["mode"] = "2pass-offline"; - - // 句子结束,记录结束时间 - jsonresult["start_time"] = data_msg->start_time; - jsonresult["end_time"] = data_msg->end_time; - jsonresult["slice_type"] = 2; - jsonresult["index"] = data_msg->index; - - data_msg->index++; //句子序号 - data_msg->is_sentence_started = false; // 重置句子状态 + // online 模式跳过 offline 结果,避免覆盖 online 结果 + if (modetype != "online") { + std::string tmp_tpass_msg = FunASRGetTpassResult(result, 0); + if (tmp_tpass_msg != "") { + LOG(INFO) << "wav_name: " << data_msg->msg["wav_name"].get() << " | offline results : " << tmp_tpass_msg; + jsonresult["text"] = tmp_tpass_msg; + jsonresult["mode"] = "2pass-offline"; + + // 句子结束,记录结束时间 + jsonresult["start_time"] = data_msg->start_time; + jsonresult["end_time"] = data_msg->end_time; + jsonresult["slice_type"] = 2; + jsonresult["index"] = data_msg->index; + + data_msg->index++; //句子序号 + data_msg->is_sentence_started = false; // 重置句子状态 + } } std::string tmp_stamp_msg = FunASRGetStamp(result); @@ -195,7 +198,7 @@ void WebSocketServer::do_decoder( } if (Result) { websocketpp::lib::error_code ec; - nlohmann::json jsonresult = handle_result(Result, hdl, data_map); + nlohmann::json jsonresult = handle_result(Result, hdl, data_map, modetype); jsonresult["wav_name"] = wav_name; jsonresult["is_final"] = false; if (jsonresult["text"] != "") { @@ -238,7 +241,7 @@ void WebSocketServer::do_decoder( } if (Result) { websocketpp::lib::error_code ec; - nlohmann::json jsonresult = handle_result(Result, hdl, data_map); + nlohmann::json jsonresult = handle_result(Result, hdl, data_map, modetype); jsonresult["wav_name"] = wav_name; jsonresult["is_final"] = true; //LOG(INFO) << "jsonresult: " << jsonresult.dump(4);