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