1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

Squash: Fix bugs. v5.0.20

This commit is contained in:
winlin 2022-01-11 08:40:05 +08:00
parent d2fe83b032
commit 4110fb14cb
36 changed files with 433 additions and 98 deletions

View file

@ -745,6 +745,7 @@ SrsDvrSegmentPlan::SrsDvrSegmentPlan()
{
cduration = 0;
wait_keyframe = false;
reopening_segment_ = false;
}
SrsDvrSegmentPlan::~SrsDvrSegmentPlan()
@ -845,6 +846,12 @@ srs_error_t SrsDvrSegmentPlan::on_video(SrsSharedPtrMessage* shared_video, SrsFo
srs_error_t SrsDvrSegmentPlan::update_duration(SrsSharedPtrMessage* msg)
{
srs_error_t err = srs_success;
// When reopening the segment, never update the duration, because there is actually no media data.
// @see https://github.com/ossrs/srs/issues/2717
if (reopening_segment_) {
return err;
}
srs_assert(segment);
@ -879,8 +886,11 @@ srs_error_t SrsDvrSegmentPlan::update_duration(SrsSharedPtrMessage* msg)
return srs_error_wrap(err, "segment open");
}
// update sequence header
if ((err = hub->on_dvr_request_sh()) != srs_success) {
// When update sequence header, set the reopening state to prevent infinitely recursive call.
reopening_segment_ = true;
err = hub->on_dvr_request_sh();
reopening_segment_ = false;
if (err != srs_success) {
return srs_error_wrap(err, "request sh");
}