Skip to content

Concepts

Jerzy Jaśkiewicz edited this page Dec 22, 2019 · 7 revisions

Application purpose

The project is intended to merge some components required to build complete television broadcast playout automation in wide range of applications - from simple, occasionally launched channels for few day broadcast, to fully redundant multi-channel facilities. The main aforementioned components are:

Software

  • CasparCG, which is multi-layer, multi-channel clip player, video and audio mixer, and broadcast character generator. In facts, it's feature list is much wider than used in this particular project. Although, due to some missing features required in this project, we use our own fork.
  • FFmpeg, in this application used to verify and re-encode ingest files to selected broadcast format. It also used to check file properties, and measure media loudness according to EBU R.128 specification.
  • MySQL provides application persistence layer with replication capability.
  • Microsoft .NET platform and Visual Studio are solid foundations that makes development much easier.

Hardware specific to the project

  • Blackmagic Design Decklink as audio/video input/output devices.
  • Advantech GPI cards - they may be used to trigger play-out from external systems, as well as to control external CG systems if required.

Application objects

The following paragraphs introduces most important objects used in application. It also conforms to code object naming.

Event

Event is main component of playout rundown. In fact, rundown is also Event. Events can be of one of these types:

  • Rundown (also nested),
  • Clip - clip movie, to play it from file in server's media directory,
  • Live - live image acquired from server's video input,
  • Still Image - static image that can be channel branding etc.,
  • Containter - an special Event that can only contain rundowns,
  • Flash Animation - Adobe Flash animation with parameters needed to it's execution on CasparCG server.
  • Custom command - CasparCG native command that will be parsed and executed on server.

Events are linked one to another, but single Event can have only one successor, and be linked to single parent or predecessor, however many Events can be connected to particular parent (e.g. when two or more graphics needs to be shown over a movie). Event connected to parent will trigger with it start, if it's connected to predecessor, will execute when the predecessor is finished.

Therefore every Event determines its start time according to it's connection. Exception is, of course, root rundown, which start time is set by user.

Most Events also have its duration. At simplest case, duration is movie length. But it's possible to play part of the clip (trim it) or use inter-event transition effects, which shortens the Event effective duration.

Events have their names (for media - movie and still images - events they are copied from media names on event creation).

Every Event can be easily disabled (to be omitted in rundown) or be a "hold" Event, which - when triggered - will pause rundown execution (last frame of previous event will be displayed in still).

Directory

Directories of course contains files (in case of this application called Media). There are several types of media directory:

  • Server directory, from which clips are available directly to play on rundown,
  • Archive directory, where unnecessary clips can be archived and easily retrieved,
  • Ingest directory, from where clips can be acquired to server. There are few kinds of ingest directory: watchfolder (on Windows share), ftp, and on Sony XDCAM deck. Ingest directories may also have possibility of exporting clips. This is also true for XDCAM ftp decks, however currently only in PAL IMX formats.

Directories are always flat list of files. Despite this, ingest directories can show also its sub-folders, but they are presented as flat list.

Typical TV channel (in code it is called Engine) can have operate on two servers, so it may have two directories (and it must have at least one), one archive directory and reasonable number of ingest directories.

Server and archive directories persists its content in database (to preserve metadata).

Media

At least as important as event, Media is component of directory. Media can be movie, still or Flash animation. Media items can be linked to Events. Media distinguishes by GUIDs (unique identifiers), which is the same for the same file content, regardless where the Media directory is (ingest, server, archive). So same GUIDs Media can exist on both server directories and on archive directory.

Engine

Mentioned earlier, Engine is rundown scheduler. It is intended to service single TV channel and have assigned required resources. It's the core of application, and there can be several engines running in the same application.