Commit 060b6542 by ziyue

修改rtp超时检测相关http api,rtp超时检测最多暂停5分钟

parent d475191d
...@@ -844,30 +844,23 @@ void installWebApi() { ...@@ -844,30 +844,23 @@ void installWebApi() {
CHECK_SECRET(); CHECK_SECRET();
CHECK_ARGS("stream_id"); CHECK_ARGS("stream_id");
//只是暂停流的检查,流媒体服务器做为流负载服务,收流就转发,RTSP/RTMP有自己暂停协议 //只是暂停流的检查,流媒体服务器做为流负载服务,收流就转发,RTSP/RTMP有自己暂停协议
lock_guard<recursive_mutex> lck(s_rtpServerMapMtx); auto rtp_process = RtpSelector::Instance().getProcess(allArgs["stream_id"], false);
auto it = s_rtpServerMap.find(allArgs["stream_id"]); if (rtp_process) {
if (it == s_rtpServerMap.end()) { rtp_process->setStopCheckRtp(true);
val["hit"] = 0; } else {
return; val["code"] = API::NotFound;
} }
auto server = it->second;
server->pauseRtpCheck(allArgs["stream_id"]);
val["hit"] = 1;
}); });
api_regist("/index/api/resumeRtpCheck", [](API_ARGS_MAP) { api_regist("/index/api/resumeRtpCheck", [](API_ARGS_MAP) {
CHECK_SECRET(); CHECK_SECRET();
CHECK_ARGS("stream_id"); CHECK_ARGS("stream_id");
auto rtp_process = RtpSelector::Instance().getProcess(allArgs["stream_id"], false);
lock_guard<recursive_mutex> lck(s_rtpServerMapMtx); if (rtp_process) {
auto it = s_rtpServerMap.find(allArgs["stream_id"]); rtp_process->setStopCheckRtp(false);
if (it == s_rtpServerMap.end()) { } else {
val["hit"] = 0; val["code"] = API::NotFound;
return;
} }
auto server = it->second;
server->resumeRtpCheck(allArgs["stream_id"]);
val["hit"] = 1;
}); });
#endif//ENABLE_RTPPROXY #endif//ENABLE_RTPPROXY
......
...@@ -127,9 +127,15 @@ void RtpProcess::addTrackCompleted() { ...@@ -127,9 +127,15 @@ void RtpProcess::addTrackCompleted() {
bool RtpProcess::alive() { bool RtpProcess::alive() {
if (_stop_rtp_check.load()) { if (_stop_rtp_check.load()) {
if(_last_check_alive.elapsedTime() > 5 * 60 * 1000){
//最多暂停5分钟的rtp超时检测,因为NAT映射有效期一般不会太长
_stop_rtp_check = false;
} else {
return true; return true;
} }
}
_last_check_alive.elapsedTime();
GET_CONFIG(uint64_t, timeoutSec, RtpProxy::kTimeoutSec) GET_CONFIG(uint64_t, timeoutSec, RtpProxy::kTimeoutSec)
if (_last_frame_time.elapsedTime() / 1000 < timeoutSec) { if (_last_frame_time.elapsedTime() / 1000 < timeoutSec) {
return true; return true;
......
...@@ -94,6 +94,7 @@ private: ...@@ -94,6 +94,7 @@ private:
MultiMediaSourceMuxer::Ptr _muxer; MultiMediaSourceMuxer::Ptr _muxer;
atomic_bool _stop_rtp_check{false}; atomic_bool _stop_rtp_check{false};
atomic_flag _busy_flag{false}; atomic_flag _busy_flag{false};
Ticker _last_check_alive;
}; };
}//namespace mediakit }//namespace mediakit
......
...@@ -160,31 +160,5 @@ uint16_t RtpServer::getPort() { ...@@ -160,31 +160,5 @@ uint16_t RtpServer::getPort() {
return _udp_server ? _udp_server->get_local_port() : 0; 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 }//namespace mediakit
#endif//defined(ENABLE_RTPPROXY) #endif//defined(ENABLE_RTPPROXY)
\ No newline at end of file
...@@ -57,16 +57,6 @@ public: ...@@ -57,16 +57,6 @@ public:
*/ */
void setOnDetach(const function<void()> &cb); void setOnDetach(const function<void()> &cb);
/**
* 暂停Rtp服务的RTP流检测
*/
void pauseRtpCheck(const string &stream_id = "");
/**
* 恢复Rtp服务的RTP流检测
*/
void resumeRtpCheck(const string &stream_id = "");
protected: protected:
Socket::Ptr _udp_server; Socket::Ptr _udp_server;
TcpServer::Ptr _tcp_server; TcpServer::Ptr _tcp_server;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论