Skip to content

Conversation

@Julusian
Copy link
Member

About the Contributor

This pull request is posted on behalf of the BBC

Type of Contribution

This is a: Feature

New Behavior

This builds on top of #1384

Time of day pieces are a new concept, where a rundown is able to define some pieces that should play at an absolute timestamp, no matter what part is active at the time.
This could be utilised to show some graphic about what is next, or to ensure that the outro is triggered at the correct time (doing so out of vision) to ensure it will be at the right point when the show reaches the end time.

These pieces can be returned from the getRundown blueprint method, and are very similar to pieces returned as part of a part. A few properties which are not relevant are removed, and the enable property must contain isAbsolute: true. This change allows the system to not need much special handling for them, with many of the differences based off this different start rule.

During playout, these pieces will be omitted from the timeline until ~30s before their start time. This duration is controlled by a new studio setting. Only once this point has been crossed will the pieces be considered for AB and lookahead. Sofie&playout-gateway coordinate regenerating the timeline at this 30s threshold, make sure to be running playout-gateway. (#1384 was written for this)

Other than that, these behave pretty much like normal outOnRundownChange pieces. They show in the ui in the current part, and in future parts once playback of the piece has started. They can be stopped/cleared by other pieces with the same rules as normal, and can be updated through the syncIngestChanges flow as usual.

Testing

  • I have added one or more unit tests for this PR
  • I have updated the relevant unit tests
  • No unit test changes are needed for this PR

Affected areas

Time Frame

Other Information

Status

  • PR is ready to be reviewed.
  • The functionality has been tested by the author.
  • Relevant unit tests has been added / updated.
  • Relevant documentation (code comments, system documentation) has been added / updated.

@Julusian Julusian changed the title feat: add object to timeline to trigger a regeneration at point in time feat: time of day pieces Mar 13, 2025
@codecov
Copy link

codecov bot commented Mar 13, 2025

Codecov Report

Attention: Patch coverage is 73.45254% with 193 lines in your changes missing coverage. Please review.

Project coverage is 56.96%. Comparing base (1cda4a8) to head (1c7a8e7).
Report is 48 commits behind head on release53.

Files with missing lines Patch % Lines
packages/job-worker/src/blueprints/postProcess.ts 35.00% 52 Missing ⚠️
packages/job-worker/src/playout/lookahead/index.ts 40.00% 28 Missing and 2 partials ⚠️
...ackages/job-worker/src/playout/timeline/rundown.ts 81.63% 18 Missing ⚠️
...src/ingest/model/implementation/IngestModelImpl.ts 73.21% 15 Missing ⚠️
packages/job-worker/src/blueprints/context/lib.ts 48.14% 14 Missing ⚠️
packages/job-worker/src/playout/infinites.ts 77.58% 12 Missing and 1 partial ⚠️
...s/job-worker/src/playout/timeline/multi-gateway.ts 0.00% 12 Missing ⚠️
packages/corelib/src/playout/infinites.ts 63.33% 11 Missing ⚠️
packages/job-worker/src/playout/adlibUtils.ts 10.00% 9 Missing ⚠️
packages/corelib/src/playout/processAndPrune.ts 94.59% 6 Missing ⚠️
... and 8 more
Additional details and impacted files
@@              Coverage Diff              @@
##           release53    #1406      +/-   ##
=============================================
+ Coverage      56.82%   56.96%   +0.14%     
=============================================
  Files            402      404       +2     
  Lines          72968    73678     +710     
  Branches        4463     4490      +27     
=============================================
+ Hits           41464    41974     +510     
- Misses         31363    31554     +191     
- Partials         141      150       +9     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@Julusian Julusian force-pushed the upstream/time-of-day-pieces branch from 1044d93 to 1c7a8e7 Compare March 24, 2025 10:29
@jstarpl jstarpl added Contribution External contribution Contribution from BBC Contributions sponsored by BBC (bbc.co.uk) labels Apr 8, 2025
@Julusian Julusian force-pushed the upstream/time-of-day-pieces branch from 1c7a8e7 to cee7180 Compare September 23, 2025 08:54
@codecov-commenter
Copy link

codecov-commenter commented Sep 23, 2025

@olzzon
Copy link
Contributor

olzzon commented Oct 6, 2025

This has been tested, and documentation has been added.

@nytamin nytamin marked this pull request as ready for review October 6, 2025 08:37
@nytamin nytamin requested a review from a team as a code owner October 6, 2025 08:37
Comment on lines +47 to +55
// If the piece is dynamically inserted, then its preroll should be factored into its start time, but not for any infinite continuations
const isStartOfAdlib =
!!p.dynamicallyInserted && !(p.infinite?.fromPreviousPart || p.infinite?.fromPreviousPlayhead)

if (isStartOfAdlib && pieceEnable.start !== 'now') {
return pieceEnable.start + (p.piece.prerollDuration ?? 0)
} else {
return pieceEnable.start
}
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am a bit concerned about this block, as this was recently changed by NRK as it was causing timing issues #1441

I think this change will be the cause of the currently failing test Current part with preroll and adlib preroll

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not really sure how we should include it, the thing I did here was to try and include that NRK change.
If you have an idea of how we should fix it, please let me know 🙂

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The nrk change was to remove this block and replace it with simply return p.piece.enable.start. So I am curious if reapplying that introduces any issues for you, hopefully doing so will also fix the test that has started failing, as that was updated as part of that nrk change and is highlighting the breakage

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Contribution from BBC Contributions sponsored by BBC (bbc.co.uk) Contribution External contribution

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants