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