From e5646e3bb56d4a098d1608886b62606202d02fcc Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 10 Apr 2014 09:20:23 +0800 Subject: [PATCH] refine ingester, add vhost/id info to ingester --- trunk/src/app/srs_app_ingest.cpp | 44 ++++++++++++++++++++++---------- trunk/src/app/srs_app_ingest.hpp | 15 ++++++++++- 2 files changed, 44 insertions(+), 15 deletions(-) diff --git a/trunk/src/app/srs_app_ingest.cpp b/trunk/src/app/srs_app_ingest.cpp index 3edd8d00a..4b643bdc1 100644 --- a/trunk/src/app/srs_app_ingest.cpp +++ b/trunk/src/app/srs_app_ingest.cpp @@ -25,6 +25,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #ifdef SRS_INGEST +using namespace std; + #include #include #include @@ -35,6 +37,18 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // ingest never sleep a long time, for we must start the stream ASAP. #define SRS_INGESTER_SLEEP_US (int64_t)(6*100*1000LL) +SrsIngesterFFMPEG::SrsIngesterFFMPEG(SrsFFMPEG* _ffmpeg, string _vhost, string _id) +{ + ffmpeg = _ffmpeg; + vhost = _vhost; + id = _id; +} + +SrsIngesterFFMPEG::~SrsIngesterFFMPEG() +{ + srs_freep(ffmpeg); +} + SrsIngester::SrsIngester() { // TODO: FIXME: support reload. @@ -59,7 +73,7 @@ int SrsIngester::start() } // return for error or no engine. - if (ffmpegs.empty()) { + if (ingesters.empty()) { return ret; } @@ -118,7 +132,8 @@ int SrsIngester::parse_engines(SrsConfDirective* vhost, SrsConfDirective* ingest return ret; } - ffmpegs.push_back(ffmpeg); + SrsIngesterFFMPEG* ingester = new SrsIngesterFFMPEG(ffmpeg, vhost->arg0(), ingest->arg0()); + ingesters.push_back(ingester); return ret; } @@ -135,7 +150,8 @@ int SrsIngester::parse_engines(SrsConfDirective* vhost, SrsConfDirective* ingest return ret; } - ffmpegs.push_back(ffmpeg); + SrsIngesterFFMPEG* ingester = new SrsIngesterFFMPEG(ffmpeg, vhost->arg0(), ingest->arg0()); + ingesters.push_back(ingester); } return ret; @@ -151,18 +167,18 @@ int SrsIngester::cycle() { int ret = ERROR_SUCCESS; - std::vector::iterator it; - for (it = ffmpegs.begin(); it != ffmpegs.end(); ++it) { - SrsFFMPEG* ffmpeg = *it; + std::vector::iterator it; + for (it = ingesters.begin(); it != ingesters.end(); ++it) { + SrsIngesterFFMPEG* ingester = *it; // start all ffmpegs. - if ((ret = ffmpeg->start()) != ERROR_SUCCESS) { + if ((ret = ingester->ffmpeg->start()) != ERROR_SUCCESS) { srs_error("ingest ffmpeg start failed. ret=%d", ret); return ret; } // check ffmpeg status. - if ((ret = ffmpeg->cycle()) != ERROR_SUCCESS) { + if ((ret = ingester->ffmpeg->cycle()) != ERROR_SUCCESS) { srs_error("ingest ffmpeg cycle failed. ret=%d", ret); return ret; } @@ -181,14 +197,14 @@ void SrsIngester::on_thread_stop() void SrsIngester::clear_engines() { - std::vector::iterator it; + std::vector::iterator it; - for (it = ffmpegs.begin(); it != ffmpegs.end(); ++it) { - SrsFFMPEG* ffmpeg = *it; - srs_freep(ffmpeg); + for (it = ingesters.begin(); it != ingesters.end(); ++it) { + SrsIngesterFFMPEG* ingester = *it; + srs_freep(ingester); } - ffmpegs.clear(); + ingesters.clear(); } int SrsIngester::parse() @@ -333,7 +349,7 @@ void SrsIngester::ingester() if (pithy_print->can_print()) { // TODO: FIXME: show more info. srs_trace("-> time=%"PRId64", ingesters=%d, input=%s", - pithy_print->get_age(), (int)ffmpegs.size(), input_stream_name.c_str()); + pithy_print->get_age(), (int)ingesters.size(), input_stream_name.c_str()); } } diff --git a/trunk/src/app/srs_app_ingest.hpp b/trunk/src/app/srs_app_ingest.hpp index af8f109dd..d4065f878 100644 --- a/trunk/src/app/srs_app_ingest.hpp +++ b/trunk/src/app/srs_app_ingest.hpp @@ -39,6 +39,19 @@ class SrsFFMPEG; class SrsConfDirective; class SrsPithyPrint; +/** +* ingester ffmpeg object. +*/ +struct SrsIngesterFFMPEG +{ + std::string vhost; + std::string id; + SrsFFMPEG* ffmpeg; + + SrsIngesterFFMPEG(SrsFFMPEG* _ffmpeg, std::string _vhost, std::string _id); + virtual ~SrsIngesterFFMPEG(); +}; + /** * ingest file/stream/device, * encode with FFMPEG(optional), @@ -48,7 +61,7 @@ class SrsIngester : public ISrsThreadHandler { private: std::string input_stream_name; - std::vector ffmpegs; + std::vector ingesters; private: SrsThread* pthread; SrsPithyPrint* pithy_print;