Support sending is_eof for online websocket server. (#2204)

is_final=true means an endpoint is detected.

is_eof=true means all received samples have been processed
by the server.
This commit is contained in:
Fangjun Kuang
2025-05-13 14:49:22 +08:00
committed by GitHub
parent cf67d72c22
commit 9a0e16f092
3 changed files with 10 additions and 2 deletions

View File

@@ -77,7 +77,8 @@ std::string OnlineRecognizerResult::AsJsonString() const {
os << "\"words\": " << VecToString(words, 0) << ", "; os << "\"words\": " << VecToString(words, 0) << ", ";
os << "\"start_time\": " << std::fixed << std::setprecision(2) << start_time os << "\"start_time\": " << std::fixed << std::setprecision(2) << start_time
<< ", "; << ", ";
os << "\"is_final\": " << (is_final ? "true" : "false"); os << "\"is_final\": " << (is_final ? "true" : "false") << ", ";
os << "\"is_eof\": " << (is_eof ? "true" : "false");
os << "}"; os << "}";
return os.str(); return os.str();
} }

View File

@@ -53,9 +53,14 @@ struct OnlineRecognizerResult {
/// When an endpoint is detected, it will change /// When an endpoint is detected, it will change
float start_time = 0; float start_time = 0;
/// True if the end of this segment is reached /// True if the end of this segment is reached, i.e., an endpoint is detected
/// used only in ./online-websocket-server-impl.cc
bool is_final = false; bool is_final = false;
/// used only in ./online-websocket-server-impl.cc
/// If it is true, it means the server has processed all received samples
bool is_eof = false;
/** Return a json string. /** Return a json string.
* *
* The returned string contains: * The returned string contains:
@@ -69,6 +74,7 @@ struct OnlineRecognizerResult {
* "segment": x, * "segment": x,
* "start_time": x, * "start_time": x,
* "is_final": true|false * "is_final": true|false
* "is_eof": true|false
* } * }
*/ */
std::string AsJsonString() const; std::string AsJsonString() const;

View File

@@ -210,6 +210,7 @@ void OnlineWebsocketDecoder::Decode() {
if (!recognizer_->IsReady(c->s.get()) && c->eof) { if (!recognizer_->IsReady(c->s.get()) && c->eof) {
result.is_final = true; result.is_final = true;
result.is_eof = true;
} }
asio::post(server_->GetConnectionContext(), asio::post(server_->GetConnectionContext(),