mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
for #319, reorder the ingesters.
This commit is contained in:
parent
342483bf04
commit
2bdd974227
1 changed files with 107 additions and 107 deletions
|
@ -120,6 +120,15 @@ SrsIngester::~SrsIngester()
|
||||||
clear_engines();
|
clear_engines();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SrsIngester::dispose()
|
||||||
|
{
|
||||||
|
// first, use fast stop to notice all FFMPEG to quit gracefully.
|
||||||
|
fast_stop();
|
||||||
|
|
||||||
|
// then, use stop to wait FFMPEG quit one by one and send SIGKILL if needed.
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
|
||||||
int SrsIngester::start()
|
int SrsIngester::start()
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
@ -143,6 +152,101 @@ int SrsIngester::start()
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SrsIngester::stop()
|
||||||
|
{
|
||||||
|
pthread->stop();
|
||||||
|
clear_engines();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsIngester::fast_stop()
|
||||||
|
{
|
||||||
|
std::vector<SrsIngesterFFMPEG*>::iterator it;
|
||||||
|
for (it = ingesters.begin(); it != ingesters.end(); ++it) {
|
||||||
|
SrsIngesterFFMPEG* ingester = *it;
|
||||||
|
ingester->fast_stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ingesters.empty()) {
|
||||||
|
srs_trace("fast stop all ingesters ok.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int SrsIngester::cycle()
|
||||||
|
{
|
||||||
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
// when expired, restart all ingesters.
|
||||||
|
if (expired) {
|
||||||
|
expired = false;
|
||||||
|
|
||||||
|
// stop current ingesters.
|
||||||
|
fast_stop();
|
||||||
|
clear_engines();
|
||||||
|
|
||||||
|
// re-prase the ingesters.
|
||||||
|
if ((ret = parse()) != ERROR_SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// cycle exists ingesters.
|
||||||
|
std::vector<SrsIngesterFFMPEG*>::iterator it;
|
||||||
|
for (it = ingesters.begin(); it != ingesters.end(); ++it) {
|
||||||
|
SrsIngesterFFMPEG* ingester = *it;
|
||||||
|
|
||||||
|
// start all ffmpegs.
|
||||||
|
if ((ret = ingester->start()) != ERROR_SUCCESS) {
|
||||||
|
srs_error("ingest ffmpeg start failed. ret=%d", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check ffmpeg status.
|
||||||
|
if ((ret = ingester->cycle()) != ERROR_SUCCESS) {
|
||||||
|
srs_error("ingest ffmpeg cycle failed. ret=%d", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// pithy print
|
||||||
|
show_ingest_log_message();
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsIngester::on_thread_stop()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsIngester::clear_engines()
|
||||||
|
{
|
||||||
|
std::vector<SrsIngesterFFMPEG*>::iterator it;
|
||||||
|
|
||||||
|
for (it = ingesters.begin(); it != ingesters.end(); ++it) {
|
||||||
|
SrsIngesterFFMPEG* ingester = *it;
|
||||||
|
srs_freep(ingester);
|
||||||
|
}
|
||||||
|
|
||||||
|
ingesters.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
int SrsIngester::parse()
|
||||||
|
{
|
||||||
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
// parse ingesters
|
||||||
|
std::vector<SrsConfDirective*> vhosts;
|
||||||
|
_srs_config->get_vhosts(vhosts);
|
||||||
|
|
||||||
|
for (int i = 0; i < (int)vhosts.size(); i++) {
|
||||||
|
SrsConfDirective* vhost = vhosts[i];
|
||||||
|
if ((ret = parse_ingesters(vhost)) != ERROR_SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int SrsIngester::parse_ingesters(SrsConfDirective* vhost)
|
int SrsIngester::parse_ingesters(SrsConfDirective* vhost)
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
@ -224,110 +328,6 @@ int SrsIngester::parse_engines(SrsConfDirective* vhost, SrsConfDirective* ingest
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SrsIngester::fast_stop()
|
|
||||||
{
|
|
||||||
std::vector<SrsIngesterFFMPEG*>::iterator it;
|
|
||||||
for (it = ingesters.begin(); it != ingesters.end(); ++it) {
|
|
||||||
SrsIngesterFFMPEG* ingester = *it;
|
|
||||||
ingester->fast_stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ingesters.empty()) {
|
|
||||||
srs_trace("fast stop all ingesters ok.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SrsIngester::dispose()
|
|
||||||
{
|
|
||||||
// first, use fast stop to notice all FFMPEG to quit gracefully.
|
|
||||||
fast_stop();
|
|
||||||
|
|
||||||
// then, use stop to wait FFMPEG quit one by one and send SIGKILL if needed.
|
|
||||||
stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SrsIngester::stop()
|
|
||||||
{
|
|
||||||
pthread->stop();
|
|
||||||
clear_engines();
|
|
||||||
}
|
|
||||||
|
|
||||||
int SrsIngester::cycle()
|
|
||||||
{
|
|
||||||
int ret = ERROR_SUCCESS;
|
|
||||||
|
|
||||||
// when expired, restart all ingesters.
|
|
||||||
if (expired) {
|
|
||||||
expired = false;
|
|
||||||
|
|
||||||
// stop current ingesters.
|
|
||||||
fast_stop();
|
|
||||||
clear_engines();
|
|
||||||
|
|
||||||
// re-prase the ingesters.
|
|
||||||
if ((ret = parse()) != ERROR_SUCCESS) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// cycle exists ingesters.
|
|
||||||
std::vector<SrsIngesterFFMPEG*>::iterator it;
|
|
||||||
for (it = ingesters.begin(); it != ingesters.end(); ++it) {
|
|
||||||
SrsIngesterFFMPEG* ingester = *it;
|
|
||||||
|
|
||||||
// start all ffmpegs.
|
|
||||||
if ((ret = ingester->start()) != ERROR_SUCCESS) {
|
|
||||||
srs_error("ingest ffmpeg start failed. ret=%d", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
// check ffmpeg status.
|
|
||||||
if ((ret = ingester->cycle()) != ERROR_SUCCESS) {
|
|
||||||
srs_error("ingest ffmpeg cycle failed. ret=%d", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// pithy print
|
|
||||||
show_ingest_log_message();
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SrsIngester::on_thread_stop()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void SrsIngester::clear_engines()
|
|
||||||
{
|
|
||||||
std::vector<SrsIngesterFFMPEG*>::iterator it;
|
|
||||||
|
|
||||||
for (it = ingesters.begin(); it != ingesters.end(); ++it) {
|
|
||||||
SrsIngesterFFMPEG* ingester = *it;
|
|
||||||
srs_freep(ingester);
|
|
||||||
}
|
|
||||||
|
|
||||||
ingesters.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
int SrsIngester::parse()
|
|
||||||
{
|
|
||||||
int ret = ERROR_SUCCESS;
|
|
||||||
|
|
||||||
// parse ingesters
|
|
||||||
std::vector<SrsConfDirective*> vhosts;
|
|
||||||
_srs_config->get_vhosts(vhosts);
|
|
||||||
|
|
||||||
for (int i = 0; i < (int)vhosts.size(); i++) {
|
|
||||||
SrsConfDirective* vhost = vhosts[i];
|
|
||||||
if ((ret = parse_ingesters(vhost)) != ERROR_SUCCESS) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SrsIngester::initialize_ffmpeg(SrsFFMPEG* ffmpeg, SrsConfDirective* vhost, SrsConfDirective* ingest, SrsConfDirective* engine)
|
int SrsIngester::initialize_ffmpeg(SrsFFMPEG* ffmpeg, SrsConfDirective* vhost, SrsConfDirective* ingest, SrsConfDirective* engine)
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
@ -468,20 +468,6 @@ void SrsIngester::show_ingest_log_message()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsIngester::on_reload_vhost_added(string vhost)
|
|
||||||
{
|
|
||||||
int ret = ERROR_SUCCESS;
|
|
||||||
|
|
||||||
SrsConfDirective* _vhost = _srs_config->get_vhost(vhost);
|
|
||||||
if ((ret = parse_ingesters(_vhost)) != ERROR_SUCCESS) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
srs_trace("reload add vhost ingesters, vhost=%s", vhost.c_str());
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int SrsIngester::on_reload_vhost_removed(string vhost)
|
int SrsIngester::on_reload_vhost_removed(string vhost)
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
@ -510,6 +496,20 @@ int SrsIngester::on_reload_vhost_removed(string vhost)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int SrsIngester::on_reload_vhost_added(string vhost)
|
||||||
|
{
|
||||||
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
SrsConfDirective* _vhost = _srs_config->get_vhost(vhost);
|
||||||
|
if ((ret = parse_ingesters(_vhost)) != ERROR_SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
srs_trace("reload add vhost ingesters, vhost=%s", vhost.c_str());
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int SrsIngester::on_reload_ingest_removed(string vhost, string ingest_id)
|
int SrsIngester::on_reload_ingest_removed(string vhost, string ingest_id)
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue