OnAir ▲ In development Live video production, from MyEvent Labs

When the show is live, the software must not be the thing that fails.

OnAir is a live video production switcher being built around one rule: the show stays on air. Mixing, sound and recording run in an engine of their own, so closing the control screen does not touch what viewers see. When something does go wrong, it says what happened, what it affects and what to do.

The OnAir control page: a multiview with Preview and Program, seven source tiles, Program and Preview rows of keys, CUT and AUTO, and a health panel reading Healthy. A fade from Amber to Blue is in progress and a recording has been running for one minute thirty-nine seconds.
Live The control page during a ten-second fade from Amber to Blue, while recording. Both sources are marked live until the fade ends.

Where it stands

▲ WARNING: early build

Problem
OnAir is a proof of concept. It has been run on one Windows computer.
Impact
It is not ready to run a real show, and there is nothing to download yet.
Action
None needed. This page lists what works today and how each claim was checked.

What runs today

SwitchingPreview and Program rows, CUT, and AUTO fades that start and end on an exact frame. A multiview shows every source with its tally.
SourcesCameras, colour bars and solid colours. A camera with no signal is marked on its tile and its key, and reported in Health.
RecordingProgram, picture and sound, to an MP4 using the computer's hardware encoder. The file is complete after every second, so it stays playable if the engine is killed halfway through.
SoundA mixer with a fader, mute and meter for each strip, and a line-up tone. The mix is recorded with the picture. Strips can be microphones and other audio inputs.
The projectEvery change is written to a journal as it happens. Kill the engine, start it again, and the show comes back as it was.
HealthOne indicator for the whole show. Each problem comes with its impact and the action to take.
ControlA local API. The control page uses the same one a script or a button controller would, so anything on screen can be automated.

How each claim was checked

Recordings survive a crashThe engine was killed 30 times at random moments while recording. All 30 files played back in full, and recording resumed in a new file each time the engine restarted.
Sound stays with the pictureA tone that starts on the frame of a cut is found within one millisecond of that frame in the recorded file.
Frames arrive on timeIn a 30-second session at 1080p and 60 frames a second, with recording running, the slowest frame took 6.9 ms of the 16.7 ms available. None were missed.
Recording costs littleRecording added about 0.4 ms to a typical frame.
Colour is rightA red frame, recorded and then decoded by a separate decoder, comes back red, and the file is labelled BT.709.
Timing does not driftFrame rates are kept as exact fractions. 59.94 frames a second is 60000/1001, and the picture, the sound and the file's timestamps are all counted from it.
The engine is tested74 automated tests cover the engine, including the file writer being cut off at every possible byte.

All measured on one Windows computer with an NVIDIA GPU, using generated sources. Power loss, full disks and long shows have not been tested yet.

A closer look

The Program and Preview rows of keys. On the Program row, Amber is lit red and marked Live, and Blue has a dashed outline marked Fading in. On the Preview row, Blue is outlined green and marked Next.
Program and Preview keys. A state is always written on the key as well as coloured: Live, Next, Fading in.
The Health panel: no problems detected, frame time 5.97 of 16.67 milliseconds, 0 missed frames, the recording file and its size, the hardware encoder in use, and the recording space left.
Health, with the numbers behind it.
The Audio panel: a Program mix meter reading minus 15.4 dB, and two strips, each with Mute and Remove buttons, a meter, and a fader with its level in decibels.
Audio strips. Every meter has its reading in numbers beside it.

Built for the bad day

  • The engine is not the screen

    The control page is a separate program from the engine. Close it, reload it or lose it, and the show carries on. Open it again and it shows what is on air.

  • Failure comes first

    Each part is designed from what happens when it breaks, and is not called done until that has been tried.

  • Red means live

    Red is kept for what is on air and what is critical. No state is shown by colour alone: it is always written out too.

  • Nothing is claimed untested

    A camera, encoder or format is listed as supported only after it has passed on real equipment.

Not built yet

  • Streaming
  • Titles and overlays
  • Capture cards and screen capture
  • macOS and Linux
  • Remote operation