diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index ce4071c84..23556e306 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -562,6 +562,7 @@ int SrsConfig::reload() } } srs_trace("reload remove vhost %s success.", vhost.c_str()); + continue; } // merge config: vhost modified. diff --git a/trunk/src/app/srs_app_ingest.cpp b/trunk/src/app/srs_app_ingest.cpp index 844daa604..70208366b 100644 --- a/trunk/src/app/srs_app_ingest.cpp +++ b/trunk/src/app/srs_app_ingest.cpp @@ -273,13 +273,6 @@ int SrsIngester::initialize_ffmpeg(SrsFFMPEG* ffmpeg, SrsConfDirective* vhost, S log_file += "-"; log_file += stream; log_file += ".log"; - - // stream name: vhost/app/stream for print - input_stream_name = vhost->arg0(); - input_stream_name += "/"; - input_stream_name += app; - input_stream_name += "/"; - input_stream_name += stream; // input std::string input_type = _srs_config->get_ingest_input_type(ingest); @@ -346,12 +339,17 @@ int SrsIngester::initialize_ffmpeg(SrsFFMPEG* ffmpeg, SrsConfDirective* vhost, S void SrsIngester::ingester() { - // reportable - if (pithy_print->can_print()) { - // TODO: FIXME: show more info. - srs_trace("-> time=%"PRId64", ingesters=%d, input=%s", - pithy_print->get_age(), (int)ingesters.size(), input_stream_name.c_str()); + if ((int)ingesters.size() <= 0) { + return; } + + // reportable + if (!pithy_print->can_print()) { + return; + } + + // TODO: FIXME: show more info. + srs_trace("-> time=%"PRId64", ingesters=%d", pithy_print->get_age(), (int)ingesters.size()); } int SrsIngester::on_reload_vhost_added(string vhost) @@ -366,4 +364,33 @@ int SrsIngester::on_reload_vhost_added(string vhost) return ret; } +int SrsIngester::on_reload_vhost_removed(string vhost) +{ + int ret = ERROR_SUCCESS; + + std::vector::iterator it; + + for (it = ingesters.begin(); it != ingesters.end();) { + SrsIngesterFFMPEG* ingester = *it; + + if (ingester->vhost != vhost) { + ++it; + continue; + } + + // stop the ffmpeg and free it. + ingester->ffmpeg->stop(); + + srs_trace("reload stop ingester, " + "vhost=%s, id=%s", vhost.c_str(), ingester->id.c_str()); + + srs_freep(ingester); + + // remove the item from ingesters. + it = ingesters.erase(it); + } + + return ret; +} + #endif diff --git a/trunk/src/app/srs_app_ingest.hpp b/trunk/src/app/srs_app_ingest.hpp index 194e456a4..a37ca7956 100644 --- a/trunk/src/app/srs_app_ingest.hpp +++ b/trunk/src/app/srs_app_ingest.hpp @@ -61,7 +61,6 @@ struct SrsIngesterFFMPEG class SrsIngester : public ISrsThreadHandler, public ISrsReloadHandler { private: - std::string input_stream_name; std::vector ingesters; private: SrsThread* pthread; @@ -85,6 +84,7 @@ private: virtual void ingester(); // interface ISrsReloadHandler. public: + virtual int on_reload_vhost_removed(std::string vhost); virtual int on_reload_vhost_added(std::string vhost); };