1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

refine ingester, add vhost/id info to ingester

This commit is contained in:
winlin 2014-04-10 09:20:23 +08:00
parent 017b96f9b5
commit e5646e3bb5
2 changed files with 44 additions and 15 deletions

View file

@ -25,6 +25,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifdef SRS_INGEST #ifdef SRS_INGEST
using namespace std;
#include <srs_kernel_error.hpp> #include <srs_kernel_error.hpp>
#include <srs_app_config.hpp> #include <srs_app_config.hpp>
#include <srs_kernel_log.hpp> #include <srs_kernel_log.hpp>
@ -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. // ingest never sleep a long time, for we must start the stream ASAP.
#define SRS_INGESTER_SLEEP_US (int64_t)(6*100*1000LL) #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() SrsIngester::SrsIngester()
{ {
// TODO: FIXME: support reload. // TODO: FIXME: support reload.
@ -59,7 +73,7 @@ int SrsIngester::start()
} }
// return for error or no engine. // return for error or no engine.
if (ffmpegs.empty()) { if (ingesters.empty()) {
return ret; return ret;
} }
@ -118,7 +132,8 @@ int SrsIngester::parse_engines(SrsConfDirective* vhost, SrsConfDirective* ingest
return ret; return ret;
} }
ffmpegs.push_back(ffmpeg); SrsIngesterFFMPEG* ingester = new SrsIngesterFFMPEG(ffmpeg, vhost->arg0(), ingest->arg0());
ingesters.push_back(ingester);
return ret; return ret;
} }
@ -135,7 +150,8 @@ int SrsIngester::parse_engines(SrsConfDirective* vhost, SrsConfDirective* ingest
return ret; return ret;
} }
ffmpegs.push_back(ffmpeg); SrsIngesterFFMPEG* ingester = new SrsIngesterFFMPEG(ffmpeg, vhost->arg0(), ingest->arg0());
ingesters.push_back(ingester);
} }
return ret; return ret;
@ -151,18 +167,18 @@ int SrsIngester::cycle()
{ {
int ret = ERROR_SUCCESS; int ret = ERROR_SUCCESS;
std::vector<SrsFFMPEG*>::iterator it; std::vector<SrsIngesterFFMPEG*>::iterator it;
for (it = ffmpegs.begin(); it != ffmpegs.end(); ++it) { for (it = ingesters.begin(); it != ingesters.end(); ++it) {
SrsFFMPEG* ffmpeg = *it; SrsIngesterFFMPEG* ingester = *it;
// start all ffmpegs. // 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); srs_error("ingest ffmpeg start failed. ret=%d", ret);
return ret; return ret;
} }
// check ffmpeg status. // 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); srs_error("ingest ffmpeg cycle failed. ret=%d", ret);
return ret; return ret;
} }
@ -181,14 +197,14 @@ void SrsIngester::on_thread_stop()
void SrsIngester::clear_engines() void SrsIngester::clear_engines()
{ {
std::vector<SrsFFMPEG*>::iterator it; std::vector<SrsIngesterFFMPEG*>::iterator it;
for (it = ffmpegs.begin(); it != ffmpegs.end(); ++it) { for (it = ingesters.begin(); it != ingesters.end(); ++it) {
SrsFFMPEG* ffmpeg = *it; SrsIngesterFFMPEG* ingester = *it;
srs_freep(ffmpeg); srs_freep(ingester);
} }
ffmpegs.clear(); ingesters.clear();
} }
int SrsIngester::parse() int SrsIngester::parse()
@ -333,7 +349,7 @@ void SrsIngester::ingester()
if (pithy_print->can_print()) { if (pithy_print->can_print()) {
// TODO: FIXME: show more info. // TODO: FIXME: show more info.
srs_trace("-> time=%"PRId64", ingesters=%d, input=%s", 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());
} }
} }

View file

@ -39,6 +39,19 @@ class SrsFFMPEG;
class SrsConfDirective; class SrsConfDirective;
class SrsPithyPrint; 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, * ingest file/stream/device,
* encode with FFMPEG(optional), * encode with FFMPEG(optional),
@ -48,7 +61,7 @@ class SrsIngester : public ISrsThreadHandler
{ {
private: private:
std::string input_stream_name; std::string input_stream_name;
std::vector<SrsFFMPEG*> ffmpegs; std::vector<SrsIngesterFFMPEG*> ingesters;
private: private:
SrsThread* pthread; SrsThread* pthread;
SrsPithyPrint* pithy_print; SrsPithyPrint* pithy_print;