From 19b3ad6e4e9c8e195e9255d5448ab5952b1ed54e Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期二, 25 五月 2021 16:42:02 +0800
Subject: [PATCH] bug fixed gb28181 capture

---
 csrc/thirdparty/gb28181/include/PsToEs.hpp |   45 +++++++++++++++++++++++++++------------------
 1 files changed, 27 insertions(+), 18 deletions(-)

diff --git a/csrc/thirdparty/gb28181/include/PsToEs.hpp b/csrc/thirdparty/gb28181/include/PsToEs.hpp
index c12e1e3..7a6278c 100644
--- a/csrc/thirdparty/gb28181/include/PsToEs.hpp
+++ b/csrc/thirdparty/gb28181/include/PsToEs.hpp
@@ -200,33 +200,42 @@
                 printf(" buffinfo == nullptr \n");
                 return 0;
             }
-
+////////////////////////////////////////////////////////
+            FILE* fpJpg = NULL;
+          	char fileJpgName[32] = "./tmpCaptureJpg.jpg";
             char fileIFrameName[32] = "./tmpCaptureX264IFrame";
-            auto fpIframe = fopen(fileIFrameName, "wb+");
-            fwrite(buffinfo->buff, buffinfo->buffLen, 1, fpIframe);
-            fflush(fpIframe);
-            fclose(fpIframe);
+            char cmd[512] = {0};
 
-            char cmd[128] = {0};
-            memset(cmd, 0, 128);
-            char fileJpgName[32] = "./tmpCaptureJpg.jpg";
-            sprintf(cmd, "ffmpeg -i %s -y -f image2 -ss 00:00:00 -vframes 1 %s >/dev/null", fileIFrameName,
-                    fileJpgName);
-            system(cmd);
+            for(int i = 0; i < 10 * 25; i++){
+            	if (!buffinfo){
+            		buffinfo = _this->m_rtpQueue.pop();
+            	}
+            	auto fpIframe = fopen(fileIFrameName, "wb+");
+            	fwrite(buffinfo->buff, buffinfo->buffLen, 1, fpIframe);
+            	fflush(fpIframe);
+            	fclose(fpIframe);
 
-            auto fpJpg = fopen(fileJpgName, "rb");
-            if (fpJpg == NULL) {
-                printf("fopen(fileJpgName, \"rb\")\n");
-                return 0;
+            	memset(cmd, 0, 512);
+            	sprintf(cmd, "ffmpeg -i %s -y -f image2 -ss 00:00:00 -vframes 1 %s >/dev/null", fileIFrameName,
+            	        fileJpgName);
+            	int rr = system(cmd);
+
+                delete[] buffinfo->buff;
+            	delete buffinfo;
+            	buffinfo = nullptr;
+
+            	fpJpg = fopen(fileJpgName, "rb");
+            	if (fpJpg) {
+            	    break;
+            	}
             }
+///////////////////////////////////////////////////////////
+
             fseek(fpJpg, 0, SEEK_END);
             len = ftell(fpJpg);
             fseek(fpJpg, 0, SEEK_SET);
             *bufsize = fread(buf, sizeof(char), len, fpJpg);
             fclose(fpJpg);
-
-            delete[] buffinfo->buff;
-            delete buffinfo;
 
             memset(cmd, 0, 128);
             sprintf(cmd, "rm %s %s >/dev/null", fileIFrameName, fileJpgName);

--
Gitblit v1.8.0