|
|
@ -20,6 +20,13 @@ public class PlayoutModeSchedulerDuration : PlayoutModeSchedulerBase<ProgramSche |
|
|
|
DateTimeOffset hardStop, |
|
|
|
DateTimeOffset hardStop, |
|
|
|
CancellationToken cancellationToken) |
|
|
|
CancellationToken cancellationToken) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
// Logger.LogDebug(
|
|
|
|
|
|
|
|
// "DurationSchedule: {CurrentTime} {DurationFinish} {InDurationFiller} {HardStop}",
|
|
|
|
|
|
|
|
// playoutBuilderState.CurrentTime,
|
|
|
|
|
|
|
|
// playoutBuilderState.DurationFinish,
|
|
|
|
|
|
|
|
// playoutBuilderState.InDurationFiller,
|
|
|
|
|
|
|
|
// hardStop);
|
|
|
|
|
|
|
|
|
|
|
|
var playoutItems = new List<PlayoutItem>(); |
|
|
|
var playoutItems = new List<PlayoutItem>(); |
|
|
|
|
|
|
|
|
|
|
|
PlayoutBuilderState nextState = playoutBuilderState; |
|
|
|
PlayoutBuilderState nextState = playoutBuilderState; |
|
|
@ -30,8 +37,16 @@ public class PlayoutModeSchedulerDuration : PlayoutModeSchedulerBase<ProgramSche |
|
|
|
|
|
|
|
|
|
|
|
IMediaCollectionEnumerator contentEnumerator = |
|
|
|
IMediaCollectionEnumerator contentEnumerator = |
|
|
|
collectionEnumerators[CollectionKey.ForScheduleItem(scheduleItem)]; |
|
|
|
collectionEnumerators[CollectionKey.ForScheduleItem(scheduleItem)]; |
|
|
|
while (contentEnumerator.Current.IsSome && nextState.CurrentTime < hardStop && willFinishInTime) |
|
|
|
while (contentEnumerator.Current.IsSome && nextState.CurrentTime < hardStop && willFinishInTime && |
|
|
|
|
|
|
|
nextState.CurrentTime < nextState.DurationFinish.IfNone(SystemTime.MaxValueUtc)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
// Logger.LogDebug(
|
|
|
|
|
|
|
|
// "Duration Loop: CT: {CurrentTime} DF: {DurationFinish} Filler: {InDurationFiller} Stop: {HardStop}",
|
|
|
|
|
|
|
|
// nextState.CurrentTime,
|
|
|
|
|
|
|
|
// nextState.DurationFinish,
|
|
|
|
|
|
|
|
// nextState.InDurationFiller,
|
|
|
|
|
|
|
|
// hardStop);
|
|
|
|
|
|
|
|
|
|
|
|
MediaItem mediaItem = contentEnumerator.Current.ValueUnsafe(); |
|
|
|
MediaItem mediaItem = contentEnumerator.Current.ValueUnsafe(); |
|
|
|
|
|
|
|
|
|
|
|
// find when we should start this item, based on the current time
|
|
|
|
// find when we should start this item, based on the current time
|
|
|
@ -50,6 +65,8 @@ public class PlayoutModeSchedulerDuration : PlayoutModeSchedulerBase<ProgramSche |
|
|
|
{ |
|
|
|
{ |
|
|
|
DurationFinish = itemStartTime + scheduleItem.PlayoutDuration |
|
|
|
DurationFinish = itemStartTime + scheduleItem.PlayoutDuration |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Logger.LogDebug("Setting duration finish to {DurationFinish}", nextState.DurationFinish);
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
durationUntil = nextState.DurationFinish; |
|
|
|
durationUntil = nextState.DurationFinish; |
|
|
@ -138,6 +155,15 @@ public class PlayoutModeSchedulerDuration : PlayoutModeSchedulerBase<ProgramSche |
|
|
|
false, |
|
|
|
false, |
|
|
|
cancellationToken); |
|
|
|
cancellationToken); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// foreach (PlayoutItem pi in maybePlayoutItems.OrderBy(pi => pi.StartOffset))
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// Logger.LogDebug(
|
|
|
|
|
|
|
|
// " - PI Start: {Start} - {Id} - {FillerKind}",
|
|
|
|
|
|
|
|
// pi.StartOffset,
|
|
|
|
|
|
|
|
// pi.MediaItemId,
|
|
|
|
|
|
|
|
// pi.FillerKind);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
DateTimeOffset itemEndTimeWithFiller = maybePlayoutItems.Max(pi => pi.FinishOffset); |
|
|
|
DateTimeOffset itemEndTimeWithFiller = maybePlayoutItems.Max(pi => pi.FinishOffset); |
|
|
|
|
|
|
|
|
|
|
|
willFinishInTime = itemStartTime > durationFinish || |
|
|
|
willFinishInTime = itemStartTime > durationFinish || |
|
|
|