Add event queue to send stream event for StreamServer

This commit is contained in:
m-RNA
2025-12-23 03:08:21 +08:00
parent cf3476abd7
commit 7fce6a0b74

View File

@@ -26,6 +26,11 @@ esp_err_t StreamHelpers::stream(httpd_req_t *req)
if (!last_frame) if (!last_frame)
last_frame = esp_timer_get_time(); last_frame = esp_timer_get_time();
// Pull event queue from user_ctx to send STREAM on/off notifications
auto *stateManager = static_cast<StateManager *>(req->user_ctx);
QueueHandle_t eventQueue = stateManager ? stateManager->GetEventQueue() : nullptr;
bool stream_on_sent = false;
response = httpd_resp_set_type(req, STREAM_CONTENT_TYPE); response = httpd_resp_set_type(req, STREAM_CONTENT_TYPE);
if (response != ESP_OK) if (response != ESP_OK)
return response; return response;
@@ -33,6 +38,10 @@ esp_err_t StreamHelpers::stream(httpd_req_t *req)
httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
httpd_resp_set_hdr(req, "X-Framerate", "60"); httpd_resp_set_hdr(req, "X-Framerate", "60");
if (SendStreamEvent(eventQueue, StreamState_e::Stream_ON)) {
stream_on_sent = true;
}
while (true) while (true)
{ {
fb = esp_camera_fb_get(); fb = esp_camera_fb_get();
@@ -86,6 +95,11 @@ esp_err_t StreamHelpers::stream(httpd_req_t *req)
} }
} }
last_frame = 0; last_frame = 0;
if (stream_on_sent) {
SendStreamEvent(eventQueue, StreamState_e::Stream_OFF);
}
return response; return response;
} }
@@ -110,7 +124,7 @@ esp_err_t StreamServer::startStreamServer()
.uri = "/", .uri = "/",
.method = HTTP_GET, .method = HTTP_GET,
.handler = &StreamHelpers::stream, .handler = &StreamHelpers::stream,
.user_ctx = nullptr, .user_ctx = this->stateManager,
}; };
httpd_uri_t logs_ws = { httpd_uri_t logs_ws = {