From 81d49a435bc67fa0be45056c743f2a5b46bad264 Mon Sep 17 00:00:00 2001
From: chenshijun <csj_sky@126.com>
Date: 星期四, 14 三月 2019 20:05:20 +0800
Subject: [PATCH] 解决ffmpeg打开国标流失败导致段错误的问题

---
 QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp |   10 +++++-----
 QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp           |   20 ++++++++++----------
 2 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
index b4b7f3c..9e8fd7e 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
+++ b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
@@ -143,7 +143,7 @@
  */
 void BASICGB28181::FFmpegDecoderJPG::BareFlowDecoderThd(FFmpegDecoderJPG *p_this) {
     DBG(p_this->m_camIdx << "  BareFlowDecoderThd ok ... gpuIdx is " << p_this->m_gpuIdx);
-//    while(!p_this->m_running) {
+    while(!p_this->m_running) {
 
         p_this->m_running = true;
 //    av_register_all();
@@ -154,14 +154,14 @@
         if (!p_this->iobuffer) {
             ERR("av_malloc: err======" << p_this->m_camIdx);
             p_this->m_running = false;
-            return;
+            continue;
         }
         p_this->avio = avio_alloc_context(p_this->iobuffer, p_this->m_buf_size, 0, p_this, p_this->read_data, NULL,
                                           NULL);
         if (!p_this->avio) {
             ERR("avio_alloc_context: err======" << p_this->m_camIdx);
             p_this->m_running = false;
-            return;
+            continue;
         }
         p_this->ic->pb = p_this->avio;
 
@@ -169,13 +169,13 @@
         if (err) {
             ERR("av_probe_input_buffer: err======" << err  << p_this->m_camIdx);
             p_this->m_running = false;
-            return;
+            continue;
         }
         err = avformat_open_input(&p_this->ic, "", NULL, NULL);
         if (err) {
             ERR("avformat_open_input: err======" << err  << p_this->m_camIdx);
             p_this->m_running = false;
-            return;
+            continue;
         }
 //    int err2 = avformat_find_stream_info(ic, nullptr);
         err = avformat_find_stream_info(p_this->ic, NULL);
@@ -184,7 +184,7 @@
 //        avformat_close_input(&p_this->ic);
 //        DBG("avformat_close_input(&p_this->ic);");
             p_this->m_running = false;
-            return;
+            continue;
         }
         int vi = -1;
         for (int i = 0; i < p_this->ic->nb_streams; ++i) {
@@ -202,7 +202,7 @@
 //        avformat_close_input(&p_this->ic);
 //        DBG("avformat_close_input(&p_this->ic);");
             p_this->m_running = false;
-            return;
+            continue;
         }
 
         p_this->codec = avcodec_find_decoder(p_this->ctx->codec_id);
@@ -231,7 +231,7 @@
 //        avcodec_free_context(&p_this->ctx);
 //        DBG("avcodec_free_context(&p_this->ctx);");
             p_this->m_running = false;
-            return;
+            continue;
         }
 
         av_init_packet(&p_this->pkt);
@@ -239,7 +239,7 @@
         p_this->frame = av_frame_alloc();
         unsigned int usleepTime = (1000 / p_this->m_fps) - 12;
         usleepTime *= 1000;
-        DBG(" before while <<usleepTime is " << usleepTime);
+        DBG("===open ok, camid: " << p_this->m_camIdx );
         while (p_this->m_running) {
 #ifdef TestCode
             ClockTimer Test("while time");
@@ -322,7 +322,7 @@
         }
         DBG(" after while ");
         av_frame_free(&p_this->frame);
-//    }
+    }
 }
 
 bool BASICGB28181::FFmpegDecoderJPG::startThd(const std::string &camIdx, const int &fps, const int &gpuIdx) {
diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
index aedff6b..8a1d652 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
+++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
@@ -101,12 +101,12 @@
                 p_this->m_running = true;
                 p_this->m_fFmpegDecoderJPG.startThd(p_this->m_chanPubID, p_this->m_fps, p_this->m_gpuIdx);
                 while (p_this->m_running) {
-                    if(p_this->m_fFmpegDecoderJPG.getRunning()) {
+//                    if(p_this->m_fFmpegDecoderJPG.getRunning()) {
                         usleep(300000);
-                    }else{
-                        p_this->m_running = false;
-                        break;
-                    }
+//                    }else{
+//                        p_this->m_running = false;
+//                        break;
+//                    }
                 }
                 DBG("videoCaptureElementThd stop ...");
                 C_RealVideoStop(lrealhandle);

--
Gitblit v1.8.0