如果http访问是超时错误,则减少重试次数

避免耗电太高
lowmem
Matthew 2 months ago
parent 5872857f8d
commit 97c8cc3038

@ -1693,7 +1693,7 @@ bool CPhoneDevice::TakePhotoWithNetCamera(IDevice::PHOTO_INFO& localPhotoInfo, c
std::vector<uint8_t> img; std::vector<uint8_t> img;
cv::Mat rgb; cv::Mat rgb;
bool netCaptureResult = false; int netCaptureResult = 0;
std::string lastError; std::string lastError;
int idx = 0; int idx = 0;
vendorCtrl->SetResolution(localPhotoInfo.channel, localPhotoInfo.cameraId, localPhotoInfo.width, localPhotoInfo.height); vendorCtrl->SetResolution(localPhotoInfo.channel, localPhotoInfo.cameraId, localPhotoInfo.width, localPhotoInfo.height);
@ -1727,6 +1727,10 @@ bool CPhoneDevice::TakePhotoWithNetCamera(IDevice::PHOTO_INFO& localPhotoInfo, c
break; break;
} }
} }
if (vendorCtrl->IsTimeout())
{
idx += 9;
}
std::this_thread::sleep_for(std::chrono::milliseconds(1000)); std::this_thread::sleep_for(std::chrono::milliseconds(1000));
} }

@ -117,8 +117,6 @@ void HangYuCtrl::EnableOsd(bool enable, uint8_t channel)
{ {
// return; // return;
} }
} }
std::string HangYuCtrl::GetStreamingUrl(uint8_t channel) std::string HangYuCtrl::GetStreamingUrl(uint8_t channel)
@ -200,7 +198,7 @@ bool HangYuCtrl::TakePhoto(uint8_t streamID, std::vector<uint8_t>& img)
char url[128] = { 0 }; char url[128] = { 0 };
snprintf(url, sizeof(url), "http://%s/Snapshot/%u/1/RemoteImageCaptureV2?ImageFormat=jpg", m_ip.c_str(), (uint32_t)streamID); snprintf(url, sizeof(url), "http://%s/Snapshot/%u/1/RemoteImageCaptureV2?ImageFormat=jpg", m_ip.c_str(), (uint32_t)streamID);
int nRet = DoGetRequest(url, HTTP_AUTH_TYPE_BASIC, m_userName.c_str(), m_password.c_str(), m_netHandle, img); int nRet = DoGetRequest(url, HTTP_AUTH_TYPE_BASIC, m_userName.c_str(), m_password.c_str(), m_netHandle, img, &m_lastErrorCode);
if (0 == nRet) if (0 == nRet)
{ {
bool qualityDowngraded = false; bool qualityDowngraded = false;
@ -210,7 +208,7 @@ bool HangYuCtrl::TakePhoto(uint8_t streamID, std::vector<uint8_t>& img)
qualityDowngraded = DowngradeQuality(originalConfig); qualityDowngraded = DowngradeQuality(originalConfig);
XYLOG(XYLOG_SEVERITY_INFO,"Reduce Img Quality"); XYLOG(XYLOG_SEVERITY_INFO,"Reduce Img Quality");
} }
nRet = DoGetRequest(url, HTTP_AUTH_TYPE_BASIC, m_userName.c_str(), m_password.c_str(), m_netHandle, img); nRet = DoGetRequest(url, HTTP_AUTH_TYPE_BASIC, m_userName.c_str(), m_password.c_str(), m_netHandle, img, &m_lastErrorCode);
if (!originalConfig.empty()) if (!originalConfig.empty())
{ {
UpdateQuality(originalConfig); UpdateQuality(originalConfig);

@ -194,7 +194,7 @@ bool HikonCtrl::TakePhoto(uint8_t streamID, std::vector<uint8_t>& img)
{ {
char url[128] = { 0 }; char url[128] = { 0 };
snprintf(url, sizeof(url), "http://%s/ISAPI/Streaming/channels/1/picture?", m_ip.c_str()); snprintf(url, sizeof(url), "http://%s/ISAPI/Streaming/channels/1/picture?", m_ip.c_str());
int nRet = DoGetRequest(url, HTTP_AUTH_TYPE_DIGEST, m_userName.c_str(), m_password.c_str(), m_netHandle, img); int nRet = DoGetRequest(url, HTTP_AUTH_TYPE_DIGEST, m_userName.c_str(), m_password.c_str(), m_netHandle, img, &m_lastErrorCode);
return nRet == 0; return nRet == 0;
} }

@ -2,6 +2,7 @@
// Created by Matthew on 2025/3/4. // Created by Matthew on 2025/3/4.
// //
#include "VendorCtrl.h" #include "VendorCtrl.h"
#include <curl/curl.h>
VendorCtrl::VendorCtrl(const std::string& ip, const std::string& userName, const std::string& password, uint8_t channel, net_handle_t netHandle, bool syncTime/* = true*/) : VendorCtrl::VendorCtrl(const std::string& ip, const std::string& userName, const std::string& password, uint8_t channel, net_handle_t netHandle, bool syncTime/* = true*/) :
m_ip(ip), m_userName(userName), m_password(password), m_channel(channel), m_netHandle(netHandle) m_ip(ip), m_userName(userName), m_password(password), m_channel(channel), m_netHandle(netHandle)
@ -22,4 +23,9 @@ std::string VendorCtrl::CvtJSONToString(const Json::Value& data)
builder["indentation"] = ""; builder["indentation"] = "";
#endif #endif
return Json::writeString(builder, data); return Json::writeString(builder, data);
}
bool VendorCtrl::IsTimeout() const
{
return m_lastErrorCode == CURLE_OPERATION_TIMEDOUT;
} }

@ -30,6 +30,8 @@ public:
void UpdateNetHandle(net_handle_t netHandle) { m_netHandle = netHandle; } void UpdateNetHandle(net_handle_t netHandle) { m_netHandle = netHandle; }
int GetLastError() const { return m_lastErrorCode; }
bool IsTimeout() const;
protected: protected:
@ -41,6 +43,7 @@ protected:
std::string m_password; std::string m_password;
uint8_t m_channel; uint8_t m_channel;
net_handle_t m_netHandle; net_handle_t m_netHandle;
int m_lastErrorCode;
}; };

@ -162,7 +162,7 @@ bool YuShiCtrl::TakePhoto(uint8_t streamID, std::vector<uint8_t>& img)
int streamSid = 0; // should put into config int streamSid = 0; // should put into config
snprintf(url, sizeof(url), "/LAPI/V1.0/Channels/%u/Media/Video/Streams/%d/Snapshot", (uint32_t)streamID, streamSid); snprintf(url, sizeof(url), "/LAPI/V1.0/Channels/%u/Media/Video/Streams/%d/Snapshot", (uint32_t)streamID, streamSid);
int nRet = DoGetRequest(url, HTTP_AUTH_TYPE_DIGEST, m_userName.c_str(), m_password.c_str(), m_netHandle, img); int nRet = DoGetRequest(url, HTTP_AUTH_TYPE_DIGEST, m_userName.c_str(), m_password.c_str(), m_netHandle, img, &m_lastErrorCode);
return nRet == 0; return nRet == 0;
} }

@ -21,7 +21,6 @@ static size_t OnWriteData(void* buffer, size_t size, size_t nmemb, void* lpVoid)
static int SockOptCallback(void *clientp, curl_socket_t curlfd, curlsocktype purpose) static int SockOptCallback(void *clientp, curl_socket_t curlfd, curlsocktype purpose)
{ {
net_handle_t netHandle = *((net_handle_t *)clientp); net_handle_t netHandle = *((net_handle_t *)clientp);
int res = android_setsocknetwork(netHandle, curlfd); int res = android_setsocknetwork(netHandle, curlfd);
@ -34,7 +33,7 @@ static int SockOptCallback(void *clientp, curl_socket_t curlfd, curlsocktype pur
return res == 0 ? CURL_SOCKOPT_OK : CURL_SOCKOPT_ERROR; return res == 0 ? CURL_SOCKOPT_OK : CURL_SOCKOPT_ERROR;
} }
int DoGetRequest(const char* url, int authType, const char* userName, const char* password, net_handle_t netHandle, std::vector<uint8_t>& data) int DoGetRequest(const char* url, int authType, const char* userName, const char* password, net_handle_t netHandle, std::vector<uint8_t>& data, int* curlResVal/* = NULL*/)
{ {
CURLcode nRet; CURLcode nRet;
std::string auth; std::string auth;
@ -88,6 +87,10 @@ int DoGetRequest(const char* url, int authType, const char* userName, const char
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10); curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
nRet = curl_easy_perform(curl); nRet = curl_easy_perform(curl);
if (curlResVal != NULL)
{
*curlResVal = nRet;
}
long responseCode = 0; long responseCode = 0;
if (CURLE_OK == nRet) if (CURLE_OK == nRet)
@ -122,7 +125,7 @@ int DoGetRequest(const char* url, int authType, const char* userName, const char
return ((0 == nRet) && (responseCode == 200)) ? 0 : 1; return ((0 == nRet) && (responseCode == 200)) ? 0 : 1;
} }
int DoPutRequest(const char* url, int authType, const char* userName, const char* password, net_handle_t netHandle, const char* contents, std::vector<uint8_t>& data) int DoPutRequest(const char* url, int authType, const char* userName, const char* password, net_handle_t netHandle, const char* contents, std::vector<uint8_t>& data, int* curlResVal/* = NULL*/)
{ {
std::string auth; std::string auth;
@ -171,6 +174,10 @@ int DoPutRequest(const char* url, int authType, const char* userName, const char
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10); curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
CURLcode nRet = curl_easy_perform(curl); CURLcode nRet = curl_easy_perform(curl);
if (curlResVal != NULL)
{
*curlResVal = nRet;
}
if (CURLE_OK != nRet) if (CURLE_OK != nRet)
{ {
printf("GET err=%d", nRet); printf("GET err=%d", nRet);

@ -18,7 +18,7 @@
bool setIPAddress(const char *if_name, const char *ip_addr, const char *net_mask, const char *gateway_addr); bool setIPAddress(const char *if_name, const char *ip_addr, const char *net_mask, const char *gateway_addr);
int DoGetRequest(const char* url, int authType, const char* userName, const char* password, net_handle_t netHandle, std::vector<uint8_t>& data); int DoGetRequest(const char* url, int authType, const char* userName, const char* password, net_handle_t netHandle, std::vector<uint8_t>& data, int* curlResVal = NULL);
int DoPutRequest(const char* url, int authType, const char* userName, const char* password, net_handle_t netHandle, const char* contents, std::vector<uint8_t>& data); int DoPutRequest(const char* url, int authType, const char* userName, const char* password, net_handle_t netHandle, const char* contents, std::vector<uint8_t>& data, int* curlResVal = NULL);
#endif // __HTTP_CLIENT__ #endif // __HTTP_CLIENT__
Loading…
Cancel
Save