Browse Source

fix duration scheduling bug (#1744)

pull/1745/head
Jason Dove 2 years ago committed by GitHub
parent
commit
a5c8e2b401
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      CHANGELOG.md
  2. 18
      ErsatzTV.Core/Scheduling/PlayoutBuilder.cs
  3. 3
      ErsatzTV.Core/Scheduling/PlayoutModeSchedulerDuration.cs

1
CHANGELOG.md

@ -91,6 +91,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). @@ -91,6 +91,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- When this happens, mid-roll will be treated as post-roll
- Fix VAAPI decoder capability check
- This caused some streams to incorrectly use software decoding
- Fix scheduling loop/failure caused by some duration schedule items
### Changed
- Use ffmpeg 7 in all docker images

18
ErsatzTV.Core/Scheduling/PlayoutBuilder.cs

@ -425,6 +425,8 @@ public class PlayoutBuilder : IPlayoutBuilder @@ -425,6 +425,8 @@ public class PlayoutBuilder : IPlayoutBuilder
playout.ProgramScheduleAlternates,
playoutStart);
// _logger.LogDebug("Active schedule is: {Schedule}", activeSchedule.Name);
// random start points are disabled in some scenarios, so ensure it's enabled and active
randomStartPoint = randomStartPoint && activeSchedule.RandomStartPoint;
@ -562,6 +564,16 @@ public class PlayoutBuilder : IPlayoutBuilder @@ -562,6 +564,16 @@ public class PlayoutBuilder : IPlayoutBuilder
// find start anchor
PlayoutAnchor startAnchor = FindStartAnchor(playout, playoutStart, scheduleItemsEnumerator);
// clear duration finish if it has already passed
foreach (DateTimeOffset durationFinish in startAnchor.DurationFinishOffset)
{
if (durationFinish < startAnchor.NextStartOffset)
{
startAnchor.DurationFinish = null;
}
}
// _logger.LogDebug("Start anchor: {@StartAnchor}", startAnchor);
// start at the previously-decided time
@ -723,7 +735,11 @@ public class PlayoutBuilder : IPlayoutBuilder @@ -723,7 +735,11 @@ public class PlayoutBuilder : IPlayoutBuilder
foreach (DateTimeOffset durationFinish in playoutBuilderState.DurationFinish)
{
playout.Anchor.DurationFinish = durationFinish.UtcDateTime;
// don't save duration finish if it already passed
if (durationFinish > playout.Anchor.NextStartOffset)
{
playout.Anchor.DurationFinish = durationFinish.UtcDateTime;
}
}
// build program schedule anchors

3
ErsatzTV.Core/Scheduling/PlayoutModeSchedulerDuration.cs

@ -21,7 +21,8 @@ public class PlayoutModeSchedulerDuration : PlayoutModeSchedulerBase<ProgramSche @@ -21,7 +21,8 @@ public class PlayoutModeSchedulerDuration : PlayoutModeSchedulerBase<ProgramSche
CancellationToken cancellationToken)
{
// Logger.LogDebug(
// "DurationSchedule: {CurrentTime} {DurationFinish} {InDurationFiller} {HardStop}",
// "DurationSchedule: {ItemId} {CurrentTime} {DurationFinish} {InDurationFiller} {HardStop}",
// scheduleItem.Id,
// playoutBuilderState.CurrentTime,
// playoutBuilderState.DurationFinish,
// playoutBuilderState.InDurationFiller,

Loading…
Cancel
Save