| | |
| | | |
| | | bool BASICGB28181::VideoCaptureElementWithRtp::startRtpStream(int streamTransType) { |
| | | |
| | | if(!m_waitSignalrunning) { |
| | | DBG("std::thread waitSignalAndEmit create New!!"); |
| | | //等待下层ffmpeg将rtp包解码成为图片后触发信号,然后触发当前类的submit |
| | | std::thread waitSignalAndEmit([&](BASICGB28181::VideoCaptureElementWithRtp *p_this) { |
| | | p_this->m_waitSignal = true; |
| | | p_this->m_waitSignalrunning = true; |
| | | //循环,由成员变量来维护这个线程的运行状态 |
| | | while (p_this->m_waitSignal) { |
| | | //#TODO wait test |
| | |
| | | |
| | | p_this->submit(); |
| | | } |
| | | p_this->m_waitSignalrunning = false; |
| | | INFO("waitSignalAndEmit is exit..."); |
| | | }, this); |
| | | waitSignalAndEmit.detach(); |
| | | } |
| | | |
| | | TryCath( |
| | | //--------------国标设备或则国标下级平台必须支持GB28181-2016---------------------------------------------- |
| | |
| | | //点播失败 |
| | | p_this->m_waitSignal = false; |
| | | p_this->m_running = false; |
| | | |
| | | //关闭ffmpeg解码模块 |
| | | p_this->m_fFmpegDecoderJPG.stopThd(); |
| | | ERR(p_this->m_chanPubID << " C_RealVideoStart is error lrealhandle is " << lrealhandle); |
| | | |
| | | p_this->startRtpStream(p_this->m_streamTransType); |
| | | } |
| | | |
| | | }, this, streamTransType); |
| | |
| | | |
| | | void BASICGB28181::VideoCaptureElementWithRtp::threadFunc() { |
| | | |
| | | if ((!m_running) || (!m_waitSignal)) { |
| | | // 根据reopenTime判断是否需要重启 |
| | | if (reopenTime < 0) { |
| | | stop(); |
| | | INFO("grabFrame faild, element stopping"); |
| | | return; |
| | | } else { |
| | | //todo 业务死锁 |
| | | usleep(reopenTime * 1000); |
| | | INFO("grabFrame faild, try reopen video: "); |
| | | startRtpStream(m_streamTransType); |
| | | return; |
| | | } |
| | | } |
| | | // if ((!m_running) || (!m_waitSignal)) { |
| | | //// 根据reopenTime判断是否需要重启 |
| | | // if (reopenTime < 0) { |
| | | // stop(); |
| | | // INFO("grabFrame faild, element stopping"); |
| | | // return; |
| | | // } else { |
| | | // //todo 业务死锁 |
| | | // usleep(reopenTime * 1000); |
| | | // INFO("grabFrame faild, try reopen video: "); |
| | | // startRtpStream(m_streamTransType); |
| | | // return; |
| | | // } |
| | | // } |
| | | fireConnectors(); |
| | | } |
| | | |