**This is an old revision of the document!**
CRS Ticket Tracker
The Ticket Tracker is a web platform tracking process of video recording and ingest sources and video encoding progress. It guides users through manual processes like editing and checking and provides an API for scripts doing post processing and encoding.
The tracker is a PHP web application and distributes tasks in form of 'tickets' to various workers. The worker scripts – written in Perl, Python, or PHP – advance the state and update the ticket's properties via tracker's XML RPC API.
The core system was initially written by FeM – Forschungsgemeinschaft elektronische Medien e.V. for 27C3 in 2010, and was released under the Apache License 2.0 end of 2017. Our instance is deployed at https://tracker.c3voc.de.
source code:
- workers
- https://github.com/voc/publishing (Python)
- (VOC) encoding profiles: TODO
Further resources:
Concepts
The C3 Ticket Tracker enables the (semi-)automated recording, editing & release of multilingual videos. In order to complete a release successfully, certain project settings must be configured and a few of the state transitions must be operated manually:
Ticket types and hierarchy
One of the really good features of the C3 tracker is that propertyies are inherited through the hierarchy:
- Project settings (Conference or Series)
- Meta ticket (Parent with Fahrplan-ID & -Metadata)
- Recording ticket (Language, etc)
- Main encoding ticket (MP4)
- additional encoding tickets, e.g. WebM, MP3, Opus, SD formats, etc.
Ticket states and pipeline
For each ticket type, the tracker has a predefined set of states, which can be enabled and disabled on an per project basis. Here is an example workflow with only one manual checking
step:
This allows quite flexible pipelines, which are described in more detail in Project setup – for now lets focus on a typical one:
Let's look into the steps done by worker scripts
Recording
A: Recording Scheduler
script-A-recording-scheduler.pl
Schedules and transitions tickets from scheduled
via recording
to recorded
, optionally filters by room. Skips opt-out events, but does not perform any real task besides transitioning the recording ticket.
- Inputs: CRS ticket in
scheduled
state - Outputs: Ticket moved to
recording
or skipped - Notes: Uses
CRS_ROOM
,Record.StartedBefore
, andRecord.EndedBefore
filters
B: Create virtual project files
Mounts raw video segments via FUSE. Checks and sets cut marks, stores metadata like duration and framerate.
- Inputs: Ticket in
recording
→preparing
state - Outputs: FUSE mount created and cut marks optionally stored
- Notes: Supports DV and TS formats
C: Finalize
Validates cut marks, adds intro/outro clips if defined, and calculates cut durations. Fails tickets with incomplete data.
- Inputs: Ticket in
finalizing
state - Outputs: Ticket updated with durations and metadata
- Notes: Verifies intro/outro file paths and presence
Encoding
D: Encoding
Runs encoding tasks from job XML. Skips if Voctomix is detected. Supports VAAPI acceleration and logs execution times.
- Inputs: Ticket in
encoding
state - Outputs: Encoded media file(s), ticket state updated
- Notes: Uses CRS::Executor and task-type detection
E: Postencoding
script-E-postencoding-auphonic.pl
Runs audio processing and remuxing. Can optionally delegate to Auphonic for audio leveling and rendering.
- Inputs: Ticket in
postencoding
state - Outputs: Updated audio tracks and metadata
- Notes: Supports audio hash checking and production reuse
F: Upload from Encoder (local) to Releasing host
script-F-postprocessing-upload.pl
Uploads processed files to the target via ssh from encoder/storage to releasing.c3voc.de. Can skip uploads based on host config.
- Inputs: Ticket in
postprocessing
state - Outputs: Files pushed to publishing target
- Notes: Validates file presence, honors opt-out and skip-hosts
Publishing
Usage during event
Task: Cut
Task: Check
see checking
Ticket types and states
- Parent tickets for each Fahrplan entry
- one recording ticket for each parent
- several encoding tickets, one for each format – e.g. MP4 HD, MP4 SD, WebM, MP3, Opus
Project setup
- Create tracker project (you can also clone a matching project to have prefilled properties)
- Import schedule.xml
- Set all master tickets from staging to staged via mass-edit
- Adjust project properties, recommendations: (full reference at the bottom of the page)
- Compare project properties with previous instalment of the same event
see Project setup for more details
User Roles
User accounts can have different roles depending on what the user should be able to do:
- “User” - can cut and edit tickets
- “Restricted” - can only use already defined actions and can't define new actions
- “Superuser” - can edit profiles and (re)import fahrplan
- “Admin”
more details on https://github.com/crs-tools/tracker/blob/master/src/Config/AccessControl.php
Recording
Files that should be handled by the tracker (input files) should be named as follows:
<room>-YYYY-MM-DD_HH-MM-SS.<extension>
Files need to be placed in directories according to the room name
Note: Note that names are stripped from frab and combined with the word “saal” which means i.e. “startrampe 23” results in “saal23”. THIS WILL BE FIXED IN THE FUTURE.
Naming for intro and outro:
- Intro <frab-id>.dv
- Outro: outro.dv
Postprocessing
Cut
The cutting process requires start and end marks. The tracker accepts frame numbers. If your player does not show frame numbers you can approximate with the formula
seconds * 25
assumed you have 25 frames per second. Note that this means you cut per second not per frame !!!