Live TS Input

While working for a long-term client, I was asked to create a new live transport stream input module for their cloud-based playout platform, to replace an existing one which was not performing. Running in Kubernetes either on-site or in the cloud, this platform allows broadcasters and service providers to play out and assemble TV channels efficiently. The video processing engine I worked on for this project is written in C++.

One of the requirements for this project was that the new module can be used either for decoding live inputs for playout, or for passing through a stream after modification, or a combination of both - for example decoding the video for futher processing while passing through the subtitle data to the product’s existing output module.

Using a combination of open source libraries and custom parsers written mostly in Rust, I created a new, flexible live input module capable of handling MPTS (multi-program transport stream) or SPTS (single program transport stream) inputs from a variety of sources such as UDP, Zixi, files (used mostly for testing) or linuxdvb-compatible tuners. It can demultiplex these and decode one or more of these inputs using ffmpeg-based decoders.

It is written in a way that allows future expansion. For example, I have since extended it to support teletext input and SCTE-35 triggers.