From b3dd7bdf54aff8c85a36d9637258050e68820abd Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期三, 20 七月 2022 16:20:18 +0800
Subject: [PATCH] use gb tcp

---
 csrc/thirdparty/gb28181/include/PsToEs.hpp |   28 +++++++++++++++++++++++-----
 1 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/csrc/thirdparty/gb28181/include/PsToEs.hpp b/csrc/thirdparty/gb28181/include/PsToEs.hpp
index 366db70..cd582e5 100644
--- a/csrc/thirdparty/gb28181/include/PsToEs.hpp
+++ b/csrc/thirdparty/gb28181/include/PsToEs.hpp
@@ -43,7 +43,7 @@
         pthread_mutex_lock(&mtx);
         if (q.empty()) {
             gettimeofday(&now, NULL);
-            t.tv_sec = now.tv_sec + 3;
+            t.tv_sec = now.tv_sec + 12;
             t.tv_nsec = now.tv_usec * 1000;
 //            pthread_cond_wait(&cond, &mtx);
             pthread_cond_timedwait(&cond, &mtx, &t);
@@ -77,7 +77,8 @@
 		pthread_mutex_unlock(&mtx);
     }
 	
-	void clearAll(std::function<void(T)> fn){
+    template<class F>
+	void clearAll(F&& fn){
 		pthread_mutex_lock(&mtx);
 		while (!q.empty()){
 			T value = q.front();
@@ -109,13 +110,23 @@
 		printf("GB28181API end!\n");
 		// m_rtpQueue.clearAll();
 		m_rtpQueue.clearAll([](frameBuffInfo *info){
-			delete[] info->buff;
-			delete info;
+			if (info){
+				delete[] info->buff;
+				delete info;
+			}
 		});
 		deleteCamera();
 	}
 
 	bool pushInfo(unsigned char *data, int datalen) {
+
+		while(m_rtpQueue.count_queue() > 120){
+            auto p = m_rtpQueue.popNotWait();
+            if (p){
+                delete[] p->buff;
+                delete p;
+            }
+        }
 
 		frameBuffInfo *info = new frameBuffInfo();
 		info->buff = new unsigned char[datalen];
@@ -155,6 +166,13 @@
 				info->buff = new unsigned char[buffinfo->buffLen - len]{};
 				memcpy(info->buff, buffinfo->buff + len, buffinfo->buffLen - len);
 
+				while(_this->m_rtpQueue.count_queue() > 120){
+                    auto p = _this->m_rtpQueue.popNotWait();
+                    if (p){
+                        delete[] p->buff;
+                        delete p;
+                    }
+                }
 //				printf("/甯ч暱澶т簬info->buffLen:%d\n", info->buffLen);
 				_this->m_rtpQueue.push_front_one(info);
 //				printf("/甯ч暱澶т簬info->buffLen\n");
@@ -191,7 +209,7 @@
             //浠庣紦瀛樹腑鑾峰彇buffinfo
             if (_this->m_rtpQueue.count_queue() == 0) {
 //                printf(" count_queue == 0 \n");
-                usleep(10000);
+                usleep(200000);
                 continue;
             }
 

--
Gitblit v1.8.0