From 68de796f7707fdc6a282430604e2df370a9104fb Mon Sep 17 00:00:00 2001 From: winlin Date: Wed, 13 May 2020 15:46:49 +0800 Subject: [PATCH] RTC: Reorder functions --- trunk/src/app/srs_app_rtc_source.cpp | 140 +++++++++++++-------------- trunk/src/app/srs_app_rtc_source.hpp | 44 ++++----- 2 files changed, 92 insertions(+), 92 deletions(-) diff --git a/trunk/src/app/srs_app_rtc_source.cpp b/trunk/src/app/srs_app_rtc_source.cpp index a048c2c4c..71c9e5c9a 100644 --- a/trunk/src/app/srs_app_rtc_source.cpp +++ b/trunk/src/app/srs_app_rtc_source.cpp @@ -184,6 +184,76 @@ void SrsRtcConsumer::wait(int nb_msgs, srs_utime_t msgs_duration) } #endif +SrsRtcSourceManager::SrsRtcSourceManager() +{ + lock = NULL; +} + +SrsRtcSourceManager::~SrsRtcSourceManager() +{ + srs_mutex_destroy(lock); +} + +srs_error_t SrsRtcSourceManager::fetch_or_create(SrsRequest* r, SrsRtcSource** pps) +{ + srs_error_t err = srs_success; + + // Lazy create lock, because ST is not ready in SrsRtcSourceManager constructor. + if (!lock) { + lock = srs_mutex_new(); + } + + // Use lock to protect coroutine switch. + // @bug https://github.com/ossrs/srs/issues/1230 + SrsLocker(lock); + + SrsRtcSource* source = NULL; + if ((source = fetch(r)) != NULL) { + *pps = source; + return err; + } + + 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()); + + srs_trace("new source, stream_url=%s", stream_url.c_str()); + + source = new SrsRtcSource(); + if ((err = source->initialize(r)) != srs_success) { + return srs_error_wrap(err, "init source %s", r->get_stream_url().c_str()); + } + + pool[stream_url] = source; + + *pps = source; + + return err; +} + +SrsRtcSource* SrsRtcSourceManager::fetch(SrsRequest* r) +{ + SrsRtcSource* source = NULL; + + string stream_url = r->get_stream_url(); + if (pool.find(stream_url) == pool.end()) { + return NULL; + } + + source = pool[stream_url]; + + // we always update the request of resource, + // for origin auth is on, the token in request maybe invalid, + // and we only need to update the token of request, it's simple. + source->update_auth(r); + + return source; +} + +SrsRtcSourceManager* _srs_rtc_sources = new SrsRtcSourceManager(); + SrsRtcSource::SrsRtcSource() { _source_id = _pre_source_id = -1; @@ -396,76 +466,6 @@ srs_error_t SrsRtcSource::on_video_imp(SrsSharedPtrMessage* msg) return err; } -SrsRtcSourceManager::SrsRtcSourceManager() -{ - lock = NULL; -} - -SrsRtcSourceManager::~SrsRtcSourceManager() -{ - srs_mutex_destroy(lock); -} - -srs_error_t SrsRtcSourceManager::fetch_or_create(SrsRequest* r, SrsRtcSource** pps) -{ - srs_error_t err = srs_success; - - // Lazy create lock, because ST is not ready in SrsRtcSourceManager constructor. - if (!lock) { - lock = srs_mutex_new(); - } - - // Use lock to protect coroutine switch. - // @bug https://github.com/ossrs/srs/issues/1230 - SrsLocker(lock); - - SrsRtcSource* source = NULL; - if ((source = fetch(r)) != NULL) { - *pps = source; - return err; - } - - 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()); - - srs_trace("new source, stream_url=%s", stream_url.c_str()); - - source = new SrsRtcSource(); - if ((err = source->initialize(r)) != srs_success) { - return srs_error_wrap(err, "init source %s", r->get_stream_url().c_str()); - } - - pool[stream_url] = source; - - *pps = source; - - return err; -} - -SrsRtcSource* SrsRtcSourceManager::fetch(SrsRequest* r) -{ - SrsRtcSource* source = NULL; - - string stream_url = r->get_stream_url(); - if (pool.find(stream_url) == pool.end()) { - return NULL; - } - - source = pool[stream_url]; - - // we always update the request of resource, - // for origin auth is on, the token in request maybe invalid, - // and we only need to update the token of request, it's simple. - source->update_auth(r); - - return source; -} - -SrsRtcSourceManager* _srs_rtc_sources = new SrsRtcSourceManager(); - SrsRtcFromRtmpBridger::SrsRtcFromRtmpBridger(SrsRtcSource* source) { req = NULL; diff --git a/trunk/src/app/srs_app_rtc_source.hpp b/trunk/src/app/srs_app_rtc_source.hpp index f55764f90..08a9093a4 100644 --- a/trunk/src/app/srs_app_rtc_source.hpp +++ b/trunk/src/app/srs_app_rtc_source.hpp @@ -84,6 +84,28 @@ public: #endif }; +class SrsRtcSourceManager +{ +private: + srs_mutex_t lock; + std::map pool; +public: + SrsRtcSourceManager(); + virtual ~SrsRtcSourceManager(); +public: + // create source when fetch from cache failed. + // @param r the client request. + // @param pps the matched source, if success never be NULL. + virtual srs_error_t fetch_or_create(SrsRequest* r, SrsRtcSource** pps); +private: + // Get the exists source, NULL when not exists. + // update the request and return the exists source. + virtual SrsRtcSource* fetch(SrsRequest* r); +}; + +// Global singleton instance. +extern SrsRtcSourceManager* _srs_rtc_sources; + class SrsRtcSource { private: @@ -145,28 +167,6 @@ public: virtual srs_error_t on_video_imp(SrsSharedPtrMessage* video); }; -class SrsRtcSourceManager -{ -private: - srs_mutex_t lock; - std::map pool; -public: - SrsRtcSourceManager(); - virtual ~SrsRtcSourceManager(); -public: - // create source when fetch from cache failed. - // @param r the client request. - // @param pps the matched source, if success never be NULL. - virtual srs_error_t fetch_or_create(SrsRequest* r, SrsRtcSource** pps); -private: - // Get the exists source, NULL when not exists. - // update the request and return the exists source. - virtual SrsRtcSource* fetch(SrsRequest* r); -}; - -// Global singleton instance. -extern SrsRtcSourceManager* _srs_rtc_sources; - class SrsRtcFromRtmpBridger : public ISrsSourceBridger { private: