mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
for #319, dumps the http static, remux and globals.
This commit is contained in:
parent
5efd1912f2
commit
bdfd0ae09e
4 changed files with 326 additions and 2 deletions
|
@ -443,6 +443,50 @@ vhost ingest.srs.com {
|
|||
}
|
||||
}
|
||||
|
||||
# the vhost for intest with transcode engine.
|
||||
vhost transcode.ingest.srs.com {
|
||||
ingest livestream {
|
||||
enabled on;
|
||||
input {
|
||||
type file;
|
||||
url ./doc/source.200kbps.768x320.flv;
|
||||
}
|
||||
ffmpeg ./objs/ffmpeg/bin/ffmpeg;
|
||||
engine {
|
||||
enabled off;
|
||||
iformat flv;
|
||||
vfilter {
|
||||
i ./doc/ffmpeg-logo.png;
|
||||
filter_complex 'overlay=10:10';
|
||||
}
|
||||
vcodec libx264;
|
||||
vbitrate 1500;
|
||||
vfps 25;
|
||||
vwidth 768;
|
||||
vheight 320;
|
||||
vthreads 12;
|
||||
vprofile main;
|
||||
vpreset medium;
|
||||
vparams {
|
||||
t 100;
|
||||
coder 1;
|
||||
b_strategy 2;
|
||||
bf 3;
|
||||
refs 10;
|
||||
}
|
||||
acodec libfdk_aac;
|
||||
abitrate 70;
|
||||
asample_rate 44100;
|
||||
achannels 2;
|
||||
aparams {
|
||||
profile:a aac_low;
|
||||
}
|
||||
oformat flv;
|
||||
output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# vhost for http static and flv vod stream for each vhost.
|
||||
vhost http.static.srs.com {
|
||||
# http static vhost specified config
|
||||
|
|
|
@ -1796,6 +1796,177 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
|
|||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
SrsConfDirective* dir = NULL;
|
||||
|
||||
// security
|
||||
if ((dir = vhost->get("security")) != NULL) {
|
||||
SrsAmf0Object* security = SrsAmf0Any::object();
|
||||
obj->set("security", security);
|
||||
|
||||
SrsAmf0StrictArray* allows = SrsAmf0Any::strict_array();
|
||||
security->set("allows", allows);
|
||||
|
||||
for (int i = 0; i < (int)dir->directives.size(); i++) {
|
||||
SrsConfDirective* sdir = dir->directives.at(i);
|
||||
|
||||
if (sdir->name == "enabled") {
|
||||
security->set("enabled", sdir->dumps_arg0_to_boolean());
|
||||
} else if (sdir->name == "allow") {
|
||||
SrsAmf0Object* allow = SrsAmf0Any::object();
|
||||
allow->set("action", SrsAmf0Any::str(sdir->name.c_str()));
|
||||
allow->set("method", SrsAmf0Any::str(sdir->arg0().c_str()));
|
||||
allow->set("entry", SrsAmf0Any::str(sdir->arg1().c_str()));
|
||||
allows->append(allow);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// mrw
|
||||
if ((dir = vhost->get("min_latency")) != NULL) {
|
||||
obj->set("min_latency", dir->dumps_arg0_to_boolean());
|
||||
}
|
||||
if ((dir = vhost->get("mr")) != NULL) {
|
||||
SrsAmf0Object* mr = SrsAmf0Any::object();
|
||||
obj->set("mr", mr);
|
||||
|
||||
for (int i = 0; i < (int)dir->directives.size(); i++) {
|
||||
SrsConfDirective* sdir = dir->directives.at(i);
|
||||
|
||||
if (sdir->name == "enabled") {
|
||||
mr->set("enabled", sdir->dumps_arg0_to_boolean());
|
||||
} else if (sdir->name == "latency") {
|
||||
mr->set("latency", sdir->dumps_arg0_to_number());
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((dir = vhost->get("mw_latency")) != NULL) {
|
||||
obj->set("mw_latency", dir->dumps_arg0_to_number());
|
||||
}
|
||||
|
||||
// edge.
|
||||
if ((dir = vhost->get("mode")) != NULL) {
|
||||
obj->set("mode", dir->dumps_arg0_to_str());
|
||||
}
|
||||
if ((dir = vhost->get("origin")) != NULL) {
|
||||
obj->set("origin", dir->dumps_args());
|
||||
}
|
||||
if ((dir = vhost->get("token_traverse")) != NULL) {
|
||||
obj->set("token_traverse", dir->dumps_arg0_to_boolean());
|
||||
}
|
||||
if ((dir = vhost->get("vhost")) != NULL) {
|
||||
obj->set("vhost", dir->dumps_arg0_to_str());
|
||||
}
|
||||
|
||||
// dvr
|
||||
if ((dir = vhost->get("dvr")) != NULL) {
|
||||
SrsAmf0Object* dvr = SrsAmf0Any::object();
|
||||
obj->set("dvr", dvr);
|
||||
|
||||
for (int i = 0; i < (int)dir->directives.size(); i++) {
|
||||
SrsConfDirective* sdir = dir->directives.at(i);
|
||||
|
||||
if (sdir->name == "enabled") {
|
||||
dvr->set("enabled", sdir->dumps_arg0_to_boolean());
|
||||
} else if (sdir->name == "dvr_plan") {
|
||||
dvr->set("dvr_plan", sdir->dumps_arg0_to_str());
|
||||
} else if (sdir->name == "dvr_path") {
|
||||
dvr->set("dvr_path", sdir->dumps_arg0_to_str());
|
||||
} else if (sdir->name == "dvr_duration") {
|
||||
dvr->set("dvr_duration", sdir->dumps_arg0_to_number());
|
||||
} else if (sdir->name == "dvr_wait_keyframe") {
|
||||
dvr->set("dvr_wait_keyframe", sdir->dumps_arg0_to_boolean());
|
||||
} else if (sdir->name == "time_jitter") {
|
||||
dvr->set("time_jitter", sdir->dumps_arg0_to_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ingest
|
||||
SrsAmf0StrictArray* ingests = NULL;
|
||||
for (int i = 0; i < (int)vhost->directives.size(); i++) {
|
||||
dir = vhost->directives.at(i);
|
||||
if (dir->name != "ingest") {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!ingests) {
|
||||
ingests = SrsAmf0Any::strict_array();
|
||||
obj->set("ingests", ingests);
|
||||
}
|
||||
|
||||
SrsAmf0Object* ingest = SrsAmf0Any::object();
|
||||
ingest->set("id", dir->dumps_arg0_to_str());
|
||||
ingests->append(ingest);
|
||||
|
||||
for (int j = 0; j < (int)dir->directives.size(); j++) {
|
||||
SrsConfDirective* sdir = dir->directives.at(j);
|
||||
|
||||
if (sdir->name == "enabled") {
|
||||
ingest->set("enabled", sdir->dumps_arg0_to_boolean());
|
||||
} else if (sdir->name == "input") {
|
||||
SrsAmf0Object* input = SrsAmf0Any::object();
|
||||
ingest->set("input", input);
|
||||
|
||||
SrsConfDirective* type = sdir->get("type");
|
||||
if (type) {
|
||||
input->set("type", type->dumps_arg0_to_str());
|
||||
}
|
||||
|
||||
SrsConfDirective* url = sdir->get("url");
|
||||
if (url) {
|
||||
input->set("url", url->dumps_arg0_to_str());
|
||||
}
|
||||
} else if (sdir->name == "ffmpeg") {
|
||||
ingest->set("ffmpeg", sdir->dumps_arg0_to_str());
|
||||
} else if (sdir->name == "engine") {
|
||||
SrsAmf0Object* engine = SrsAmf0Any::object();
|
||||
ingest->set("engine", engine);
|
||||
|
||||
if ((ret = dumps_engine(sdir, engine)) != ERROR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// http_static
|
||||
if ((dir = vhost->get("http_static")) != NULL) {
|
||||
SrsAmf0Object* http_static = SrsAmf0Any::object();
|
||||
obj->set("http_static", http_static);
|
||||
|
||||
for (int i = 0; i < (int)dir->directives.size(); i++) {
|
||||
SrsConfDirective* sdir = dir->directives.at(i);
|
||||
|
||||
if (sdir->name == "enabled") {
|
||||
http_static->set("enabled", sdir->dumps_arg0_to_boolean());
|
||||
} else if (sdir->name == "mount") {
|
||||
http_static->set("mount", sdir->dumps_arg0_to_str());
|
||||
} else if (sdir->name == "dir") {
|
||||
http_static->set("dir", sdir->dumps_arg0_to_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// http_remux
|
||||
if ((dir = vhost->get("http_remux")) != NULL) {
|
||||
SrsAmf0Object* http_remux = SrsAmf0Any::object();
|
||||
obj->set("http_remux", http_remux);
|
||||
|
||||
for (int i = 0; i < (int)dir->directives.size(); i++) {
|
||||
SrsConfDirective* sdir = dir->directives.at(i);
|
||||
|
||||
if (sdir->name == "enabled") {
|
||||
http_remux->set("enabled", sdir->dumps_arg0_to_boolean());
|
||||
} else if (sdir->name == "fast_cache") {
|
||||
http_remux->set("fast_cache", sdir->dumps_arg0_to_number());
|
||||
} else if (sdir->name == "mount") {
|
||||
http_remux->set("mount", sdir->dumps_arg0_to_str());
|
||||
} else if (sdir->name == "hstrs") {
|
||||
http_remux->set("hstrs", sdir->dumps_arg0_to_boolean());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1820,6 +1991,109 @@ int SrsConfig::raw_to_json(SrsAmf0Object* obj)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int SrsConfig::dumps_engine(SrsConfDirective* dir, SrsAmf0Object* engine)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
SrsConfDirective* conf = NULL;
|
||||
|
||||
if ((conf = dir->get("enabled")) != NULL) {
|
||||
engine->set("enabled", conf->dumps_arg0_to_boolean());
|
||||
}
|
||||
|
||||
if ((conf = dir->get("iformat")) != NULL) {
|
||||
engine->set("iformat", conf->dumps_arg0_to_str());
|
||||
}
|
||||
|
||||
if ((conf = dir->get("vfilter")) != NULL) {
|
||||
SrsAmf0Object* vfilter = SrsAmf0Any::object();
|
||||
engine->set("vfilter", vfilter);
|
||||
|
||||
for (int i = 0; i < (int)conf->directives.size(); i++) {
|
||||
SrsConfDirective* sdir = conf->directives.at(i);
|
||||
vfilter->set(sdir->name, sdir->dumps_arg0_to_str());
|
||||
}
|
||||
}
|
||||
|
||||
if ((conf = dir->get("vcodec")) != NULL) {
|
||||
engine->set("vcodec", conf->dumps_arg0_to_str());
|
||||
}
|
||||
|
||||
if ((conf = dir->get("vbitrate")) != NULL) {
|
||||
engine->set("vbitrate", conf->dumps_arg0_to_number());
|
||||
}
|
||||
|
||||
if ((conf = dir->get("vfps")) != NULL) {
|
||||
engine->set("vfps", conf->dumps_arg0_to_number());
|
||||
}
|
||||
|
||||
if ((conf = dir->get("vwidth")) != NULL) {
|
||||
engine->set("vwidth", conf->dumps_arg0_to_number());
|
||||
}
|
||||
|
||||
if ((conf = dir->get("vheight")) != NULL) {
|
||||
engine->set("vheight", conf->dumps_arg0_to_number());
|
||||
}
|
||||
|
||||
if ((conf = dir->get("vthreads")) != NULL) {
|
||||
engine->set("vthreads", conf->dumps_arg0_to_number());
|
||||
}
|
||||
|
||||
if ((conf = dir->get("vprofile")) != NULL) {
|
||||
engine->set("vprofile", conf->dumps_arg0_to_str());
|
||||
}
|
||||
|
||||
if ((conf = dir->get("vpreset")) != NULL) {
|
||||
engine->set("vpreset", conf->dumps_arg0_to_str());
|
||||
}
|
||||
|
||||
if ((conf = dir->get("vparams")) != NULL) {
|
||||
SrsAmf0Object* vparams = SrsAmf0Any::object();
|
||||
engine->set("vparams", vparams);
|
||||
|
||||
for (int i = 0; i < (int)conf->directives.size(); i++) {
|
||||
SrsConfDirective* sdir = conf->directives.at(i);
|
||||
vparams->set(sdir->name, sdir->dumps_arg0_to_str());
|
||||
}
|
||||
}
|
||||
|
||||
if ((conf = dir->get("acodec")) != NULL) {
|
||||
engine->set("acodec", conf->dumps_arg0_to_str());
|
||||
}
|
||||
|
||||
if ((conf = dir->get("abitrate")) != NULL) {
|
||||
engine->set("abitrate", conf->dumps_arg0_to_number());
|
||||
}
|
||||
|
||||
if ((conf = dir->get("asample_rate")) != NULL) {
|
||||
engine->set("asample_rate", conf->dumps_arg0_to_number());
|
||||
}
|
||||
|
||||
if ((conf = dir->get("achannels")) != NULL) {
|
||||
engine->set("achannels", conf->dumps_arg0_to_number());
|
||||
}
|
||||
|
||||
if ((conf = dir->get("aparams")) != NULL) {
|
||||
SrsAmf0Object* aparams = SrsAmf0Any::object();
|
||||
engine->set("aparams", aparams);
|
||||
|
||||
for (int i = 0; i < (int)conf->directives.size(); i++) {
|
||||
SrsConfDirective* sdir = conf->directives.at(i);
|
||||
aparams->set(sdir->name, sdir->dumps_arg0_to_str());
|
||||
}
|
||||
}
|
||||
|
||||
if ((conf = dir->get("oformat")) != NULL) {
|
||||
engine->set("oformat", conf->dumps_arg0_to_str());
|
||||
}
|
||||
|
||||
if ((conf = dir->get("output")) != NULL) {
|
||||
engine->set("output", conf->dumps_arg0_to_str());
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
string SrsConfig::config()
|
||||
{
|
||||
return config_file;
|
||||
|
|
|
@ -324,6 +324,12 @@ public:
|
|||
* dumps the http_api sections to json for raw api info.
|
||||
*/
|
||||
virtual int raw_to_json(SrsAmf0Object* obj);
|
||||
private:
|
||||
/**
|
||||
* dumps the engine section to amf0 object.
|
||||
*/
|
||||
virtual int dumps_engine(SrsConfDirective* dir, SrsAmf0Object* engine);
|
||||
public:
|
||||
/**
|
||||
* get the config file path.
|
||||
*/
|
||||
|
|
|
@ -937,7 +937,7 @@ int SrsGoApiRaw::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
|
|||
if (vhost.empty()) {
|
||||
ret = ERROR_SYSTEM_CONFIG_RAW_PARAMS;
|
||||
srs_error("raw api query vhost invalid vhost=%s. ret=%d", vhost.c_str(), ret);
|
||||
return ret;
|
||||
return srs_api_response_code(w, r, ret);
|
||||
}
|
||||
|
||||
SrsConfDirective* root = _srs_config->get_root();
|
||||
|
@ -945,7 +945,7 @@ int SrsGoApiRaw::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
|
|||
if (!conf) {
|
||||
ret = ERROR_SYSTEM_CONFIG_RAW_PARAMS;
|
||||
srs_error("raw api query vhost invalid vhost=%s. ret=%d", vhost.c_str(), ret);
|
||||
return ret;
|
||||
return srs_api_response_code(w, r, ret);
|
||||
}
|
||||
|
||||
SrsAmf0Object* data = SrsAmf0Any::object();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue