From 8c95c6857542b3fe82cd614e45755902884358af Mon Sep 17 00:00:00 2001
From: chenshijun <csj_sky@126.com>
Date: 星期二, 29 十月 2019 14:13:13 +0800
Subject: [PATCH] 修改视频获取不到流的死等问题

---
 csrc/thirdparty/gb28181/include/PsToEs.hpp |   19 ++++++++++++++++---
 1 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/csrc/thirdparty/gb28181/include/PsToEs.hpp b/csrc/thirdparty/gb28181/include/PsToEs.hpp
index 2ac629d..df0c2ed 100644
--- a/csrc/thirdparty/gb28181/include/PsToEs.hpp
+++ b/csrc/thirdparty/gb28181/include/PsToEs.hpp
@@ -5,6 +5,7 @@
 #include <pthread.h>
 
 #include "librtsp.h"
+#include <sys/time.h>
 
 
 using namespace std;
@@ -14,7 +15,7 @@
 public:
     MyQueue():mtx(PTHREAD_MUTEX_INITIALIZER), cond(PTHREAD_COND_INITIALIZER){
         t.tv_sec = 0;
-        t.tv_nsec = 20000000;
+        t.tv_nsec = 0;
     }
 
     ~MyQueue() {
@@ -39,9 +40,16 @@
 
     T pop() {
         pthread_mutex_lock(&mtx);
-        while (q.empty()) {
-            pthread_cond_wait(&cond, &mtx);
+        if (q.empty()) {
+            gettimeofday(&now, NULL);
+            t.tv_sec = now.tv_sec + 5;
+            t.tv_nsec = now.tv_usec * 1000;
+//            pthread_cond_wait(&cond, &mtx);
             pthread_cond_timedwait(&cond, &mtx, &t);
+        }
+        if (q.empty()) {
+            pthread_mutex_unlock(&mtx);
+            return 0;
         }
         T value = q.front();
         q.pop_front();
@@ -72,6 +80,7 @@
     pthread_mutex_t mtx;
     pthread_cond_t cond;
     timespec t;
+    struct timeval now;
 };
 
 typedef struct _buffInfo {
@@ -115,7 +124,11 @@
 			//浠庣紦瀛樹腑鑾峰彇buffinfo
 			frameBuffInfo *buffinfo = _this->m_rtpQueue.pop();
 //			printf(" m_rtpQueue.pop after \n");
+            if(buffinfo != nullptr){
 			diff = len - buffinfo->buffLen;
+            }else{
+                return 0;
+            }
 
 			//甯ч暱澶т簬bufsize
 			if (diff < 0) {

--
Gitblit v1.8.0