From f946a62d3921e86b44ff8e2973138304b9cd53cd Mon Sep 17 00:00:00 2001
From: chenshijun <csj_sky@126.com>
Date: 星期二, 16 四月 2019 16:36:32 +0800
Subject: [PATCH] 解决修改参数和推流画面跳跃问题

---
 QiaoJiaSystem/DataManagerServer/http_configserver.cpp |  185 +++++++++++++++++++++++++++++++++------------
 1 files changed, 135 insertions(+), 50 deletions(-)

diff --git a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
index f1d76be..85d8485 100644
--- a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
+++ b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -262,6 +262,8 @@
     VssDomainUnitTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
     VssLocalSettingTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
     CamDevController::instance()->registerHttpServices(_HttpSrvRetRecieve);
+    //todo
+    CamDevController::instance()->nsqMsgProducerSet(nsqMsgProducer);
     VssUpperSvrTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
 
 
@@ -1119,6 +1121,17 @@
 
     if (DEV_NO_TYPE == dev_type) {//add new camera
         db_c.updateConfigTableByDevType(DEV_CAMERA);
+        {
+            //#todo
+//            std::string topic = "VideoToImageMulth";
+//            std::string topic1 = "VideoAnalysFromHC";
+//            Json::Value json_cfg;
+//            json_cfg["cam_edit"] = content;
+//            std::string msg = json_cfg.toStyledString();
+//            DBG("msg:" << msg);
+//            nsqMsgProducer->Publish(topic, (void *) (&msg));
+//            nsqMsgProducer->Publish(topic1, (void *) (&msg));
+        }
         runAllApp();
     }
         //edit camera's sdks
@@ -1126,9 +1139,20 @@
              (rec_sdk_old.str_det_thr != rec_sdk.str_det_thr) ||
              (rec_sdk_old.str_cmp_thr != rec_sdk.str_cmp_thr)) */
     {
-        killVideoAnalysFromHCApp();
-        sleep(1);
-        runAllApp();
+        //#todo sendMessage To haikang&VideoToImage
+        {
+            std::string topic = "VideoToImageMulth";
+            std::string topic1 = "VideoAnalysFromHC";
+            Json::Value json_cfg;
+            json_cfg["cam_edit"] = content;
+            std::string msg = json_cfg.toStyledString();
+            DBG("msg:" << msg);
+            nsqMsgProducer->Publish(topic, (void *) (&msg));
+            nsqMsgProducer->Publish(topic1, (void *) (&msg));
+        }
+//        killVideoAnalysFromHCApp();
+//        sleep(1);
+//        runAllApp();
     }
 
     Json::Value value_out;
@@ -1142,11 +1166,11 @@
                                         std::string brand) const {
 
     if (brand == "haikang") {
-        bool ret = getHKDevSerialNumber(ip.c_str(), port, username.c_str(), passwd.c_str());
-        if (!ret) {
-            ERR("getHKDevSerialNumber ERR");
-            return false;
-        }
+//        bool ret = getHKDevSerialNumber(ip.c_str(), port, username.c_str(), passwd.c_str());
+//        if (!ret) {
+//            ERR("getHKDevSerialNumber ERR");
+//            return false;
+//        }
         //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream
         port = 554;//TODO
 //        std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
@@ -1196,11 +1220,11 @@
         return false;//TODO
     } else if (brand == "yushi") {
 //        rtsp://admin:admin@192.168.8.8:554/video1
-        bool ret = getUVDevSerialNumber(ip.c_str(), username.c_str(), passwd.c_str());
-        if (!ret) {
-            ERR("getUVDevSerialNumber ERR");
-            return false;
-        }
+//        bool ret = getUVDevSerialNumber(ip.c_str(), username.c_str(), passwd.c_str());
+//        if (!ret) {
+//            ERR("getUVDevSerialNumber ERR");
+//            return false;
+//        }
 
         port = 554;
 //        std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
@@ -1272,6 +1296,7 @@
             if (m_rtmp[ip].userCounter == 0) {
                 m_rtmp[ip].appPC->stop();
                 m_rtmp[ip].appPC->wait();
+                delete m_rtmp[ip].appPC;
                 m_rtmp.erase(ip);
             }
         }
@@ -1296,28 +1321,41 @@
     }
     Json::Value value;
     if (value_reader.isMember("id")) {
-        if (value_reader["id"].isNull()) return "{\"ret_status\": \"id鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
-        value["connect_status"] = "True";
-        std::string rtmp_url = appConfig.getStringProperty("srsAddr");
-        rtmp_url.append("cam").append(value_reader["id"].asCString());
-        value["video_url"] = rtmp_url;
-        out = value.toStyledString();
-
-    } else {
-        //TODO
-        //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream
+        if (value_reader["id"].isNull()) {
+            //鏈湴瑙嗛婧� 绗竴娆℃祴璇曡繛鎺�
+            //TODO
+            //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream
 //    std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":"  + std::to_string(port) + "/h264/ch1/main/av_stream";
-        bool ret = cam_connect_video_start(value_reader["str_ip"].asString(), value_reader["n_port"].asInt(), \
+            bool ret = cam_connect_video_start(value_reader["str_ip"].asString(), value_reader["n_port"].asInt(), \
                             value_reader["str_username"].asString(), value_reader["str_password"].asString(), \
                             value_reader["str_brand"].asString());
-        if (!ret) {
+            if (!ret) {
+                return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+            }
+            std::string rtmp_url = m_rtmp[value_reader["str_ip"].asCString()].appPC->getRtmp();
+            value["connect_status"] = "True";
+            value["video_url"] = rtmp_url;
+            out = value.toStyledString();
+        } else if (!value_reader["type"].isNull()) {
+
+            value["connect_status"] = "True";
+            std::string rtmp_url = appConfig.getStringProperty("srsAddr");
+            rtmp_url.append("cam").append(value_reader["id"].asCString());
+            value["video_url"] = rtmp_url;
+            out = value.toStyledString();
+            {
+                std::string topic = "VideoToImageMulth";
+                Json::Value json_cfg;
+                json_cfg["cam_startPublish"] = content;
+                std::string msg = json_cfg.toStyledString();
+                DBG("msg:" << msg);
+                nsqMsgProducer->Publish(topic, (void *) (&msg));
+            }
+        } else {
             return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
         }
-
-        std::string rtmp_url = m_rtmp[value_reader["str_ip"].asCString()].appPC->getRtmp();
-        value["connect_status"] = "True";
-        value["video_url"] = rtmp_url;
-        out = value.toStyledString();
+    } else {
+        return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
     }
 
     return out;
@@ -1335,19 +1373,32 @@
     if (!reader.parse(content, value_reader)) {
         return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
     }
-
-    //TODO
-    //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream
-//    std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":"  + std::to_string(port) + "/h264/ch1/main/av_stream";
-    DBG("cam_connect_video_stop begin");
-    bool ret = cam_connect_video_stop(value_reader["str_ip"].asString());
-    if (!ret) {
-        return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
-    }
-    DBG("cam_connect_video_stop end");
-
     Json::Value value;
-    value["ret_status"] = "ok_ack";
+    if (value_reader.isMember("id")) {
+        value["ret_status"] = "ok_ack";
+        cam_connect_video_stop(value_reader["str_ip"].asString());
+        {
+            std::string topic = "VideoToImageMulth";
+            Json::Value json_cfg;
+            json_cfg["cam_stopPublish"] = content;
+            std::string msg = json_cfg.toStyledString();
+            DBG("msg:" << msg);
+            nsqMsgProducer->Publish(topic, (void *) (&msg));
+        }
+    } else {
+        //TODO
+        //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream
+//    std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":"  + std::to_string(port) + "/h264/ch1/main/av_stream";
+        DBG("cam_connect_video_stop begin");
+        bool ret = cam_connect_video_stop(value_reader["str_ip"].asString());
+        if (!ret) {
+            return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+        }
+        DBG("cam_connect_video_stop end");
+
+        value["ret_status"] = "ok_ack";
+    }
+
 
     std::string out = value.toStyledString();
 
@@ -1408,12 +1459,22 @@
         QString cam_id = QString::fromStdString(value_reader["str_cam_dev_id"].asString());
         int ret = db_c.deleteCamDevandSdkByCamID(cam_id);
         if (ret) {
-            killVideoAnalysFromHCApp();
+//            killVideoAnalysFromHCApp();
             int dev_record = db_c.searchCamDevNumber();
             if (dev_record == 0) {
                 db_c.updateConfigTableByDevType(DEV_NO_TYPE);
             } else {
-                runAllApp();
+//                runAllApp();
+            }
+            {
+                std::string topic = "VideoToImageMulth";
+                std::string topic1 = "VideoAnalysFromHC";
+                Json::Value json_cfg;
+                json_cfg["cam_del"] = content;
+                std::string msg = json_cfg.toStyledString();
+                DBG("msg:" << msg);
+                nsqMsgProducer->Publish(topic, (void *) (&msg));
+                nsqMsgProducer->Publish(topic1, (void *) (&msg));
             }
             return "{\"ret_status\": \"ok_ack\"}";
         } else {
@@ -1714,25 +1775,32 @@
         //#todo nodes have counter?
         //#todo nodeName Automatic generated?
         //#todo devId+num
+        // 鐢熸垚鑺傜偣id - uuid
         std::string uuid = GetUUId::getUUID();
 
+        // 鑾峰彇褰撳墠鏈哄櫒ip
         unsigned char ip_old[15] = {0};
         std::string str_netIfName = appConfig.getStringProperty("netIfName");
         GetIpAddress(str_netIfName.c_str(), ip_old);
         std::string str_ip((char *) ip_old);
+        // 鑺傜偣鍚嶇О
         std::string nodeName = uuid.append("@" + str_ip);
 
         std::string cookie = value["cookie"].asString();
+        // 寮曞鑺傜偣
         std::string FatherNodeName = value["fatherNodeName"].asString();
 
         //#todo ClusterID ClusterName
+        // 闆嗙兢id
         std::string clusterID = value["culID"].asString();
+        // 涓虹┖鍒欑敓鎴�,鍚﹀垯鐩存帴浣跨敤
         clusterID = clusterID.size() > 0 ? clusterID : GetUUId::getUUID();
         std::string clusterName = value["culName"].asString();
+
         std::string devID = value["devID"].asString();
         std::string devName = value["devName"].asString();
 
-
+        // erlang鑺傜偣淇濆瓨璺緞/opt/erlang/${uuid}
         std::string path = std::string("/opt/erlang/").append(nodeName.substr(0, nodeName.find("@")));
         if (erlangDbTool != nullptr) {
             //gaunbi node
@@ -1744,6 +1812,7 @@
 
         if (cookie.size() > 0 && (clusterID.size() > 0 || clusterName.size() > 0)) {
 //            erlangDbTool = new ErlangTool::ErlangDbTool(path, nodeName, cookie);
+            // #todo 杩涚▼鍚� -> get from argv[0]
             string str_tmp = "DataWebserver";
             erlangDbTool = new ErlangTool::ErlangDbTool(path, nodeName, cookie, clusterID, clusterName, str_tmp);
             bool ret = erlangDbTool->initErlang();
@@ -1752,6 +1821,7 @@
             ret = erlangDbTool->startNodeDb(FatherNodeName, devID);
 
             if (ret) {
+                //濡傛灉鎴愬姛鍒欐洿鏂伴厤缃枃浠�
                 appConfig.setStringProperty("erlNode", nodeName);
                 appConfig.setStringProperty("erlCookie", cookie);
                 appConfig.setStringProperty("erlPath", path);
@@ -1764,6 +1834,7 @@
                 runAllApp();
 //                sleep(4);
             } else {
+                // 鍚﹀垯鍒欑疆绌洪厤缃枃浠�
                 appConfig.setStringProperty("erlNode", "");
                 appConfig.setStringProperty("erlCookie", "");
                 appConfig.setStringProperty("erlPath", "");
@@ -1796,6 +1867,7 @@
 
         ret = erlangDbTool->removeNode();
 
+        // 缃┖閰嶇疆鏂囦欢
         appConfig.setStringProperty("erlNode", "");
         appConfig.setStringProperty("erlCookie", "");
         appConfig.setStringProperty("erlPath", "");
@@ -1913,15 +1985,20 @@
         std::string Uuid = value["uuid"].asString();
         std::string TableType = value["TableType"].asString();
         std::string TableName = value["TableName"].asString();
+        //  闆嗙兢鍐呭悓姝�
         int SyncType = atoi(value["SyncType"].asCString());
         std::string BwType = value["BwType"].asString();
         std::string StartTime = value["StartTime"].asString();
         std::string EndTime = value["EndTime"].asString();
 
+        // 鏄惁涓婁紶
         std::string UploadFlag = value["IsSync"].asString();
         UploadFlag = UploadFlag.empty() ? "0" : UploadFlag;
+
+        // 搴曞簱闃堝��
         std::string CmpThreshold = value["threshold"].asString();
         CmpThreshold = CmpThreshold.empty() ? "60" : CmpThreshold;
+        // 鏄惁鍚敤
         std::string Enabled = value["enabled"].asString();
         Enabled = Enabled.empty() ? "1" : Enabled;
 
@@ -1991,7 +2068,7 @@
 //                                      Enabled);
 //        }
 
-
+        // send message to other CNode
         erlangDbTool->sendMessage();
         std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
         return str_result;
@@ -3277,11 +3354,19 @@
         if (db_c.updateSdkRule(rule)) {
 //            if(rule.nIsRun==1)
 
-            killVideoAnalysFromHCApp();
-            sleep(1);
-            runAllApp();
+//            killVideoAnalysFromHCApp();
+//            sleep(1);
+//            runAllApp();
 
-
+            {
+                std::string topic = "VideoAnalysFromHC";
+                Json::Value json_cfg;
+                json_cfg["editSdkRule"] = content;
+                std::string msg = json_cfg.toStyledString();
+                DBG("msg:" << msg);
+                usleep(1000);
+                nsqMsgProducer->Publish(topic, (void *) (&msg));
+            }
             return "{\"ret_status\": \"ok_ack\"}";
         } else {
             return "{\"ret_status\":\"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";

--
Gitblit v1.8.0