From 41ead6534546bcf3a6b3a427e0e00f69c4e673f1 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 28 May 2015 19:58:16 +0800 Subject: [PATCH 1/2] support [srs-dolphin][srs-dolphin], the multiple-process SRS. --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e950fbf44..14259dd73 100755 --- a/README.md +++ b/README.md @@ -217,6 +217,7 @@ Supported operating systems and hardware: 1. [experiment] Support push MPEG-TS over UDP to SRS, read [bug #250][bug #250]. 1. [experiment] Support push RTSP to SRS, read [bug #133][bug #133]. 1. [experiment] Support push flv stream over HTTP POST to SRS, read [wiki]([CN][v2_CN_Streamer2], [EN][v2_EN_Streamer2]). +1. [experiment] Support [srs-dolphin][srs-dolphin], the multiple-process SRS. 1. [no-plan] Support <500ms latency, FRSC(Fast RTMP-compatible Stream Channel tech). 1. [no-plan] Support RTMP 302 redirect [bug #92][bug #92]. 1. [no-plan] Support multiple processes, for both origin and edge @@ -270,6 +271,7 @@ Compare SRS with other media server. | Feature | SRS | NGINX | CRTMPD | FMS | WOWZA | | ----------- | ------- | ----- | --------- | -------- | ------ | | Concurrency | 7.5k | 3k | 2k | 2k | 3k | +|MultipleProcess| Experiment| Stable | X | X | X | | RTMP Latency| 0.1s | 3s | 3s | 3s | 3s | | HLS Latency | 10s | 30s | X | 30s | 30s | @@ -306,6 +308,7 @@ Compare SRS with other media server. Remark: 1. Concurrency: The concurrency of single process. +1. MultipleProcess: SRS is single process, while [srs-dolphin][srs-dolphin] is a MultipleProcess SRS. 1. HLS aonly: The HLS audio only streaming delivery. 1. BW check: The bandwidth check. 1. Security: To allow or deny stream publish or play. @@ -339,7 +342,7 @@ Remark: ## History ### SRS 2.0 history - +* v2.0, 2015-05-28, support [srs-dolphin][srs-dolphin], the multiple-process SRS. * v2.0, 2015-05-24, fix [#404](https://github.com/simple-rtmp-server/srs/issues/404) register handler then start http thread. 2.0.167. * v2.0, 2015-05-23, refine the thread, protocol, kbps code. 2.0.166 * v2.0, 2015-05-23, fix [#391](https://github.com/simple-rtmp-server/srs/issues/391) copy request for async call. @@ -671,6 +674,7 @@ Performance benchmark history, on virtual box. * See also: [Performance for x86/x64 Test Guide](https://github.com/simple-rtmp-server/srs/wiki/v1_CN_Performance) * See also: [Performance for RaspberryPi](https://github.com/simple-rtmp-server/srs/wiki/v1_CN_RaspberryPi) +* About multiple-process performance, read [srs-dolphin][srs-dolphin]. ### Play RTMP benchmark @@ -853,6 +857,7 @@ Winlin [srs]: https://github.com/simple-rtmp-server/srs [csdn]: https://code.csdn.net/winlinvip/srs-csdn [oschina]: http://git.oschina.net/winlinvip/srs.oschina +[srs-dolphin]: https://github.com/simple-rtmp-server/srs-dolphin [gitlab]: https://gitlab.com/winlinvip/srs-gitlab [v1_CN_Git]: https://github.com/simple-rtmp-server/srs/wiki/v1_CN_Git [v1_EN_Git]: https://github.com/simple-rtmp-server/srs/wiki/v1_EN_Git From af4eec90ac061f610ffcee084fe7bfd0f115ea4b Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 28 May 2015 21:02:43 +0800 Subject: [PATCH 2/2] for srs-dolphin, support HTTP and RTMP. --- trunk/src/app/srs_app_config.cpp | 39 ++++++++++++++++++++++++++++---- trunk/src/app/srs_app_config.hpp | 3 ++- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index 23e8c92a2..cfd57f57b 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -391,12 +391,16 @@ void SrsConfig::set_config_directive(SrsConfDirective* parent, string dir, strin if (!d) { d = new SrsConfDirective(); - d->name = dir; + if (!dir.empty()) { + d->name = dir; + } parent->directives.push_back(d); } d->args.clear(); - d->args.push_back(value); + if (!value.empty()) { + d->args.push_back(value); + } } void SrsConfig::subscribe(ISrsReloadHandler* handler) @@ -1284,16 +1288,29 @@ int SrsConfig::parse_argv(int& i, char** argv) case 'p': dolphin = true; if (*p) { - dolphin_port = p; + dolphin_rtmp_port = p; continue; } if (argv[++i]) { - dolphin_port = argv[i]; + dolphin_rtmp_port = argv[i]; continue; } ret = ERROR_SYSTEM_CONFIG_INVALID; srs_error("option \"-p\" requires params, ret=%d", ret); return ret; + case 'x': + dolphin = true; + if (*p) { + dolphin_http_port = p; + continue; + } + if (argv[++i]) { + dolphin_http_port = argv[i]; + continue; + } + ret = ERROR_SYSTEM_CONFIG_INVALID; + srs_error("option \"-x\" requires params, ret=%d", ret); + return ret; case 'v': case 'V': show_help = false; @@ -1338,6 +1355,9 @@ void SrsConfig::print_help(char** argv) " -v, -V : show version and exit(0)\n" " -t : test configuration file, exit(error_code).\n" " -c filename : use configuration file for SRS\n" + "For srs-dolphin:\n" + " -p rtmp-port : the rtmp port to listen.\n" + " -x http-port : the http port to listen.\n" "\n" RTMP_SIG_SRS_WEB"\n" RTMP_SIG_SRS_URL"\n" @@ -1882,7 +1902,16 @@ int SrsConfig::parse_buffer(SrsConfigBuffer* buffer) // mock by dolphin mode. // for the dolphin will start srs with specified params. if (dolphin) { - set_config_directive(root, "listen", dolphin_port); + // for RTMP. + set_config_directive(root, "listen", dolphin_rtmp_port); + + // for HTTP + set_config_directive(root, "http_server", ""); + SrsConfDirective* http_server = root->get("http_server"); + set_config_directive(http_server, "enabled", "on"); + set_config_directive(http_server, "listen", dolphin_http_port); + + // others. set_config_directive(root, "daemon", "off"); set_config_directive(root, "srs_log_tank", "console"); } diff --git a/trunk/src/app/srs_app_config.hpp b/trunk/src/app/srs_app_config.hpp index fd822c68f..253489683 100644 --- a/trunk/src/app/srs_app_config.hpp +++ b/trunk/src/app/srs_app_config.hpp @@ -271,7 +271,8 @@ private: * @see https://github.com/simple-rtmp-server/srs-dolphin */ bool dolphin; - std::string dolphin_port; + std::string dolphin_rtmp_port; + std::string dolphin_http_port; /** * whether show help and exit. */