From f346559ee07016172cab40b7fca5b2c5e09df899 Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期四, 21 七月 2022 16:13:38 +0800 Subject: [PATCH] bug fixed --- csrc/wrapper.cpp | 5 ++++- csrc/thirdparty/gb28181/include/PsToEs.hpp | 37 +++++++++++++++++++++++-------------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/csrc/thirdparty/gb28181/include/PsToEs.hpp b/csrc/thirdparty/gb28181/include/PsToEs.hpp index cd582e5..d73d93c 100644 --- a/csrc/thirdparty/gb28181/include/PsToEs.hpp +++ b/csrc/thirdparty/gb28181/include/PsToEs.hpp @@ -7,20 +7,23 @@ #include <unistd.h> #include "librtsp.h" #include <sys/time.h> - +#include <errno.h> using namespace std; template<typename T> class MyQueue { public: - MyQueue():mtx(PTHREAD_MUTEX_INITIALIZER), cond(PTHREAD_COND_INITIALIZER){ - t.tv_sec = 0; - t.tv_nsec = 0; + MyQueue():mtx(PTHREAD_MUTEX_INITIALIZER){ + pthread_condattr_t attr; + pthread_condattr_init(&attr); + pthread_condattr_setclock(&attr, CLOCK_MONOTONIC); + pthread_cond_init(&cond, &attr); + pthread_condattr_destroy(&attr); } ~MyQueue() { - + pthread_cond_destroy(&cond); } public: @@ -40,14 +43,22 @@ } T pop() { + struct timespec now, end; + clock_gettime(CLOCK_MONOTONIC, &now); + static uint64_t waitS = 12; // wait + end.tv_sec = now.tv_sec + waitS; + end.tv_nsec = now.tv_nsec; + + // printf("======>>wait stream data\n"); pthread_mutex_lock(&mtx); - if (q.empty()) { - gettimeofday(&now, NULL); - 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); + while(q.empty()){ + if(pthread_cond_timedwait(&cond, &mtx, &end) == ETIMEDOUT){ + printf("======>>timeout quit\n"); + break; + } } + // printf("======>>queue size %lu\n", q.size()); + if (q.empty()) { pthread_mutex_unlock(&mtx); return 0; @@ -91,8 +102,6 @@ deque<T> q; pthread_mutex_t mtx; pthread_cond_t cond; - timespec t; - struct timeval now; }; typedef struct _buffInfo { @@ -290,7 +299,7 @@ void deleteCamera(){ printf("RTSPSTREAM_Close\n"); - if(handle != -1){ + if(handle > -1){ RTSPSTREAM_Close(handle); } diff --git a/csrc/wrapper.cpp b/csrc/wrapper.cpp index d5d212b..e4540b3 100644 --- a/csrc/wrapper.cpp +++ b/csrc/wrapper.cpp @@ -211,7 +211,10 @@ string url = input_url_; while(!stop_stream_.load()){ if (gb_){ - url = input_url_ + gb_suffix[gs_idx]; + if (input_url_.find("/StreamType=") == string::npos) + url = input_url_ + gb_suffix[gs_idx]; + + logIt("======>>input real url %s\n", url.c_str()); } auto in = init_reader(url.c_str()); -- Gitblit v1.8.0