-
Notifications
You must be signed in to change notification settings - Fork 55
Description
About Me
This RFC is posted on behalf of SuperFly.tv
Use Case
In today's Sofie, the Rehearsal Mode acts and behaves exactly as the On Air mode, without giving the users any rehearsal-specific tools.
Thanks to Sofie's state-based architecture we propose to improve to the Rehearsal Mode in six ways.
We welcome discussions and feedback about these changes!
Proposal
1. Click to Play-From-Anywhere
To make it easier for the user to preview any part of the planned show, we propose that holding down a modifier key (such as *Shift) *and hovering over any segment will show a vertical line that follows the cursor. Clicking will instantly move the On Air line to this position and start playing. This feature will only be available in Rehearsal Mode.
2. Rehearsal Bar
This new UI area is permanently pinned to the bottom of the Top Bar when the studio is in Rehearsal Mode. It contains controls for the following features...
3. Always-enabled Adlib Testing
When you activate a studio in Rehearsal Mode, you expect to be able to start controlling it—either by switching cameras or by starting to play the rundown. This is not the way Sofie works today.
The current implementation of the Adlib Testing requires the user to enable this mode by context-clicking the Top Bar. The current implementation presents the user with an awkward UI representation resembling a segment and two parts, but without allowing many of the standard operations such as "Set as Next". And once the user starts playing from the normal rundown, the UI element lingers without any use.
We instead propose that this mode is enabled automatically, but hidden. This means that adlibs can be played via keyboard shortcuts and devices as soon as Rehearsal Mode is enabled. There's no point in showing a UI representation of these adlibs that are played before the rundown—if the user wants to test a complicated multi-piece adlib and see it visually represented in the UI, it can always be played in a rundown with a complete UI representation.
As a bonus this means we can remove the context-menu item, and we can also avoid forcing the user to understand the name of the feature. The aim is that the feature can be described as "adlibs can be played freely as soon as you enter Rehearsal Mode".
4. Preview Takes
With Sofie's Play-from-Anywhere feature it is already possible to preview just certain sections of a show that the user wants to rehearse, instead of, for example, being forced to play an entire video clip just to be able to see it transitions to the following part. With the new Preview Takes feature this becomes much easier with buttons in the Rehearsal Bar that will let you jump to x seconds before each Take. The amount of pre-roll can easily be changed by the user.
5. Pause/Continue Time
Once Sofie starts to play a busy part such as a video clip, the only way to stop the playback is to take another part. With the new button in the Rehearsal Bar the user can in effect freeze/unfreeze time (but since that terminology is already reserved in Sofie, it should be called Pause/Continue in the documentation).
6. The Color of the Top Bar
The three states of a rundown playlist (deactivated, activated in rehearsal, activated in on air) and how to switch between them has always been a bit unintuitive and cumbersome. Awaiting the implementation of a redesigned Top Barwith further improvements, in this RFC we propose that the color of the Top Bar only indicates the state of the studio as deactivated (blue) and activated (black). That the studio is in Rehearsal Mode is instead indicated by the presence of the Rehearsal Bar.
Implementation Proposal (rough draft)
As the TSR is timeline-based, this is the natural place to have any time related changes.
It’s important to note that this is ONLY for rehearsal, as the impact of jumping/freezing a timeline, can be strange. e.g. if a camera has got a command for a new shot just before a freeze, it will continue that movement.
An draft of the implementation can be found in:
https://github.com/SuperFlyTV/sofie-timeline-state-resolver/tree/feat/freeze-continue-seek
The functions are (in conductor.ts):
//Conductor:
public getCurrentTime(): number {
// Normal operation: real time minus any accumulated frozen time
}
public getDateNowWithFreezeOffset(): number {
// This is the time that is used for resolving the timeline
// It takes into account the frozen state and the accumulated frozen time
// this time should replace Date.Now() multiple places in the code
// Both this and getCurrentTime()
// Could/Should be placed in a NowHandler()
// (something like the rough draft in server/nowHandler.ts)
}
public freeze(): void {
// This function "stops" the timeline and sends the command
// To those devices who supports a freeze
}
public continue(): void {
// Stops the freeze
// re-trigger the timeline and recalculates
}
public jumpto(seconds: number): void {
// call Freeze timeline
// Dips those devices who support it
// Moved timeline to new position
// Continue
}
And the devices should have these new capabilities:
(draft is in service/device.ts → )
/** Freeze the device at its current state */
async freeze?(): Promise<void>
/** Continue from frozen state, accounting for the time that passed while frozen */
async continue?(): Promise<void>
/**
* This should be called to make a dip (black or silence) in devices while recalculating
* a new state/position
**/
async dipUnderRecalculation?(dipTime: number): Promise<void>
/** Whether this device supports freeze/continue functionality */
get supportsFreezing(): boolean {
return false
}
Timing Across All devices and clients (e.g. Core):
We should also consider if there should be one central time in the TSR, there is some with the _getCurrentTime().
But currently Date.now() is used a lot of places, some where it’s for the actual timestamps, and some where it relates to the timeline.
A small draft example of a central time is placed in service/nowHandler.ts
Possible Features for Future Consideration
These proposed features could be followed up by additional features, such as being able to activate a studio in Rehearsal Mode without any active rundowns.
Process
The Sofie Team will evaluate this RFC and open up a discussion about it, usually within a week.
- RFC created
- Sofie Team has evaluated the RFC
- A workshop has been planned
- RFC has been discussed in a workshop
- A conclusion has been reached, see comments in thread