From 470d4180e2b86eee41c9c14910e4131d16edb8b7 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期二, 25 五月 2021 17:02:54 +0800
Subject: [PATCH] bug fixed gb28181 capture
---
csrc/thirdparty/gb28181/include/PsToEs.hpp | 53 ++++++++++++++++++++++++++++++++++-------------------
1 files changed, 34 insertions(+), 19 deletions(-)
diff --git a/csrc/thirdparty/gb28181/include/PsToEs.hpp b/csrc/thirdparty/gb28181/include/PsToEs.hpp
index 438b06d..366db70 100644
--- a/csrc/thirdparty/gb28181/include/PsToEs.hpp
+++ b/csrc/thirdparty/gb28181/include/PsToEs.hpp
@@ -177,13 +177,17 @@
return bufsize;
}
- static int capturePic(void *opaque, char *buf, int *bufsize) {
+ static int capturePic(void *opaque, char *buf, int *bufsize, const int tt) {
GB28181API *_this = (GB28181API *) opaque;
int len = 0;
*bufsize = 0;
+ int ttt = 0;
do {
+ if (ttt > tt) return 0;
+ ttt++;
+
//浠庣紦瀛樹腑鑾峰彇buffinfo
if (_this->m_rtpQueue.count_queue() == 0) {
// printf(" count_queue == 0 \n");
@@ -196,33 +200,44 @@
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();
+ }
+ if (!buffinfo) continue;
- auto fpJpg = fopen(fileJpgName, "rb");
- if (fpJpg == NULL) {
- printf("fopen(fileJpgName, \"rb\")\n");
- return 0;
+ auto fpIframe = fopen(fileIFrameName, "wb+");
+ fwrite(buffinfo->buff, buffinfo->buffLen, 1, fpIframe);
+ fflush(fpIframe);
+ fclose(fpIframe);
+
+ 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