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;