diff --git a/README.md b/README.md index 960c085eb..4f3ace3f4 100755 --- a/README.md +++ b/README.md @@ -183,6 +183,20 @@ System Architecture: | All Linux(RHEL,CentOS,Ubuntu,Fedora...) | +------------------------------------------------------+ +Modularity Architecture: +
++------------------------------------------------------+ +| Main(srs/bandwidth/librtmp) | ++------------------------------------------------------+ +| App(Server/Client application) | ++------------------------------------------------------+ +| RTMP(Protocol stack) | ++------------------------------------------------------+ +| Kernel(depends on Core, provides error/log) | ++------------------------------------------------------+ +| Core(depends only on system apis) | ++------------------------------------------------------+ +Stream Architecture:
+---------+ +----------+
diff --git a/trunk/configure b/trunk/configure
index 22505c189..84a0642c9 100755
--- a/trunk/configure
+++ b/trunk/configure
@@ -133,8 +133,8 @@ CORE_OBJS="${MODULE_OBJS[@]}"
MODULE_ID="KERNEL"
MODULE_DEPENDS=("CORE")
ModuleLibIncs=(${SRS_OBJS})
-MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_reload" "srs_kernel_config"
- "srs_kernel_stream" "srs_kernel_buffer" "srs_kernel_pithy_print")
+MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_reload" "srs_kernel_stream"
+ "srs_kernel_buffer")
MODULE_DIR="src/kernel" . auto/modules.sh
KERNEL_OBJS="${MODULE_OBJS[@]}"
#
@@ -143,7 +143,7 @@ MODULE_ID="RTMP"
MODULE_DEPENDS=("CORE" "KERNEL")
ModuleLibIncs=(${SRS_OBJS} ${LibSSLRoot})
MODULE_FILES=("srs_protocol_amf0" "srs_protocol_io" "srs_protocol_rtmp_stack" "srs_protocol_rtmp"
- "srs_protocol_handshake")
+ "srs_protocol_handshake" "srs_protocol_utility")
MODULE_DIR="src/rtmp" . auto/modules.sh
RTMP_OBJS="${MODULE_OBJS[@]}"
#
@@ -151,14 +151,10 @@ RTMP_OBJS="${MODULE_OBJS[@]}"
MODULE_ID="APP"
MODULE_DEPENDS=("CORE" "KERNEL" "RTMP")
ModuleLibIncs=(${LibSTRoot} ${LibHttpParserRoot} ${SRS_OBJS})
-MODULE_FILES=("srs_core_server"
- "srs_core_conn" "srs_core_client"
- "srs_core_socket"
- "srs_core_source" "srs_core_codec"
- "srs_core_refer"
- "srs_core_hls" "srs_core_forward" "srs_core_encoder"
- "srs_core_http" "srs_core_thread" "srs_core_bandwidth"
- "srs_core_st" "srs_core_log_context")
+MODULE_FILES=("srs_core_server" "srs_core_conn" "srs_core_client" "srs_core_socket" "srs_core_source"
+ "srs_core_codec" "srs_core_refer" "srs_core_hls" "srs_core_forward" "srs_core_encoder"
+ "srs_core_http" "srs_core_thread" "srs_core_bandwidth" "srs_core_st" "srs_core_log_context"
+ "srs_kernel_config" "srs_kernel_pithy_print")
MODULE_DIR="src/app" . auto/modules.sh
APP_OBJS="${MODULE_OBJS[@]}"
#
diff --git a/trunk/src/app/srs_core_client.cpp b/trunk/src/app/srs_core_client.cpp
index f6a2dbd22..ca49e4d8e 100644
--- a/trunk/src/app/srs_core_client.cpp
+++ b/trunk/src/app/srs_core_client.cpp
@@ -103,6 +103,24 @@ int SrsClient::do_cycle()
}
srs_verbose("rtmp connect app success");
+ // discovery vhost, resolve the vhost from config
+ SrsConfDirective* parsed_vhost = config->get_vhost(req->vhost);
+ if (parsed_vhost) {
+ req->vhost = parsed_vhost->arg0();
+ }
+
+ srs_info("discovery app success. schema=%s, vhost=%s, port=%s, app=%s",
+ req->schema.c_str(), req->vhost.c_str(), req->port.c_str(), req->app.c_str());
+
+ if (req->schema.empty() || req->vhost.empty() || req->port.empty() || req->app.empty()) {
+ ret = ERROR_RTMP_REQ_TCURL;
+ srs_error("discovery tcUrl failed. "
+ "tcUrl=%s, schema=%s, vhost=%s, port=%s, app=%s, ret=%d",
+ req->tcUrl.c_str(), req->schema.c_str(), req->vhost.c_str(), req->port.c_str(), req->app.c_str(), ret);
+ return ret;
+ }
+
+ // check vhost
if ((ret = check_vhost()) != ERROR_SUCCESS) {
srs_error("check vhost failed. ret=%d", ret);
return ret;
diff --git a/trunk/src/app/srs_core_forward.cpp b/trunk/src/app/srs_core_forward.cpp
index d5c451f62..3e6182455 100644
--- a/trunk/src/app/srs_core_forward.cpp
+++ b/trunk/src/app/srs_core_forward.cpp
@@ -28,16 +28,17 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include
#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
#include
#include
#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
SrsForwarder::SrsForwarder(SrsSource* _source)
{
diff --git a/trunk/src/kernel/srs_kernel_config.cpp b/trunk/src/app/srs_kernel_config.cpp
similarity index 99%
rename from trunk/src/kernel/srs_kernel_config.cpp
rename to trunk/src/app/srs_kernel_config.cpp
index 764ad5860..2952f43f4 100644
--- a/trunk/src/kernel/srs_kernel_config.cpp
+++ b/trunk/src/app/srs_kernel_config.cpp
@@ -39,6 +39,7 @@ using namespace std;
#include
#include
+#include
#include
#define FILE_OFFSET(fd) lseek(fd, 0, SEEK_CUR)
diff --git a/trunk/src/kernel/srs_kernel_config.hpp b/trunk/src/app/srs_kernel_config.hpp
similarity index 97%
rename from trunk/src/kernel/srs_kernel_config.hpp
rename to trunk/src/app/srs_kernel_config.hpp
index 0f535ced0..12354dc66 100644
--- a/trunk/src/kernel/srs_kernel_config.hpp
+++ b/trunk/src/app/srs_kernel_config.hpp
@@ -38,8 +38,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define RTMP_VHOST_DEFAULT "__defaultVhost__"
#define SRS_LOCALHOST "127.0.0.1"
-#define RTMP_DEFAULT_PORT 1935
-#define RTMP_DEFAULT_PORTS "1935"
#define SRS_CONF_DEFAULT_HLS_PATH "./objs/nginx/html"
#define SRS_CONF_DEFAULT_HLS_FRAGMENT 10
@@ -57,9 +55,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// the interval in seconds for bandwidth check
#define SRS_CONF_DEFAULT_BANDWIDTH_LIMIT_KBPS 1000
-// the default chunk size for system.
-#define SRS_CONF_DEFAULT_CHUNK_SIZE 60000
-
#define SRS_STAGE_PLAY_USER_INTERVAL_MS 1300
#define SRS_STAGE_PUBLISH_USER_INTERVAL_MS 1100
#define SRS_STAGE_FORWARDER_INTERVAL_MS 2000
diff --git a/trunk/src/kernel/srs_kernel_pithy_print.cpp b/trunk/src/app/srs_kernel_pithy_print.cpp
similarity index 100%
rename from trunk/src/kernel/srs_kernel_pithy_print.cpp
rename to trunk/src/app/srs_kernel_pithy_print.cpp
diff --git a/trunk/src/kernel/srs_kernel_pithy_print.hpp b/trunk/src/app/srs_kernel_pithy_print.hpp
similarity index 100%
rename from trunk/src/kernel/srs_kernel_pithy_print.hpp
rename to trunk/src/app/srs_kernel_pithy_print.hpp
diff --git a/trunk/src/core/srs_core.cpp b/trunk/src/core/srs_core.cpp
index 1099e346e..4574837bb 100644
--- a/trunk/src/core/srs_core.cpp
+++ b/trunk/src/core/srs_core.cpp
@@ -85,27 +85,3 @@ std::string srs_dns_resolve(std::string host)
return ipv4;
}
-void srs_vhost_resolve(std::string& vhost, std::string& app)
-{
- app = srs_replace(app, "...", "?");
-
- size_t pos = 0;
- if ((pos = app.find("?")) == std::string::npos) {
- return;
- }
-
- std::string query = app.substr(pos + 1);
- app = app.substr(0, pos);
-
- if ((pos = query.find("vhost?")) != std::string::npos
- || (pos = query.find("vhost=")) != std::string::npos
- || (pos = query.find("Vhost?")) != std::string::npos
- || (pos = query.find("Vhost=")) != std::string::npos
- ) {
- query = query.substr(pos + 6);
- if (!query.empty()) {
- vhost = query;
- }
- }
-}
-
diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp
index f6a4693ad..ddcf5e7ec 100644
--- a/trunk/src/core/srs_core.hpp
+++ b/trunk/src/core/srs_core.hpp
@@ -96,11 +96,6 @@ extern void srs_update_system_time_ms();
extern std::string srs_replace(std::string str, std::string old_str, std::string new_str);
// dns resolve utility, return the resolved ip address.
extern std::string srs_dns_resolve(std::string host);
-// resolve the vhost in query string
-// @param app, may contains the vhost in query string format:
-// app?vhost=request_vhost
-// app...vhost...request_vhost
-extern void srs_vhost_resolve(std::string& vhost, std::string& app);
/**
* disable copy constructor of class
diff --git a/trunk/src/rtmp/srs_protocol_rtmp.cpp b/trunk/src/rtmp/srs_protocol_rtmp.cpp
index 4c4a5d7c3..65984e0d4 100644
--- a/trunk/src/rtmp/srs_protocol_rtmp.cpp
+++ b/trunk/src/rtmp/srs_protocol_rtmp.cpp
@@ -24,13 +24,13 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include
#include
-#include
#include
#include
-#include
#include
-#include
#include
+#include
+#include
+#include
using namespace std;
@@ -127,27 +127,6 @@ int SrsRequest::discovery_app()
srs_vhost_resolve(vhost, app);
strip();
- // resolve the vhost from config
- SrsConfDirective* parsed_vhost = config->get_vhost(vhost);
- if (parsed_vhost) {
- vhost = parsed_vhost->arg0();
- }
-
- // TODO: discovery the params of vhost.
-
- srs_info("discovery app success. schema=%s, vhost=%s, port=%s, app=%s",
- schema.c_str(), vhost.c_str(), port.c_str(), app.c_str());
-
- if (schema.empty() || vhost.empty() || port.empty() || app.empty()) {
- ret = ERROR_RTMP_REQ_TCURL;
- srs_error("discovery tcUrl failed. "
- "tcUrl=%s, schema=%s, vhost=%s, port=%s, app=%s, ret=%d",
- tcUrl.c_str(), schema.c_str(), vhost.c_str(), port.c_str(), app.c_str(), ret);
- return ret;
- }
-
- strip();
-
return ret;
}
diff --git a/trunk/src/rtmp/srs_protocol_utility.cpp b/trunk/src/rtmp/srs_protocol_utility.cpp
new file mode 100644
index 000000000..00f60bfa6
--- /dev/null
+++ b/trunk/src/rtmp/srs_protocol_utility.cpp
@@ -0,0 +1,48 @@
+/*
+The MIT License (MIT)
+
+Copyright (c) 2013-2014 winlin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include
+
+void srs_vhost_resolve(std::string& vhost, std::string& app)
+{
+ app = srs_replace(app, "...", "?");
+
+ size_t pos = 0;
+ if ((pos = app.find("?")) == std::string::npos) {
+ return;
+ }
+
+ std::string query = app.substr(pos + 1);
+ app = app.substr(0, pos);
+
+ if ((pos = query.find("vhost?")) != std::string::npos
+ || (pos = query.find("vhost=")) != std::string::npos
+ || (pos = query.find("Vhost?")) != std::string::npos
+ || (pos = query.find("Vhost=")) != std::string::npos
+ ) {
+ query = query.substr(pos + 6);
+ if (!query.empty()) {
+ vhost = query;
+ }
+ }
+}
diff --git a/trunk/src/rtmp/srs_protocol_utility.hpp b/trunk/src/rtmp/srs_protocol_utility.hpp
new file mode 100644
index 000000000..e40359bdc
--- /dev/null
+++ b/trunk/src/rtmp/srs_protocol_utility.hpp
@@ -0,0 +1,44 @@
+/*
+The MIT License (MIT)
+
+Copyright (c) 2013-2014 winlin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef SRS_RTMP_PROTOCOL_CONSTS_HPP
+#define SRS_RTMP_PROTOCOL_CONSTS_HPP
+
+/*
+#include
+*/
+#include
+
+#define RTMP_DEFAULT_PORT 1935
+#define RTMP_DEFAULT_PORTS "1935"
+
+// the default chunk size for system.
+#define SRS_CONF_DEFAULT_CHUNK_SIZE 60000
+
+// resolve the vhost in query string
+// @param app, may contains the vhost in query string format:
+// app?vhost=request_vhost
+// app...vhost...request_vhost
+extern void srs_vhost_resolve(std::string& vhost, std::string& app);
+
+#endif
diff --git a/trunk/src/srs/srs.upp b/trunk/src/srs/srs.upp
index da8aea401..eb4db85af 100755
--- a/trunk/src/srs/srs.upp
+++ b/trunk/src/srs/srs.upp
@@ -12,14 +12,10 @@ file
kernel readonly separator,
..\kernel\srs_kernel_buffer.hpp,
..\kernel\srs_kernel_buffer.cpp,
- ..\kernel\srs_kernel_config.hpp,
- ..\kernel\srs_kernel_config.cpp,
..\kernel\srs_kernel_error.hpp,
..\kernel\srs_kernel_error.cpp,
..\kernel\srs_kernel_log.hpp,
..\kernel\srs_kernel_log.cpp,
- ..\kernel\srs_kernel_pithy_print.hpp,
- ..\kernel\srs_kernel_pithy_print.cpp,
..\kernel\srs_kernel_reload.hpp,
..\kernel\srs_kernel_reload.cpp,
..\kernel\srs_kernel_stream.hpp,
@@ -35,6 +31,8 @@ file
..\rtmp\srs_protocol_rtmp.cpp,
..\rtmp\srs_protocol_rtmp_stack.hpp,
..\rtmp\srs_protocol_rtmp_stack.cpp,
+ ..\rtmp\srs_protocol_utility.hpp,
+ ..\rtmp\srs_protocol_utility.cpp,
app readonly separator,
..\app\srs_core_bandwidth.hpp,
..\app\srs_core_bandwidth.cpp,
@@ -44,6 +42,8 @@ file
..\app\srs_core_codec.cpp,
..\app\srs_core_conn.hpp,
..\app\srs_core_conn.cpp,
+ ..\app\srs_kernel_config.hpp,
+ ..\app\srs_kernel_config.cpp,
..\app\srs_core_encoder.hpp,
..\app\srs_core_encoder.cpp,
..\app\srs_core_forward.hpp,
@@ -56,6 +56,8 @@ file
..\app\srs_core_log_context.cpp,
..\app\srs_core_refer.hpp,
..\app\srs_core_refer.cpp,
+ ..\app\srs_kernel_pithy_print.hpp,
+ ..\app\srs_kernel_pithy_print.cpp,
..\app\srs_core_thread.hpp,
..\app\srs_core_thread.cpp,
..\app\srs_core_server.hpp,