mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-26 12:37:09 +08:00
http api新建的rtp服务器可以自动超时移除
This commit is contained in:
parent
e58a63c528
commit
b2ff53037b
@ -761,11 +761,20 @@ void installWebApi() {
|
|||||||
|
|
||||||
RtpServer::Ptr server = std::make_shared<RtpServer>();
|
RtpServer::Ptr server = std::make_shared<RtpServer>();
|
||||||
server->start(allArgs["port"], allArgs["stream_id"], allArgs["enable_tcp"].as<bool>());
|
server->start(allArgs["port"], allArgs["stream_id"], allArgs["enable_tcp"].as<bool>());
|
||||||
val["port"] = server->getPort();
|
|
||||||
|
auto port = server->getPort();
|
||||||
|
server->setOnDetach([port]() {
|
||||||
|
//设置rtp超时移除事件
|
||||||
|
lock_guard<recursive_mutex> lck(s_rtpServerMapMtx);
|
||||||
|
s_rtpServerMap.erase(port);
|
||||||
|
});
|
||||||
|
|
||||||
//保存对象
|
//保存对象
|
||||||
lock_guard<recursive_mutex> lck(s_rtpServerMapMtx);
|
lock_guard<recursive_mutex> lck(s_rtpServerMapMtx);
|
||||||
s_rtpServerMap.emplace(server->getPort(), server);
|
s_rtpServerMap.emplace(port, server);
|
||||||
|
|
||||||
|
//回复json
|
||||||
|
val["port"] = port;
|
||||||
});
|
});
|
||||||
|
|
||||||
api_regist1("/index/api/closeRtpServer",[](API_ARGS1){
|
api_regist1("/index/api/closeRtpServer",[](API_ARGS1){
|
||||||
|
@ -177,6 +177,16 @@ bool RtpProcess::alive() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RtpProcess::onDetach(){
|
||||||
|
if(_on_detach){
|
||||||
|
_on_detach();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RtpProcess::setOnDetach(const function<void()> &cb) {
|
||||||
|
_on_detach = cb;
|
||||||
|
}
|
||||||
|
|
||||||
string RtpProcess::get_peer_ip() {
|
string RtpProcess::get_peer_ip() {
|
||||||
if(_addr){
|
if(_addr){
|
||||||
return SockUtil::inet_ntoa(((struct sockaddr_in *) _addr)->sin_addr);
|
return SockUtil::inet_ntoa(((struct sockaddr_in *) _addr)->sin_addr);
|
||||||
|
@ -44,6 +44,16 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool alive();
|
bool alive();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 超时时被RtpSelector移除时触发
|
||||||
|
*/
|
||||||
|
void onDetach();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置onDetach事件回调
|
||||||
|
*/
|
||||||
|
void setOnDetach(const function<void()> &cb);
|
||||||
|
|
||||||
/// SockInfo override
|
/// SockInfo override
|
||||||
string get_local_ip() override;
|
string get_local_ip() override;
|
||||||
uint16_t get_local_port() override;
|
uint16_t get_local_port() override;
|
||||||
@ -79,6 +89,7 @@ private:
|
|||||||
MediaInfo _media_info;
|
MediaInfo _media_info;
|
||||||
uint64_t _total_bytes = 0;
|
uint64_t _total_bytes = 0;
|
||||||
Socket::Ptr _sock;
|
Socket::Ptr _sock;
|
||||||
|
function<void()> _on_detach;
|
||||||
};
|
};
|
||||||
|
|
||||||
}//namespace mediakit
|
}//namespace mediakit
|
||||||
|
@ -91,7 +91,9 @@ void RtpSelector::onManager() {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
WarnL << "RtpProcess timeout:" << it->first;
|
WarnL << "RtpProcess timeout:" << it->first;
|
||||||
|
auto process = it->second->getProcess();
|
||||||
it = _map_rtp_process.erase(it);
|
it = _map_rtp_process.erase(it);
|
||||||
|
process->onDetach();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,6 +69,13 @@ void RtpServer::start(uint16_t local_port, const string &stream_id, bool enable
|
|||||||
|
|
||||||
_tcp_server = tcp_server;
|
_tcp_server = tcp_server;
|
||||||
_udp_server = udp_server;
|
_udp_server = udp_server;
|
||||||
|
_rtp_process = process;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RtpServer::setOnDetach(const function<void()> &cb){
|
||||||
|
if(_rtp_process){
|
||||||
|
_rtp_process->setOnDetach(cb);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EventPoller::Ptr RtpServer::getPoller() {
|
EventPoller::Ptr RtpServer::getPoller() {
|
||||||
|
@ -52,9 +52,15 @@ public:
|
|||||||
*/
|
*/
|
||||||
EventPoller::Ptr getPoller();
|
EventPoller::Ptr getPoller();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置RtpProcess onDetach事件回调
|
||||||
|
*/
|
||||||
|
void setOnDetach(const function<void()> &cb);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Socket::Ptr _udp_server;
|
Socket::Ptr _udp_server;
|
||||||
TcpServer::Ptr _tcp_server;
|
TcpServer::Ptr _tcp_server;
|
||||||
|
RtpProcess::Ptr _rtp_process;
|
||||||
function<void()> _on_clearup;
|
function<void()> _on_clearup;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user