From 9517ef123ded5c35a7edad1ca54a629e5b14ed0e Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 14 Oct 2021 18:33:31 +0800 Subject: [PATCH 1/2] Squash: Update SRS 4.0 version --- trunk/doc/CHANGELOG.md | 1 + trunk/src/core/srs_core_version4.hpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/trunk/doc/CHANGELOG.md b/trunk/doc/CHANGELOG.md index 3f3413d75..4f722c8b0 100644 --- a/trunk/doc/CHANGELOG.md +++ b/trunk/doc/CHANGELOG.md @@ -27,6 +27,7 @@ The changelog for SRS. ## SRS 4.0 Changelog +* v4.0, 2021-10-13, Merge [#2671](https://github.com/ossrs/srs/pull/2671): SRT: Pes error when mpegts demux in srt. v4.0.178 * v4.0, 2021-10-12, Merge [#2550](https://github.com/ossrs/srs/pull/2550): API use publish params. v4.0.177 * v4.0, 2021-10-12, Merge [#2549](https://github.com/ossrs/srs/pull/2549): Fix duration issue for HLS on_hls. v4.0.176 * v4.0, 2021-10-11, Fix [#1641](https://github.com/ossrs/srs/issues/1641), HLS/RTC picture corrupt for SPS/PPS lost. v4.0.175 diff --git a/trunk/src/core/srs_core_version4.hpp b/trunk/src/core/srs_core_version4.hpp index 0d5e98ffb..4cf6af75b 100644 --- a/trunk/src/core/srs_core_version4.hpp +++ b/trunk/src/core/srs_core_version4.hpp @@ -9,6 +9,6 @@ #define VERSION_MAJOR 4 #define VERSION_MINOR 0 -#define VERSION_REVISION 177 +#define VERSION_REVISION 178 #endif From 974bed6b26ce36f68a323a06477f11cc20215489 Mon Sep 17 00:00:00 2001 From: Haibo Chen Date: Sat, 16 Oct 2021 07:50:47 +0800 Subject: [PATCH 2/2] API: Fix the same 'client_id' error when asynchronous call (#2665) --- trunk/src/app/srs_app_http_static.cpp | 21 ++++-- trunk/src/app/srs_app_rtc_conn.cpp | 92 ++++++++++++++------------- 2 files changed, 66 insertions(+), 47 deletions(-) diff --git a/trunk/src/app/srs_app_http_static.cpp b/trunk/src/app/srs_app_http_static.cpp index bae3b7872..325280d16 100644 --- a/trunk/src/app/srs_app_http_static.cpp +++ b/trunk/src/app/srs_app_http_static.cpp @@ -37,6 +37,7 @@ using namespace std; #include #include #include +#include #define SRS_CONTEXT_IN_HLS "hls_ctx" @@ -194,6 +195,12 @@ srs_error_t SrsVodStream::serve_m3u8_ctx(ISrsHttpResponseWriter * w, ISrsHttpMes srs_assert(hr); SrsRequest* req = hr->to_request(hr->host())->as_http(); + // discovery vhost, resolve the vhost from config + SrsConfDirective* parsed_vhost = _srs_config->get_vhost(req->vhost); + if (parsed_vhost) { + req->vhost = parsed_vhost->arg0(); + } + SrsAutoFree(SrsRequest, req); string ctx = hr->query_get(SRS_CONTEXT_IN_HLS); @@ -202,16 +209,19 @@ srs_error_t SrsVodStream::serve_m3u8_ctx(ISrsHttpResponseWriter * w, ISrsHttpMes return SrsHttpFileServer::serve_m3u8_ctx(w, r, fullpath); } - if ((err = http_hooks_on_play(req)) != srs_success) { - return srs_error_wrap(err, "HLS: http_hooks_on_play"); - } - if (ctx.empty()) { // make sure unique do { ctx = srs_random_str(8); // the same as cid } while (ctx_is_exist(ctx)); } + + SrsContextRestore(_srs_context->get_id()); + _srs_context->set_id(SrsContextId().set_value(ctx)); + + if ((err = http_hooks_on_play(req)) != srs_success) { + return srs_error_wrap(err, "HLS: http_hooks_on_play"); + } std::stringstream ss; ss << "#EXTM3U" << SRS_CONSTS_LF; @@ -339,6 +349,9 @@ srs_error_t SrsVodStream::on_timer(srs_utime_t interval) SrsRequest* req = it->second.req; srs_utime_t hls_window = _srs_config->get_hls_window(req->vhost); if (it->second.request_time + (2 * hls_window) < srs_get_system_time()) { + SrsContextRestore(_srs_context->get_id()); + _srs_context->set_id(SrsContextId().set_value(ctx)); + http_hooks_on_stop(req); srs_freep(req); diff --git a/trunk/src/app/srs_app_rtc_conn.cpp b/trunk/src/app/srs_app_rtc_conn.cpp index 1d4bd742b..97785087a 100644 --- a/trunk/src/app/srs_app_rtc_conn.cpp +++ b/trunk/src/app/srs_app_rtc_conn.cpp @@ -351,22 +351,22 @@ srs_error_t SrsRtcPLIWorker::cycle() return err; } - -SrsRtcAsyncCallOnStop::SrsRtcAsyncCallOnStop(SrsContextId c, SrsRequest * r) -{ + +SrsRtcAsyncCallOnStop::SrsRtcAsyncCallOnStop(SrsContextId c, SrsRequest * r) +{ cid = c; - req = r->copy(); -} - -SrsRtcAsyncCallOnStop::~SrsRtcAsyncCallOnStop() -{ - srs_freep(req); -} - -srs_error_t SrsRtcAsyncCallOnStop::call() -{ - srs_error_t err = srs_success; - + req = r->copy(); +} + +SrsRtcAsyncCallOnStop::~SrsRtcAsyncCallOnStop() +{ + srs_freep(req); +} + +srs_error_t SrsRtcAsyncCallOnStop::call() +{ + srs_error_t err = srs_success; + if (!_srs_config->get_vhost_http_hooks_enabled(req->vhost)) { return err; } @@ -386,17 +386,20 @@ srs_error_t SrsRtcAsyncCallOnStop::call() hooks = conf->args; } + SrsContextRestore(_srs_context->get_id()); + _srs_context->set_id(cid); + for (int i = 0; i < (int)hooks.size(); i++) { std::string url = hooks.at(i); SrsHttpHooks::on_stop(url, req); } - return err; -} - -std::string SrsRtcAsyncCallOnStop::to_string() -{ - return std::string(""); + return err; +} + +std::string SrsRtcAsyncCallOnStop::to_string() +{ + return std::string(""); } SrsRtcPlayStream::SrsRtcPlayStream(SrsRtcConnection* s, const SrsContextId& cid) @@ -997,21 +1000,21 @@ srs_error_t SrsRtcPublishTwccTimer::on_timer(srs_utime_t interval) } -SrsRtcAsyncCallOnUnpublish::SrsRtcAsyncCallOnUnpublish(SrsContextId c, SrsRequest * r) -{ +SrsRtcAsyncCallOnUnpublish::SrsRtcAsyncCallOnUnpublish(SrsContextId c, SrsRequest * r) +{ cid = c; - req = r->copy(); -} - -SrsRtcAsyncCallOnUnpublish::~SrsRtcAsyncCallOnUnpublish() -{ - srs_freep(req); -} - -srs_error_t SrsRtcAsyncCallOnUnpublish::call() -{ - srs_error_t err = srs_success; - + req = r->copy(); +} + +SrsRtcAsyncCallOnUnpublish::~SrsRtcAsyncCallOnUnpublish() +{ + srs_freep(req); +} + +srs_error_t SrsRtcAsyncCallOnUnpublish::call() +{ + srs_error_t err = srs_success; + if (!_srs_config->get_vhost_http_hooks_enabled(req->vhost)) { return err; } @@ -1031,17 +1034,20 @@ srs_error_t SrsRtcAsyncCallOnUnpublish::call() hooks = conf->args; } + SrsContextRestore(_srs_context->get_id()); + _srs_context->set_id(cid); + for (int i = 0; i < (int)hooks.size(); i++) { std::string url = hooks.at(i); SrsHttpHooks::on_unpublish(url, req); - } - - return err; -} - -std::string SrsRtcAsyncCallOnUnpublish::to_string() -{ - return std::string(""); + } + + return err; +} + +std::string SrsRtcAsyncCallOnUnpublish::to_string() +{ + return std::string(""); } SrsRtcPublishStream::SrsRtcPublishStream(SrsRtcConnection* session, const SrsContextId& cid)