From b06661539c2d02b35b45e89df1bc23a43cabd0a3 Mon Sep 17 00:00:00 2001 From: Haibo Chen Date: Sun, 7 Nov 2021 16:59:33 +0800 Subject: [PATCH] DVR: Copy req from publish. v4.0.193 (#2714) * DVR: copy req from publish * DVR: copy req from publish --- trunk/doc/CHANGELOG.md | 1 + trunk/src/app/srs_app_dvr.cpp | 24 ++++++++++++++++-------- trunk/src/app/srs_app_dvr.hpp | 8 ++++---- trunk/src/app/srs_app_source.cpp | 5 +++-- trunk/src/core/srs_core_version4.hpp | 2 +- 5 files changed, 25 insertions(+), 15 deletions(-) diff --git a/trunk/doc/CHANGELOG.md b/trunk/doc/CHANGELOG.md index 7428927d0..e73ef4772 100644 --- a/trunk/doc/CHANGELOG.md +++ b/trunk/doc/CHANGELOG.md @@ -8,6 +8,7 @@ The changelog for SRS. ## SRS 4.0 Changelog +* v4.0, 2021-11-07, Merge [#2714](https://github.com/ossrs/srs/pull/2714): DVR: copy req from publish. v4.0.193 * v4.0, 2021-11-04, Merge [#2707](https://github.com/ossrs/srs/pull/2707): Refuse edge request when state is stopping. v4.0.192 * v4.0, 2021-11-02, Auto create package by github actions. v4.0.191 * v4.0, 2021-10-30, Merge [#2552](https://github.com/ossrs/srs/pull/2552): Script: Refine CentOS7 service script to restart SRS. v4.0.190 diff --git a/trunk/src/app/srs_app_dvr.cpp b/trunk/src/app/srs_app_dvr.cpp index 6a3932ca5..1675e12c6 100644 --- a/trunk/src/app/srs_app_dvr.cpp +++ b/trunk/src/app/srs_app_dvr.cpp @@ -598,8 +598,12 @@ srs_error_t SrsDvrPlan::initialize(SrsOriginHub* h, SrsDvrSegmenter* s, SrsReque return err; } -srs_error_t SrsDvrPlan::on_publish() +srs_error_t SrsDvrPlan::on_publish(SrsRequest* r) { + // @see https://github.com/ossrs/srs/issues/1613#issuecomment-960623359 + srs_freep(req); + req = r->copy(); + return srs_success; } @@ -687,11 +691,11 @@ SrsDvrSessionPlan::~SrsDvrSessionPlan() { } -srs_error_t SrsDvrSessionPlan::on_publish() +srs_error_t SrsDvrSessionPlan::on_publish(SrsRequest* r) { srs_error_t err = srs_success; - if ((err = SrsDvrPlan::on_publish()) != srs_success) { + if ((err = SrsDvrPlan::on_publish(r)) != srs_success) { return err; } @@ -762,11 +766,11 @@ srs_error_t SrsDvrSegmentPlan::initialize(SrsOriginHub* h, SrsDvrSegmenter* s, S return srs_success; } -srs_error_t SrsDvrSegmentPlan::on_publish() +srs_error_t SrsDvrSegmentPlan::on_publish(SrsRequest* r) { srs_error_t err = srs_success; - if ((err = SrsDvrPlan::on_publish()) != srs_success) { + if ((err = SrsDvrPlan::on_publish(r)) != srs_success) { return err; } @@ -913,13 +917,14 @@ SrsDvr::~SrsDvr() _srs_config->unsubscribe(this); srs_freep(plan); + srs_freep(req); } srs_error_t SrsDvr::initialize(SrsOriginHub* h, SrsRequest* r) { srs_error_t err = srs_success; - req = r; + req = r->copy(); hub = h; SrsConfDirective* conf = _srs_config->get_dvr_apply(r->vhost); @@ -945,7 +950,7 @@ srs_error_t SrsDvr::initialize(SrsOriginHub* h, SrsRequest* r) return err; } -srs_error_t SrsDvr::on_publish() +srs_error_t SrsDvr::on_publish(SrsRequest* r) { srs_error_t err = srs_success; @@ -954,9 +959,12 @@ srs_error_t SrsDvr::on_publish() return err; } - if ((err = plan->on_publish()) != srs_success) { + if ((err = plan->on_publish(r)) != srs_success) { return srs_error_wrap(err, "publish"); } + + srs_freep(req); + req = r->copy(); return err; } diff --git a/trunk/src/app/srs_app_dvr.hpp b/trunk/src/app/srs_app_dvr.hpp index 18ee450ee..212616b92 100644 --- a/trunk/src/app/srs_app_dvr.hpp +++ b/trunk/src/app/srs_app_dvr.hpp @@ -167,7 +167,7 @@ public: virtual ~SrsDvrPlan(); public: virtual srs_error_t initialize(SrsOriginHub* h, SrsDvrSegmenter* s, SrsRequest* r); - virtual srs_error_t on_publish(); + virtual srs_error_t on_publish(SrsRequest* r); virtual void on_unpublish(); virtual srs_error_t on_meta_data(SrsSharedPtrMessage* shared_metadata); virtual srs_error_t on_audio(SrsSharedPtrMessage* shared_audio, SrsFormat* format); @@ -187,7 +187,7 @@ public: SrsDvrSessionPlan(); virtual ~SrsDvrSessionPlan(); public: - virtual srs_error_t on_publish(); + virtual srs_error_t on_publish(SrsRequest* r); virtual void on_unpublish(); }; @@ -203,7 +203,7 @@ public: virtual ~SrsDvrSegmentPlan(); public: virtual srs_error_t initialize(SrsOriginHub* h, SrsDvrSegmenter* s, SrsRequest* r); - virtual srs_error_t on_publish(); + virtual srs_error_t on_publish(SrsRequest* r); virtual void on_unpublish(); virtual srs_error_t on_audio(SrsSharedPtrMessage* shared_audio, SrsFormat* format); virtual srs_error_t on_video(SrsSharedPtrMessage* shared_video, SrsFormat* format); @@ -237,7 +237,7 @@ public: // publish stream event, // when encoder start to publish RTMP stream. // @param fetch_sequence_header whether fetch sequence from source. - virtual srs_error_t on_publish(); + virtual srs_error_t on_publish(SrsRequest* r); // the unpublish event., // when encoder stop(unpublish) to publish RTMP stream. virtual void on_unpublish(); diff --git a/trunk/src/app/srs_app_source.cpp b/trunk/src/app/srs_app_source.cpp index d6209b651..d297f0f4a 100755 --- a/trunk/src/app/srs_app_source.cpp +++ b/trunk/src/app/srs_app_source.cpp @@ -1138,7 +1138,8 @@ srs_error_t SrsOriginHub::on_publish() return srs_error_wrap(err, "dash publish"); } - if ((err = dvr->on_publish()) != srs_success) { + // @see https://github.com/ossrs/srs/issues/1613#issuecomment-961657927 + if ((err = dvr->on_publish(req)) != srs_success) { return srs_error_wrap(err, "dvr publish"); } @@ -1401,7 +1402,7 @@ srs_error_t SrsOriginHub::on_reload_vhost_dvr(string vhost) } // start to publish by new plan. - if ((err = dvr->on_publish()) != srs_success) { + if ((err = dvr->on_publish(req)) != srs_success) { return srs_error_wrap(err, "dvr publish failed"); } diff --git a/trunk/src/core/srs_core_version4.hpp b/trunk/src/core/srs_core_version4.hpp index bf8b54c24..dbdbd02f7 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 192 +#define VERSION_REVISION 193 #endif