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 for http static and flv vod stream for each vhost.
|
||||||
vhost http.static.srs.com {
|
vhost http.static.srs.com {
|
||||||
# http static vhost specified config
|
# http static vhost specified config
|
||||||
|
|
|
@ -1796,6 +1796,177 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1820,6 +1991,109 @@ int SrsConfig::raw_to_json(SrsAmf0Object* obj)
|
||||||
return ret;
|
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()
|
string SrsConfig::config()
|
||||||
{
|
{
|
||||||
return config_file;
|
return config_file;
|
||||||
|
|
|
@ -324,6 +324,12 @@ public:
|
||||||
* dumps the http_api sections to json for raw api info.
|
* dumps the http_api sections to json for raw api info.
|
||||||
*/
|
*/
|
||||||
virtual int raw_to_json(SrsAmf0Object* obj);
|
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.
|
* get the config file path.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -937,7 +937,7 @@ int SrsGoApiRaw::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
|
||||||
if (vhost.empty()) {
|
if (vhost.empty()) {
|
||||||
ret = ERROR_SYSTEM_CONFIG_RAW_PARAMS;
|
ret = ERROR_SYSTEM_CONFIG_RAW_PARAMS;
|
||||||
srs_error("raw api query vhost invalid vhost=%s. ret=%d", vhost.c_str(), ret);
|
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();
|
SrsConfDirective* root = _srs_config->get_root();
|
||||||
|
@ -945,7 +945,7 @@ int SrsGoApiRaw::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
|
||||||
if (!conf) {
|
if (!conf) {
|
||||||
ret = ERROR_SYSTEM_CONFIG_RAW_PARAMS;
|
ret = ERROR_SYSTEM_CONFIG_RAW_PARAMS;
|
||||||
srs_error("raw api query vhost invalid vhost=%s. ret=%d", vhost.c_str(), ret);
|
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();
|
SrsAmf0Object* data = SrsAmf0Any::object();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue