diff --git a/README.md b/README.md index 3ec026e3b..6bc20f44e 100755 --- a/README.md +++ b/README.md @@ -390,6 +390,7 @@ Remark: * v3.0, 2015-08-31, fix [#319][bug #319], http raw api support query global and vhost. * v3.0, 2015-08-28, fix [#471][bug #471], api response the width and height. 3.0.2 * v3.0, 2015-08-25, fix [#367][bug #367], support nginx-rtmp exec. 3.0.1 +* v2.0, 2016-11-09, [2.0 beta2(2.0.221)][r2.0b2] released. 86691 lines. * v2.0, 2016-09-09, [2.0 beta1(2.0.215)][r2.0b1] released. 89941 lines. * v2.0, 2016-08-06, [2.0 beta0(2.0.210)][r2.0b0] released. 89704 lines. * v2.0, 2015-12-23, [2.0 alpha3(2.0.205)][r2.0a3] released. 89544 lines. diff --git a/trunk/src/app/srs_app_http_stream.cpp b/trunk/src/app/srs_app_http_stream.cpp index f25bdd30a..dbfc8b944 100755 --- a/trunk/src/app/srs_app_http_stream.cpp +++ b/trunk/src/app/srs_app_http_stream.cpp @@ -1232,11 +1232,9 @@ int SrsHttpStreamServer::hijack(ISrsHttpMessage* request, ISrsHttpHandler** ph) } } - SrsSource* s = SrsSource::fetch(r); - if (!s) { - if ((ret = SrsSource::create(r, server, server, &s)) != ERROR_SUCCESS) { - return ret; - } + SrsSource* s = NULL; + if ((ret = SrsSource::fetch_or_create(r, server, server, &s)) != ERROR_SUCCESS) { + return ret; } srs_assert(s != NULL); diff --git a/trunk/src/app/srs_app_rtmp_conn.cpp b/trunk/src/app/srs_app_rtmp_conn.cpp index 9c02bf759..5135ae120 100644 --- a/trunk/src/app/srs_app_rtmp_conn.cpp +++ b/trunk/src/app/srs_app_rtmp_conn.cpp @@ -709,11 +709,9 @@ int SrsRtmpConn::stream_service_cycle() rtmp->set_send_timeout(SRS_CONSTS_RTMP_TIMEOUT_US); // find a source to serve. - SrsSource* source = SrsSource::fetch(req); - if (!source) { - if ((ret = SrsSource::create(req, server, server, &source)) != ERROR_SUCCESS) { - return ret; - } + SrsSource* source = NULL; + if ((ret = SrsSource::fetch_or_create(req, server, server, &source)) != ERROR_SUCCESS) { + return ret; } srs_assert(source != NULL); diff --git a/trunk/src/app/srs_app_source.cpp b/trunk/src/app/srs_app_source.cpp index 802e16991..3ac286148 100755 --- a/trunk/src/app/srs_app_source.cpp +++ b/trunk/src/app/srs_app_source.cpp @@ -737,17 +737,23 @@ ISrsSourceHandler::~ISrsSourceHandler() std::map SrsSource::pool; -int SrsSource::create(SrsRequest* r, ISrsSourceHandler* h, ISrsHlsHandler* hh, SrsSource** pps) +int SrsSource::fetch_or_create(SrsRequest* r, ISrsSourceHandler* h, ISrsHlsHandler* hh, SrsSource** pps) { int ret = ERROR_SUCCESS; + SrsSource* source = NULL; + if ((source = fetch(r)) != NULL) { + *pps = source; + return ret; + } + string stream_url = r->get_stream_url(); string vhost = r->vhost; // should always not exists for create a source. srs_assert (pool.find(stream_url) == pool.end()); - SrsSource* source = new SrsSource(); + source = new SrsSource(); if ((ret = source->initialize(r, h, hh)) != ERROR_SUCCESS) { srs_freep(source); return ret; @@ -780,20 +786,6 @@ SrsSource* SrsSource::fetch(SrsRequest* r) return source; } -SrsSource* SrsSource::fetch(std::string vhost, std::string app, std::string stream) -{ - SrsSource* source = NULL; - string stream_url = srs_generate_stream_url(vhost, app, stream); - - if (pool.find(stream_url) == pool.end()) { - return NULL; - } - - source = pool[stream_url]; - - return source; -} - void SrsSource::dispose_all() { std::map::iterator it; diff --git a/trunk/src/app/srs_app_source.hpp b/trunk/src/app/srs_app_source.hpp index 367878141..4f7ed3081 100644 --- a/trunk/src/app/srs_app_source.hpp +++ b/trunk/src/app/srs_app_source.hpp @@ -420,22 +420,20 @@ private: static std::map pool; public: /** - * find stream by vhost/app/stream. + * create source when fetch from cache failed. * @param r the client request. * @param h the event handler for source. * @param hh the event handler for hls. * @param pps the matched source, if success never be NULL. */ - static int create(SrsRequest* r, ISrsSourceHandler* h, ISrsHlsHandler* hh, SrsSource** pps); + static int fetch_or_create(SrsRequest* r, ISrsSourceHandler* h, ISrsHlsHandler* hh, SrsSource** pps); +private: /** * get the exists source, NULL when not exists. * update the request and return the exists source. */ static SrsSource* fetch(SrsRequest* r); - /** - * get the exists source by stream info(vhost, app, stream), NULL when not exists. - */ - static SrsSource* fetch(std::string vhost, std::string app, std::string stream); +public: /** * dispose and cycle all sources. */