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:
parent
017b96f9b5
commit
e5646e3bb5
2 changed files with 44 additions and 15 deletions
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue