From c45f72ef7bac9c7cf85b9125fc9e3aafd53f396f Mon Sep 17 00:00:00 2001 From: winlin Date: Sun, 5 Aug 2018 20:23:17 +0800 Subject: [PATCH] Refine HTTP-FLV latency, support realtime mode. 2.0.252 --- README.md | 1 + trunk/src/app/srs_app_http_stream.cpp | 17 +++++++++++++---- trunk/src/core/srs_core.hpp | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 38e281cc9c..37200fb352 100755 --- a/README.md +++ b/README.md @@ -333,6 +333,7 @@ Remark: ## History +* v2.0, 2018-08-05, Refine HTTP-FLV latency, support realtime mode. 2.0.252 * 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 diff --git a/trunk/src/app/srs_app_http_stream.cpp b/trunk/src/app/srs_app_http_stream.cpp index f25852d097..9181fb4dda 100755 --- a/trunk/src/app/srs_app_http_stream.cpp +++ b/trunk/src/app/srs_app_http_stream.cpp @@ -58,6 +58,8 @@ using namespace std; #endif +#include + #ifdef SRS_AUTO_HTTP_SERVER SrsStreamCache::SrsStreamCache(SrsSource* s, SrsRequest* r) @@ -484,7 +486,12 @@ int SrsLiveStream::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) if (srs_string_ends_with(entry->pattern, ".flv")) { w->header()->set_content_type("video/x-flv"); #ifdef SRS_PERF_FAST_FLV_ENCODER - enc = new SrsFastFlvStreamEncoder(); + bool realtime = _srs_config->get_realtime_enabled(req->vhost); + if (realtime) { + enc = new SrsFlvStreamEncoder(); + } else { + enc = new SrsFastFlvStreamEncoder(); + } #else enc = new SrsFlvStreamEncoder(); #endif @@ -542,6 +549,8 @@ int SrsLiveStream::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) SrsHttpMessage* hr = dynamic_cast(r); SrsResponseOnlyHttpConn* hc = dynamic_cast(hr->connection()); + int mw_sleep = _srs_config->get_mw_sleep_ms(req->vhost); + SrsHttpRecvThread* trd = new SrsHttpRecvThread(hc); SrsAutoFree(SrsHttpRecvThread, trd); @@ -570,15 +579,15 @@ int SrsLiveStream::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) if (count <= 0) { srs_info("http: sleep %dms for no msg", SRS_CONSTS_RTMP_PULSE_TIMEOUT_US); // directly use sleep, donot use consumer wait. - st_usleep(SRS_CONSTS_RTMP_PULSE_TIMEOUT_US); + st_usleep(mw_sleep); // ignore when nothing got. continue; } if (pprint->can_print()) { - srs_info("-> "SRS_CONSTS_LOG_HTTP_STREAM" http: got %d msgs, age=%d, min=%d, mw=%d", - count, pprint->age(), SRS_PERF_MW_MIN_MSGS, SRS_CONSTS_RTMP_PULSE_TIMEOUT_US / 1000); + srs_trace("-> "SRS_CONSTS_LOG_HTTP_STREAM" http: got %d msgs, age=%d, min=%d, mw=%d", + count, pprint->age(), SRS_PERF_MW_MIN_MSGS, mw_sleep); } // sendout all messages. diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index c2ceadcf9b..b5444e8077 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 251 +#define VERSION_REVISION 252 // generated by configure, only macros. #include