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