修改rtp超时检测相关http api,rtp超时检测最多暂停5分钟
This commit is contained in:
parent
d475191dc7
commit
060b654252
|
|
@ -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() {
|
||||||
|
|
||||||
bool RtpProcess::alive() {
|
bool RtpProcess::alive() {
|
||||||
if (_stop_rtp_check.load()) {
|
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)
|
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:
|
||||||
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() {
|
||||||
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)
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue