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