diff --git a/server/WebApi.cpp b/server/WebApi.cpp index 208aeb4a..a70b12d1 100755 --- a/server/WebApi.cpp +++ b/server/WebApi.cpp @@ -844,30 +844,23 @@ void installWebApi() { CHECK_SECRET(); CHECK_ARGS("stream_id"); //只是暂停流的检查,流媒体服务器做为流负载服务,收流就转发,RTSP/RTMP有自己暂停协议 - lock_guard lck(s_rtpServerMapMtx); - auto it = s_rtpServerMap.find(allArgs["stream_id"]); - if (it == s_rtpServerMap.end()) { - val["hit"] = 0; - return; + auto rtp_process = RtpSelector::Instance().getProcess(allArgs["stream_id"], false); + if (rtp_process) { + rtp_process->setStopCheckRtp(true); + } else { + val["code"] = API::NotFound; } - auto server = it->second; - server->pauseRtpCheck(allArgs["stream_id"]); - val["hit"] = 1; }); api_regist("/index/api/resumeRtpCheck", [](API_ARGS_MAP) { CHECK_SECRET(); CHECK_ARGS("stream_id"); - - lock_guard lck(s_rtpServerMapMtx); - auto it = s_rtpServerMap.find(allArgs["stream_id"]); - if (it == s_rtpServerMap.end()) { - val["hit"] = 0; - return; + auto rtp_process = RtpSelector::Instance().getProcess(allArgs["stream_id"], false); + if (rtp_process) { + rtp_process->setStopCheckRtp(false); + } else { + val["code"] = API::NotFound; } - auto server = it->second; - server->resumeRtpCheck(allArgs["stream_id"]); - val["hit"] = 1; }); #endif//ENABLE_RTPPROXY diff --git a/src/Rtp/RtpProcess.cpp b/src/Rtp/RtpProcess.cpp index 1559628e..306449b2 100644 --- a/src/Rtp/RtpProcess.cpp +++ b/src/Rtp/RtpProcess.cpp @@ -127,9 +127,15 @@ void RtpProcess::addTrackCompleted() { bool RtpProcess::alive() { if (_stop_rtp_check.load()) { - return true; + if(_last_check_alive.elapsedTime() > 5 * 60 * 1000){ + //最多暂停5分钟的rtp超时检测,因为NAT映射有效期一般不会太长 + _stop_rtp_check = false; + } else { + return true; + } } + _last_check_alive.elapsedTime(); GET_CONFIG(uint64_t, timeoutSec, RtpProxy::kTimeoutSec) if (_last_frame_time.elapsedTime() / 1000 < timeoutSec) { return true; diff --git a/src/Rtp/RtpProcess.h b/src/Rtp/RtpProcess.h index d8084d73..14e87a3c 100644 --- a/src/Rtp/RtpProcess.h +++ b/src/Rtp/RtpProcess.h @@ -94,6 +94,7 @@ private: MultiMediaSourceMuxer::Ptr _muxer; atomic_bool _stop_rtp_check{false}; atomic_flag _busy_flag{false}; + Ticker _last_check_alive; }; }//namespace mediakit diff --git a/src/Rtp/RtpServer.cpp b/src/Rtp/RtpServer.cpp index 22fb4ffb..75821c75 100644 --- a/src/Rtp/RtpServer.cpp +++ b/src/Rtp/RtpServer.cpp @@ -160,31 +160,5 @@ uint16_t RtpServer::getPort() { return _udp_server ? _udp_server->get_local_port() : 0; } -void RtpServer::pauseRtpCheck(const string &stream_id){ - if(_rtp_process) - _rtp_process->setStopCheckRtp(true); - else{ - if(!stream_id.empty()){ - auto rtp_process = RtpSelector::Instance().getProcess(stream_id,false); - if(rtp_process) - rtp_process->setStopCheckRtp(true); - } - } - -} - -void RtpServer::resumeRtpCheck(const string &stream_id){ - if(_rtp_process) - _rtp_process->setStopCheckRtp(false); - else{ - //解决不指定流或者TCP收流无法暂停 - if(!stream_id.empty()){ - auto rtp_process = RtpSelector::Instance().getProcess(stream_id,false); - if(rtp_process) - rtp_process->setStopCheckRtp(false); - } - } -} - }//namespace mediakit #endif//defined(ENABLE_RTPPROXY) \ No newline at end of file diff --git a/src/Rtp/RtpServer.h b/src/Rtp/RtpServer.h index afab76ca..42ac7c6b 100644 --- a/src/Rtp/RtpServer.h +++ b/src/Rtp/RtpServer.h @@ -57,16 +57,6 @@ public: */ void setOnDetach(const function &cb); - /** - * 暂停Rtp服务的RTP流检测 - */ - void pauseRtpCheck(const string &stream_id = ""); - - /** - * 恢复Rtp服务的RTP流检测 - */ - void resumeRtpCheck(const string &stream_id = ""); - protected: Socket::Ptr _udp_server; TcpServer::Ptr _tcp_server;