diff --git a/README.md b/README.md index 2969ff97a42..38e281cc9c0 100755 --- a/README.md +++ b/README.md @@ -333,6 +333,7 @@ Remark: ## History +* v2.0, 2018-08-04, For [#1110][bug #1110], Support params in http callback. 2.0.251 * v2.0, 2018-08-02, For [#1031][bug #1031], SRS edge support douyu.com. 2.0.250 * v2.0, 2018-07-21, Merge [#1119][bug #1119], fix memory leak. 2.0.249 * v2.0, 2018-07-18, [2.0 release3(2.0.248)][r2.0r3] released. 86775 lines. @@ -1315,6 +1316,7 @@ Winlin [bug #1176]: https://github.com/ossrs/srs/issues/1176 [bug #1119]: https://github.com/ossrs/srs/issues/1119 [bug #1031]: https://github.com/ossrs/srs/issues/1031 +[bug #1110]: https://github.com/ossrs/srs/issues/1110 [bug #xxxxxxxxxx]: https://github.com/ossrs/srs/issues/xxxxxxxxxx [exo #828]: https://github.com/google/ExoPlayer/pull/828 diff --git a/trunk/src/app/srs_app_http_hooks.cpp b/trunk/src/app/srs_app_http_hooks.cpp index c6d2e92766b..58ac6919c17 100644 --- a/trunk/src/app/srs_app_http_hooks.cpp +++ b/trunk/src/app/srs_app_http_hooks.cpp @@ -131,6 +131,15 @@ int SrsHttpHooks::on_publish(string url, SrsRequest* req) int client_id = _srs_context->get_id(); + string stream = req->stream; + // Pass params in stream, @see https://github.com/ossrs/srs/issues/1031#issuecomment-409745733 + if (!req->param.empty()) { + if (req->param.find("?") != 0) { + stream += "?"; + } + stream += req->param; + } + std::stringstream ss; ss << SRS_JOBJECT_START << SRS_JFIELD_STR("action", "on_publish") << SRS_JFIELD_CONT @@ -139,7 +148,7 @@ int SrsHttpHooks::on_publish(string url, SrsRequest* req) << SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT << SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT << SRS_JFIELD_STR("tcUrl", req->tcUrl) << SRS_JFIELD_CONT // Add tcUrl for auth publish rtmp stream client - << SRS_JFIELD_STR("stream", req->stream) + << SRS_JFIELD_STR("stream", stream) << SRS_JOBJECT_END; std::string data = ss.str(); @@ -165,6 +174,15 @@ void SrsHttpHooks::on_unpublish(string url, SrsRequest* req) int client_id = _srs_context->get_id(); + string stream = req->stream; + // Pass params in stream, @see https://github.com/ossrs/srs/issues/1031#issuecomment-409745733 + if (!req->param.empty()) { + if (req->param.find("?") != 0) { + stream += "?"; + } + stream += req->param; + } + std::stringstream ss; ss << SRS_JOBJECT_START << SRS_JFIELD_STR("action", "on_unpublish") << SRS_JFIELD_CONT @@ -172,7 +190,7 @@ void SrsHttpHooks::on_unpublish(string url, SrsRequest* req) << SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT << SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT << SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT - << SRS_JFIELD_STR("stream", req->stream) + << SRS_JFIELD_STR("stream", stream) << SRS_JOBJECT_END; std::string data = ss.str(); @@ -198,6 +216,15 @@ int SrsHttpHooks::on_play(string url, SrsRequest* req) int client_id = _srs_context->get_id(); + string stream = req->stream; + // Pass params in stream, @see https://github.com/ossrs/srs/issues/1031#issuecomment-409745733 + if (!req->param.empty()) { + if (req->param.find("?") != 0) { + stream += "?"; + } + stream += req->param; + } + std::stringstream ss; ss << SRS_JOBJECT_START << SRS_JFIELD_STR("action", "on_play") << SRS_JFIELD_CONT @@ -205,7 +232,7 @@ int SrsHttpHooks::on_play(string url, SrsRequest* req) << SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT << SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT << SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT - << SRS_JFIELD_STR("stream", req->stream) << SRS_JFIELD_CONT + << SRS_JFIELD_STR("stream", stream) << SRS_JFIELD_CONT << SRS_JFIELD_STR("pageUrl", req->pageUrl) << SRS_JOBJECT_END; @@ -232,6 +259,15 @@ void SrsHttpHooks::on_stop(string url, SrsRequest* req) int client_id = _srs_context->get_id(); + string stream = req->stream; + // Pass params in stream, @see https://github.com/ossrs/srs/issues/1031#issuecomment-409745733 + if (!req->param.empty()) { + if (req->param.find("?") != 0) { + stream += "?"; + } + stream += req->param; + } + std::stringstream ss; ss << SRS_JOBJECT_START << SRS_JFIELD_STR("action", "on_stop") << SRS_JFIELD_CONT @@ -239,7 +275,7 @@ void SrsHttpHooks::on_stop(string url, SrsRequest* req) << SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT << SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT << SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT - << SRS_JFIELD_STR("stream", req->stream) + << SRS_JFIELD_STR("stream", stream) << SRS_JOBJECT_END; std::string data = ss.str(); @@ -266,6 +302,15 @@ int SrsHttpHooks::on_dvr(int cid, string url, SrsRequest* req, string file) int client_id = cid; std::string cwd = _srs_config->cwd(); + string stream = req->stream; + // Pass params in stream, @see https://github.com/ossrs/srs/issues/1031#issuecomment-409745733 + if (!req->param.empty()) { + if (req->param.find("?") != 0) { + stream += "?"; + } + stream += req->param; + } + std::stringstream ss; ss << SRS_JOBJECT_START << SRS_JFIELD_STR("action", "on_dvr") << SRS_JFIELD_CONT @@ -273,7 +318,7 @@ int SrsHttpHooks::on_dvr(int cid, string url, SrsRequest* req, string file) << SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT << SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT << SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT - << SRS_JFIELD_STR("stream", req->stream) << SRS_JFIELD_CONT + << SRS_JFIELD_STR("stream", stream) << SRS_JFIELD_CONT << SRS_JFIELD_STR("cwd", cwd) << SRS_JFIELD_CONT << SRS_JFIELD_STR("file", file) << SRS_JOBJECT_END; @@ -302,6 +347,15 @@ int SrsHttpHooks::on_hls(int cid, string url, SrsRequest* req, string file, stri int client_id = cid; std::string cwd = _srs_config->cwd(); + string stream = req->stream; + // Pass params in stream, @see https://github.com/ossrs/srs/issues/1031#issuecomment-409745733 + if (!req->param.empty()) { + if (req->param.find("?") != 0) { + stream += "?"; + } + stream += req->param; + } + // the ts_url is under the same dir of m3u8_url. string prefix = srs_path_dirname(m3u8_url); if (!prefix.empty() && !srs_string_is_http(ts_url)) { @@ -315,7 +369,7 @@ int SrsHttpHooks::on_hls(int cid, string url, SrsRequest* req, string file, stri << SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT << SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT << SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT - << SRS_JFIELD_STR("stream", req->stream) << SRS_JFIELD_CONT + << SRS_JFIELD_STR("stream", stream) << SRS_JFIELD_CONT << SRS_JFIELD_ORG("duration", duration) << SRS_JFIELD_CONT << SRS_JFIELD_STR("cwd", cwd) << SRS_JFIELD_CONT << SRS_JFIELD_STR("file", file) << SRS_JFIELD_CONT @@ -349,12 +403,21 @@ int SrsHttpHooks::on_hls_notify(int cid, std::string url, SrsRequest* req, std:: int client_id = cid; std::string cwd = _srs_config->cwd(); + string stream = req->stream; + // Pass params in stream, @see https://github.com/ossrs/srs/issues/1031#issuecomment-409745733 + if (!req->param.empty()) { + if (req->param.find("?") != 0) { + stream += "?"; + } + stream += req->param; + } + if (srs_string_is_http(ts_url)) { url = ts_url; } url = srs_string_replace(url, "[app]", req->app); - url = srs_string_replace(url, "[stream]", req->stream); + url = srs_string_replace(url, "[stream]", stream); url = srs_string_replace(url, "[ts_url]", ts_url); int64_t starttime = srs_update_system_time_ms(); diff --git a/trunk/src/app/srs_app_rtmp_conn.cpp b/trunk/src/app/srs_app_rtmp_conn.cpp index 58781768c4d..3c8aee8ed8f 100755 --- a/trunk/src/app/srs_app_rtmp_conn.cpp +++ b/trunk/src/app/srs_app_rtmp_conn.cpp @@ -438,8 +438,8 @@ int SrsRtmpConn::stream_service_cycle() srs_discovery_tc_url(req->tcUrl, req->schema, req->host, req->vhost, req->app, req->stream, req->port, req->param); req->strip(); - srs_trace("client identified, type=%s, stream_name=%s, duration=%.2f", - srs_client_type_string(type).c_str(), req->stream.c_str(), req->duration); + srs_trace("client identified, type=%s, stream_name=%s, duration=%.2f, param=%s", + srs_client_type_string(type).c_str(), req->stream.c_str(), req->duration, req->param.c_str()); // discovery vhost, resolve the vhost from config SrsConfDirective* parsed_vhost = _srs_config->get_vhost(req->vhost); @@ -460,10 +460,10 @@ int SrsRtmpConn::stream_service_cycle() return ret; } - srs_trace("connected stream, tcUrl=%s, pageUrl=%s, swfUrl=%s, schema=%s, vhost=%s, port=%s, app=%s, stream=%s, args=%s", + srs_trace("connected stream, tcUrl=%s, pageUrl=%s, swfUrl=%s, schema=%s, vhost=%s, port=%s, app=%s, stream=%s, param=%s, args=%s", req->tcUrl.c_str(), req->pageUrl.c_str(), req->swfUrl.c_str(), req->schema.c_str(), req->vhost.c_str(), req->port.c_str(), - req->app.c_str(), req->stream.c_str(), (req->args? "(obj)":"null")); + req->app.c_str(), req->stream.c_str(), req->param.c_str(), (req->args? "(obj)":"null")); // do token traverse before serve it. // @see https://github.com/ossrs/srs/pull/239 diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 62352b69ee5..c2ceadcf9bd 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR 2 #define VERSION_MINOR 0 -#define VERSION_REVISION 250 +#define VERSION_REVISION 251 // generated by configure, only macros. #include