| | |
| | | //#include "HcRecord.h" |
| | | #include <time.h> |
| | | #include <dirent.h> |
| | | |
| | | using namespace std; |
| | | |
| | | devHttpServer_c::devHttpServer_c() |
| | |
| | | std::string picDate = value["picDate"].asString(); |
| | | |
| | | //std::string path_uuid = videoPath;//value["path_uuid"].asString(); |
| | | qint64 sub ; |
| | | std::string path = getVideoPathByTime(picDate,devId,sub); |
| | | qint64 sub; |
| | | std::string path = getVideoPathByTime(picDate, devId, sub); |
| | | |
| | | if (path.empty()) { |
| | | ERR("{\"error\":\"not find path\"}"); |
| | | return "{\"error\":\"未查到视频路径\"}"; |
| | | } |
| | | DBG("path="<<path); |
| | | DBG("path=" << path); |
| | | videoPath.clear(); |
| | | videoPath = path; |
| | | |
| | |
| | | |
| | | // sub = (dt.toMSecsSinceEpoch() - dtFile.toMSecsSinceEpoch()); |
| | | //#yanchi buchong |
| | | // sub = sub > 3000 ? sub - 3000 : 0000; |
| | | // sub = sub > 3000 ? sub - 3000 : 0000; |
| | | //shijian yuejie buchang |
| | | // sub = sub < 0 ? 0000 : sub; |
| | | int haomiao = sub % 1000; |
| | | // sub = sub < 0 ? 0000 : sub; |
| | | int haomiao = sub % 1000; |
| | | sub /= 1000; |
| | | int m = sub; |
| | | int shi, fen, miao; |
| | |
| | | Json::Reader reader; |
| | | Json::Value value; |
| | | |
| | | if (reader.parse(content, value)) |
| | | { |
| | | if (reader.parse(content, value)) { |
| | | std::string devId = value["videoNum"].asString(); |
| | | std::string picDate = value["picDate"].asString(); |
| | | qint64 sub; |
| | | std::string path=getVideoPathByTime(picDate,devId,sub); |
| | | if (path.empty()) |
| | | { |
| | | qint64 sub; |
| | | std::string path = getVideoPathByTime(picDate, devId, sub); |
| | | if (path.empty()) { |
| | | |
| | | return "{\"ret_status\":\"内容有误,请检查!\"}"; |
| | | } |
| | | else |
| | | { |
| | | } else { |
| | | std::string result = "{\"file_path\":\"" + path + "\"}"; |
| | | return result; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | } else { |
| | | return "{\"ret_status\":\"传输错误,请检查!\"}"; |
| | | } |
| | | } |
| | |
| | | return true; |
| | | } |
| | | |
| | | std::string devHttpServer_c::getVideoPathByTime(const std::string& time,const std::string& camId,qint64& sub) |
| | | { |
| | | std::string t_FilePath = appConfig.getStringProperty("cutPath"); |
| | | std::string devHttpServer_c::getVideoPathByTime(const std::string &time, const std::string &camId, qint64 &sub) { |
| | | std::string t_FilePath = appConfig.getStringProperty("cutPath"); |
| | | |
| | | bool find=false;; |
| | | if (t_FilePath.back() != '/') { |
| | | t_FilePath.push_back('/'); |
| | | } |
| | | bool find = false;; |
| | | if (t_FilePath.back() != '/') { |
| | | t_FilePath.push_back('/'); |
| | | } |
| | | |
| | | QDateTime dt = QDateTime::fromString(QString::fromStdString(time), "yyyy-MM-dd hh:mm:ss:zzz"); |
| | | QDateTime dt = QDateTime::fromString(QString::fromStdString(time), "yyyy-MM-dd hh:mm:ss:zzz"); |
| | | |
| | | std::string t_strTime=dt.toString("yyyyMMddhh").toStdString(); |
| | | //# ./camIndex/YYYYMM/DD/ |
| | | t_FilePath.append(camId + "/" + t_strTime.substr(0, 6)+ "/" +t_strTime.substr(6, 2) + "/"); |
| | | //YYYYMMDDHH |
| | | t_FilePath.append(t_strTime.substr(0,10) + "/"); |
| | | std::string t_strTime = dt.toString("yyyyMMddhh").toStdString(); |
| | | //# ./camIndex/YYYYMM/DD/ |
| | | t_FilePath.append(camId + "/" + t_strTime.substr(0, 6) + "/" + t_strTime.substr(6, 2) + "/"); |
| | | //YYYYMMDDHH |
| | | t_FilePath.append(t_strTime.substr(0, 10) + "/"); |
| | | |
| | | |
| | | qint64 t=dt.toMSecsSinceEpoch(); |
| | | std::vector<std::string> vec=forEachFile(t_FilePath); |
| | | std::sort(vec.begin(),vec.end()); |
| | | DBG("t_FilePath" << t_FilePath); |
| | | DBG("vec.size()" << vec.size()); |
| | | int size=vec.size(); |
| | | for(int i=0;i<size;++i) |
| | | { |
| | | qint64 t1=QDateTime::fromString(QString::fromStdString(vec[i]), "yyyy-MM-dd hh:mm:ss:zzz").toMSecsSinceEpoch(); |
| | | if(i+1<size) |
| | | { |
| | | qint64 t2=QDateTime::fromString(QString::fromStdString(vec[i+1]), "yyyy-MM-dd hh:mm:ss:zzz").toMSecsSinceEpoch(); |
| | | if(t>=t1 && t<t2) |
| | | { |
| | | DBG("path="<<vec[i]); |
| | | t_FilePath+=vec[i]+".mp4"; |
| | | sub=t-t1; |
| | | find=true; |
| | | break; |
| | | } |
| | | qint64 t = dt.toMSecsSinceEpoch(); |
| | | std::vector<std::string> vec = forEachFile(t_FilePath); |
| | | std::sort(vec.begin(), vec.end()); |
| | | DBG("t_FilePath" << t_FilePath); |
| | | DBG("vec.size()" << vec.size()); |
| | | int size = vec.size(); |
| | | for (int i = 0; i < size; ++i) { |
| | | qint64 t1 = QDateTime::fromString(QString::fromStdString(vec[i]), |
| | | "yyyy-MM-dd hh:mm:ss:zzz").toMSecsSinceEpoch(); |
| | | if (i + 1 < size) { |
| | | qint64 t2 = QDateTime::fromString(QString::fromStdString(vec[i + 1]), |
| | | "yyyy-MM-dd hh:mm:ss:zzz").toMSecsSinceEpoch(); |
| | | if (t >= t1 && t < t2) { |
| | | DBG("path=" << vec[i]); |
| | | t_FilePath += vec[i] + ".mp4"; |
| | | sub = t - t1; |
| | | find = true; |
| | | break; |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | sub=t-t1; |
| | | if(t>=t1 && sub<=3000) |
| | | { |
| | | DBG("path="<<vec[i]); |
| | | t_FilePath+=vec[i]+".mp4"; |
| | | find=true; |
| | | break; |
| | | } |
| | | } |
| | | } else { |
| | | sub = t - t1; |
| | | if (t >= t1 && sub <= 3000) { |
| | | DBG("path=" << vec[i]); |
| | | t_FilePath += vec[i] + ".mp4"; |
| | | find = true; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | DBG("sub="<<sub); |
| | | if(!find) |
| | | { |
| | | t_FilePath=""; |
| | | } |
| | | return t_FilePath; |
| | | } |
| | | DBG("sub=" << sub); |
| | | if (!find) { |
| | | t_FilePath = ""; |
| | | } |
| | | return t_FilePath; |
| | | |
| | | } |
| | | std::vector<std::string> devHttpServer_c::forEachFile(const std::string &dir_name) |
| | | { |
| | | std::vector<std::string> v; |
| | | auto dir = opendir(dir_name.data()); |
| | | struct dirent *ent; |
| | | int len = 0; |
| | | if (dir) { |
| | | while ((ent = readdir(dir)) != NULL) { |
| | | std::string filename = std::string(ent->d_name); |
| | | std::string temp; |
| | | if(filename!="."&&filename!="..") |
| | | { |
| | | } |
| | | |
| | | temp = filename.substr(0, filename.rfind('.')); |
| | | v.push_back(temp); |
| | | } |
| | | std::vector<std::string> devHttpServer_c::forEachFile(const std::string &dir_name) { |
| | | std::vector<std::string> v; |
| | | auto dir = opendir(dir_name.data()); |
| | | struct dirent *ent; |
| | | int len = 0; |
| | | if (dir) { |
| | | while ((ent = readdir(dir)) != NULL) { |
| | | std::string filename = std::string(ent->d_name); |
| | | std::string temp; |
| | | if (filename != "." && filename != "..") { |
| | | |
| | | } |
| | | closedir(dir); |
| | | } |
| | | return v; |
| | | } |
| | | temp = filename.substr(0, filename.rfind('.')); |
| | | v.push_back(temp); |
| | | } |
| | | |
| | | } |
| | | closedir(dir); |
| | | } |
| | | return v; |
| | | } |
| | | |
| | | std::string devHttpServer_c::addPersons(std::string ip, unsigned int port, std::string content, PResponse &response) { |
| | | DBG("ip:" << ip << "; port:" << port); |
| | |
| | | } else { |
| | | str_result = "[]"; |
| | | } |
| | | erlangDbTool->sendMessage(); |
| | | return str_result; |
| | | } else { |
| | | response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"传输错误,请检查!\"}"); |
| | |
| | | str_res = "{\"result\":\"-1\",\"msg\":\"error\",\"existDataBase\":[]}"; |
| | | ERR(ex.what()); |
| | | } |
| | | erlangDbTool->sendMessage(); |
| | | return str_res; |
| | | } else { |
| | | response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"传输错误,请检查!\"}"); |