diff --git a/README.md b/README.md index 1c8aaf8c9..fd97f3f07 100755 --- a/README.md +++ b/README.md @@ -343,6 +343,7 @@ Remark: ## History +* v2.0, 2016-09-23, support change work_dir for oryx. * v2.0, 2016-09-15, fix #640, typo for rtmp type. 2.0.217 * v2.0, 2016-09-12, fix fast stream error bug. 2.0.216 * v2.0, 2016-09-09, [2.0 beta1(2.0.215)][r2.0b1] released. 89941 lines. diff --git a/trunk/conf/full.conf b/trunk/conf/full.conf index f6488e3ea..a52fd7b4c 100644 --- a/trunk/conf/full.conf +++ b/trunk/conf/full.conf @@ -50,6 +50,12 @@ daemon on; # default: off utc_time off; +# the work dir for server, to chdir(work_dir) when not empty or "./" +# user can config this directory to change the dir. +# @reamrk do not support reload. +# default: ./ +work_dir ./; + ############################################################################################# # heartbeat/stats sections ############################################################################################# diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index 3b65254c8..f0b28fbc4 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -1567,7 +1567,7 @@ int SrsConfig::check_config() && n != "max_connections" && n != "daemon" && n != "heartbeat" && n != "http_api" && n != "stats" && n != "vhost" && n != "pithy_print_ms" && n != "http_stream" && n != "http_server" && n != "stream_caster" - && n != "utc_time" + && n != "utc_time" && n != "work_dir" ) { ret = ERROR_SYSTEM_CONFIG_INVALID; srs_error("unsupported directive %s, ret=%d", n.c_str(), ret); @@ -2172,6 +2172,17 @@ bool SrsConfig::get_utc_time() return SRS_CONF_PERFER_FALSE(conf->arg0()); } +string SrsConfig::get_work_dir() { + static string DEFAULT = "./"; + + SrsConfDirective* conf = root->get("work_dir"); + if( !conf || conf->arg0().empty()) { + return DEFAULT; + } + + return conf->arg0(); +} + vector SrsConfig::get_stream_casters() { srs_assert(root); diff --git a/trunk/src/app/srs_app_config.hpp b/trunk/src/app/srs_app_config.hpp index 79c1d9c25..ef0e1ff79 100644 --- a/trunk/src/app/srs_app_config.hpp +++ b/trunk/src/app/srs_app_config.hpp @@ -374,6 +374,11 @@ public: * whether use utc-time to format the time. */ virtual bool get_utc_time(); + /** + * get the configed work dir. + * ignore if empty string. + */ + virtual std::string get_work_dir(); // stream_caster section public: /** diff --git a/trunk/src/main/srs_main_server.cpp b/trunk/src/main/srs_main_server.cpp index c0bf43fd6..21a10077e 100644 --- a/trunk/src/main/srs_main_server.cpp +++ b/trunk/src/main/srs_main_server.cpp @@ -282,6 +282,13 @@ int main(int argc, char** argv) return ret; } + // change the work dir and set cwd. + std::string cwd = _srs_config->get_work_dir(); + if (!cwd.empty() && cwd != "./" && (ret = chdir(cwd.c_str())) != ERROR_SUCCESS) { + srs_error("change cwd to %s failed. ret=%d", cwd.c_str(), ret); + return ret; + } + // config parsed, initialize log. if ((ret = _srs_log->initialize()) != ERROR_SUCCESS) { return ret;