winlin

ingest reload: support disable vhost

@@ -562,6 +562,7 @@ int SrsConfig::reload() @@ -562,6 +562,7 @@ int SrsConfig::reload()
562 } 562 }
563 } 563 }
564 srs_trace("reload remove vhost %s success.", vhost.c_str()); 564 srs_trace("reload remove vhost %s success.", vhost.c_str());
  565 + continue;
565 } 566 }
566 567
567 // merge config: vhost modified. 568 // merge config: vhost modified.
@@ -273,13 +273,6 @@ int SrsIngester::initialize_ffmpeg(SrsFFMPEG* ffmpeg, SrsConfDirective* vhost, S @@ -273,13 +273,6 @@ int SrsIngester::initialize_ffmpeg(SrsFFMPEG* ffmpeg, SrsConfDirective* vhost, S
273 log_file += "-"; 273 log_file += "-";
274 log_file += stream; 274 log_file += stream;
275 log_file += ".log"; 275 log_file += ".log";
276 -  
277 - // stream name: vhost/app/stream for print  
278 - input_stream_name = vhost->arg0();  
279 - input_stream_name += "/";  
280 - input_stream_name += app;  
281 - input_stream_name += "/";  
282 - input_stream_name += stream;  
283 276
284 // input 277 // input
285 std::string input_type = _srs_config->get_ingest_input_type(ingest); 278 std::string input_type = _srs_config->get_ingest_input_type(ingest);
@@ -346,12 +339,17 @@ int SrsIngester::initialize_ffmpeg(SrsFFMPEG* ffmpeg, SrsConfDirective* vhost, S @@ -346,12 +339,17 @@ int SrsIngester::initialize_ffmpeg(SrsFFMPEG* ffmpeg, SrsConfDirective* vhost, S
346 339
347 void SrsIngester::ingester() 340 void SrsIngester::ingester()
348 { 341 {
  342 + if ((int)ingesters.size() <= 0) {
  343 + return;
  344 + }
  345 +
349 // reportable 346 // reportable
350 - if (pithy_print->can_print()) {  
351 - // TODO: FIXME: show more info.  
352 - srs_trace("-> time=%"PRId64", ingesters=%d, input=%s",  
353 - pithy_print->get_age(), (int)ingesters.size(), input_stream_name.c_str()); 347 + if (!pithy_print->can_print()) {
  348 + return;
354 } 349 }
  350 +
  351 + // TODO: FIXME: show more info.
  352 + srs_trace("-> time=%"PRId64", ingesters=%d", pithy_print->get_age(), (int)ingesters.size());
355 } 353 }
356 354
357 int SrsIngester::on_reload_vhost_added(string vhost) 355 int SrsIngester::on_reload_vhost_added(string vhost)
@@ -366,4 +364,33 @@ int SrsIngester::on_reload_vhost_added(string vhost) @@ -366,4 +364,33 @@ int SrsIngester::on_reload_vhost_added(string vhost)
366 return ret; 364 return ret;
367 } 365 }
368 366
  367 +int SrsIngester::on_reload_vhost_removed(string vhost)
  368 +{
  369 + int ret = ERROR_SUCCESS;
  370 +
  371 + std::vector<SrsIngesterFFMPEG*>::iterator it;
  372 +
  373 + for (it = ingesters.begin(); it != ingesters.end();) {
  374 + SrsIngesterFFMPEG* ingester = *it;
  375 +
  376 + if (ingester->vhost != vhost) {
  377 + ++it;
  378 + continue;
  379 + }
  380 +
  381 + // stop the ffmpeg and free it.
  382 + ingester->ffmpeg->stop();
  383 +
  384 + srs_trace("reload stop ingester, "
  385 + "vhost=%s, id=%s", vhost.c_str(), ingester->id.c_str());
  386 +
  387 + srs_freep(ingester);
  388 +
  389 + // remove the item from ingesters.
  390 + it = ingesters.erase(it);
  391 + }
  392 +
  393 + return ret;
  394 +}
  395 +
369 #endif 396 #endif
@@ -61,7 +61,6 @@ struct SrsIngesterFFMPEG @@ -61,7 +61,6 @@ struct SrsIngesterFFMPEG
61 class SrsIngester : public ISrsThreadHandler, public ISrsReloadHandler 61 class SrsIngester : public ISrsThreadHandler, public ISrsReloadHandler
62 { 62 {
63 private: 63 private:
64 - std::string input_stream_name;  
65 std::vector<SrsIngesterFFMPEG*> ingesters; 64 std::vector<SrsIngesterFFMPEG*> ingesters;
66 private: 65 private:
67 SrsThread* pthread; 66 SrsThread* pthread;
@@ -85,6 +84,7 @@ private: @@ -85,6 +84,7 @@ private:
85 virtual void ingester(); 84 virtual void ingester();
86 // interface ISrsReloadHandler. 85 // interface ISrsReloadHandler.
87 public: 86 public:
  87 + virtual int on_reload_vhost_removed(std::string vhost);
88 virtual int on_reload_vhost_added(std::string vhost); 88 virtual int on_reload_vhost_added(std::string vhost);
89 }; 89 };
90 90