From 060b654252906ad8d1c3bf1d49847944675cee8c Mon Sep 17 00:00:00 2001 From: ziyue <1213642868@qq.com> Date: Tue, 16 Mar 2021 11:30:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9rtp=E8=B6=85=E6=97=B6?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=E7=9B=B8=E5=85=B3http=20api,rtp=E8=B6=85?= =?UTF-8?q?=E6=97=B6=E6=A3=80=E6=B5=8B=E6=9C=80=E5=A4=9A=E6=9A=82=E5=81=9C?= =?UTF-8?q?5=E5=88=86=E9=92=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/WebApi.cpp | 27 ++++++++++----------------- src/Rtp/RtpProcess.cpp | 8 +++++++- src/Rtp/RtpProcess.h | 1 + src/Rtp/RtpServer.cpp | 26 -------------------------- src/Rtp/RtpServer.h | 10 ---------- 5 files changed, 18 insertions(+), 54 deletions(-) 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;