diff --git a/ESP32CAM-ONVIF/onvif_server.cpp b/ESP32CAM-ONVIF/onvif_server.cpp
index f8dfc26..6e8d7bc 100644
--- a/ESP32CAM-ONVIF/onvif_server.cpp
+++ b/ESP32CAM-ONVIF/onvif_server.cpp
@@ -43,6 +43,25 @@ String getDeviceInfoResponse() {
"";
}
+String getStreamUriResponse() {
+ String ip = WiFi.localIP().toString();
+ return
+ ""
+ ""
+ ""
+ ""
+ ""
+ "rtsp://" + ip + ":554/mjpeg/1"
+ "false"
+ "false"
+ "PT0S"
+ ""
+ ""
+ ""
+ "";
+}
+
void handle_onvif_soap() {
String req = onvifServer.arg(0);
if (req.indexOf("GetCapabilities") > 0) {
@@ -93,7 +112,7 @@ void handle_onvif_discovery() {
void onvif_server_start() {
onvifServer.on("/onvif/device_service", HTTP_POST, handle_onvif_soap);
onvifServer.begin();
- onvifUDP.beginMulticast(WiFi.localIP(), IPAddress(239,255,255,250), 3702);
+ onvifUDP.beginMulticast(IPAddress(239,255,255,250), 3702); // Fixed: use only 2 args
Serial.println("[INFO] ONVIF server started.");
}
diff --git a/ESP32CAM-ONVIF/onvif_server.h b/ESP32CAM-ONVIF/onvif_server.h
index 41e1dbe..9936d9b 100644
--- a/ESP32CAM-ONVIF/onvif_server.h
+++ b/ESP32CAM-ONVIF/onvif_server.h
@@ -1,3 +1,8 @@
#pragma once
+#include
+#include
+#include
+#include
+
void onvif_server_start();
void onvif_server_loop();
diff --git a/ESP32CAM-ONVIF/web_config.cpp b/ESP32CAM-ONVIF/web_config.cpp
index acff168..f8aea8e 100644
--- a/ESP32CAM-ONVIF/web_config.cpp
+++ b/ESP32CAM-ONVIF/web_config.cpp
@@ -31,7 +31,9 @@ void web_config_start() {
return;
}
// Protect static files with authentication
- webConfigServer.serveStatic("/", SPIFFS, "/").setDefaultFile("index.html").setAuthentication(WEB_USER, WEB_PASS);
+ webConfigServer.serveStatic("/", SPIFFS, "/");
+ webConfigServer.setDefaultFile("index.html");
+ webConfigServer.setAuthentication(WEB_USER, WEB_PASS);
// === API ENDPOINTS ===
webConfigServer.on("/api/status", HTTP_GET, []() {
@@ -77,10 +79,10 @@ void web_config_start() {
if (doc.containsKey("awb")) s->set_whitebal(s, doc["awb"]);
if (doc.containsKey("awb_gain")) s->set_awb_gain(s, doc["awb_gain"]);
if (doc.containsKey("wb_mode")) s->set_wb_mode(s, doc["wb_mode"]);
- if (doc.containsKey("aec")) s->set_aec(s, doc["aec"]);
+ if (doc.containsKey("aec")) s->set_aec2(s, doc["aec"]);
if (doc.containsKey("aec2")) s->set_aec2(s, doc["aec2"]);
if (doc.containsKey("ae_level")) s->set_ae_level(s, doc["ae_level"]);
- if (doc.containsKey("agc")) s->set_agc(s, doc["agc"]);
+ if (doc.containsKey("agc")) s->set_gain_ctrl(s, doc["agc"]);
if (doc.containsKey("gainceiling")) s->set_gainceiling(s, doc["gainceiling"]);
if (doc.containsKey("bpc")) s->set_bpc(s, doc["bpc"]);
if (doc.containsKey("wpc")) s->set_wpc(s, doc["wpc"]);