Commit 92bc4fbb by xiongziliang

c api测试程序防止退出时崩溃

parent 6796d0b5
ZLToolKit @ 4d88a395
Subproject commit e1b29b7fa22e18bb0976a281268c0431a411e7ce Subproject commit 4d88a395a25e9265c579aa930acdf60796bd4e4c
...@@ -72,6 +72,11 @@ typedef struct { ...@@ -72,6 +72,11 @@ typedef struct {
API_EXPORT void API_CALL mk_env_init(const mk_config *cfg); API_EXPORT void API_CALL mk_env_init(const mk_config *cfg);
/** /**
* 关闭所有服务器,请在main函数退出时调用
*/
API_EXPORT void API_CALL mk_stop_all_server();
/**
* 基础类型参数版本的mk_env_init,为了方便其他语言调用 * 基础类型参数版本的mk_env_init,为了方便其他语言调用
*/ */
API_EXPORT void API_CALL mk_env_init1( // 线程数 API_EXPORT void API_CALL mk_env_init1( // 线程数
......
...@@ -62,6 +62,14 @@ API_EXPORT void API_CALL mk_env_init(const mk_config *cfg) { ...@@ -62,6 +62,14 @@ API_EXPORT void API_CALL mk_env_init(const mk_config *cfg) {
cfg->ssl_pwd); cfg->ssl_pwd);
} }
API_EXPORT void API_CALL mk_stop_all_server(){
CLEAR_ARR(rtsp_server);
CLEAR_ARR(rtmp_server);
CLEAR_ARR(http_server);
udpRtpServer = nullptr;
tcpRtpServer = nullptr;
}
API_EXPORT void API_CALL mk_env_init1( int thread_num, API_EXPORT void API_CALL mk_env_init1( int thread_num,
int log_level, int log_level,
int ini_is_path, int ini_is_path,
......
...@@ -11,11 +11,11 @@ int main(int argc,char *argv[]){ ...@@ -11,11 +11,11 @@ int main(int argc,char *argv[]){
mk_rtsp_server_start(554,false); mk_rtsp_server_start(554,false);
mk_rtmp_server_start(1935,false); mk_rtmp_server_start(1935,false);
mk_rtp_server_start(10000); mk_rtp_server_start(10000);
static bool flag = true; static bool flag = true;
signal(SIGINT, [](int) { flag = false; });// 设置退出信号 signal(SIGINT, [](int) { flag = false; });// 设置退出信号
while (flag){ while (flag){
sleep(1); sleep(1);
} }
mk_stop_all_server();
return 0;
} }
\ No newline at end of file
...@@ -217,21 +217,23 @@ public: ...@@ -217,21 +217,23 @@ public:
private: private:
MediaSourceWatcher(){ MediaSourceWatcher(){
NoticeCenter::Instance().addListener(this,Broadcast::kBroadcastMediaChanged,[this](BroadcastMediaChangedArgs){ //保存NoticeCenter的强引用,防止在MediaSourceWatcher单例释放前释放NoticeCenter单例
_notice_center = NoticeCenter::Instance().shared_from_this();
_notice_center->addListener(this,Broadcast::kBroadcastMediaChanged,[this](BroadcastMediaChangedArgs){
if(bRegist){ if(bRegist){
onRegist(schema,vhost,app,stream,sender); onRegist(schema,vhost,app,stream,sender);
}else{ }else{
onUnRegist(schema,vhost,app,stream,sender); onUnRegist(schema,vhost,app,stream,sender);
} }
}); });
NoticeCenter::Instance().addListener(this,Broadcast::kBroadcastMediaResetTracks,[this](BroadcastMediaResetTracksArgs){ _notice_center->addListener(this,Broadcast::kBroadcastMediaResetTracks,[this](BroadcastMediaResetTracksArgs){
onRegist(schema,vhost,app,stream,sender); onRegist(schema,vhost,app,stream,sender);
}); });
} }
~MediaSourceWatcher(){ ~MediaSourceWatcher(){
NoticeCenter::Instance().delListener(this,Broadcast::kBroadcastMediaChanged); _notice_center->delListener(this,Broadcast::kBroadcastMediaChanged);
NoticeCenter::Instance().delListener(this,Broadcast::kBroadcastMediaResetTracks); _notice_center->delListener(this,Broadcast::kBroadcastMediaResetTracks);
} }
void onRegist(const string &schema,const string &vhost,const string &app,const string &stream,MediaSource &sender){ void onRegist(const string &schema,const string &vhost,const string &app,const string &stream,MediaSource &sender){
...@@ -320,6 +322,7 @@ private: ...@@ -320,6 +322,7 @@ private:
} }
private: private:
recursive_mutex _recorder_mtx; recursive_mutex _recorder_mtx;
NoticeCenter::Ptr _notice_center;
unordered_map<string, RecorderHelper::Ptr> _recorder_map; unordered_map<string, RecorderHelper::Ptr> _recorder_map;
}; };
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论