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