Video pipelines you can wire up like a DSP rack — transcoding, routing, and a few custom codecs for good measure.

OpenJVID is a UI application for video transcoding, and routing both local to the host machine and across networks. OpenJVID relies on existing video transcoding software such as FFMPEG, GStreamer, and OpenCV for codec translation, as well as its own independent set of transcoding options. These include NDI5 and QOYV.

NDI5 is a well-known video streaming solution by Newtek (now Vizrt) for broadcast-quality video. QOYV is the custom video path — each frame is compressed with QOY, a YCbCr 4:2:0 cousin of QOI. The full family tree (and why it isn’t just “QOI but for video”) lives in the QOYV post.

Repo: github.com/danschirripa/OpenJVID

GUI / Functionality

OpenJVID mirrors the functionality of an Open Architecture DSP to provide a simple and intuitive UI. OpenJVID operates at a constant 60fps, and currently resamples all inputs/outputs to match.

The image below is a simple OpenJVID graph which streams from FFMPEG, into a scaler (1920×1080 → 1280×720), and then into a preview window.

OpenJVID graph streaming FFMPEG into a scaler and preview

OpenJVID graph preview alternate view

The image below is a preview of the “Add Component” dialog, which shows all available video/audio components. Selecting a component displays its unique configuration options; on completion it creates the component and adds it to the graph.

Add Component dialog

Advanced Flows

OpenJVID supports more advanced signal-flow combinations. One example is below: this flow ingests video from a camera using GStreamer, pipes it into a face-detection digestor (OpenCV & deep learning), then pipes those facial datasets via Control Node Points into the FaceSet painter digest, which paints a rectangle around the subject. Once painting completes, the video is scaled and previewed in a PreviewFrame.

Advanced face-detection signal flow

Diagnostic Web UI

Diagnostic Web UI

Now featuring a Diagnostic Web User Interface which allows for specific REST endpoint interaction, as well as configuration transfers. Includes a “Node Linkages” section which displays the node graph’s current link state.

Supported Components

As of the original site write-up:

Component Status Description
NDI Ingest Supported
NDI Egress Supported Includes audio injection for NDI Audio Egress
FFMPEG Ingest (URL) Supported
FFMPEG Ingest (File) Partially Supported EOF is not properly dealt with, nor is video transport
FFMPEG Ingest (Video Device) Supported
FFMPEG Ingest (String) Partially Supported Most FFMPEG string inputs work; depends on source content
QOYV Ingest Supported
QOYV Egress Supported
Amcrest Camera Ingest Supported + Control Includes PTZ control capabilities
AutoFraming Digest Partially Supported Aspect ratio does not remain; slight warp when auto-framing
Face Detector Supported
Face Paint Digestor Supported
Matrix Digestor Partially Supported Options dialog needs update to reflect last made routes
Multiview Digestor Supported
FFMPEG Egress Supported
Preview Frame Supported
Scaling Digestor Supported
GStreamer Ingest Supported
GStreamer Egress Unsupported Planned; GStreamer egress docs are sparse
Preview Frame with PTZ Buttons Supported
Audio Injector Supported Relies on JACK; errors without JACK but OpenJVID continues
Audio Extractor Supported Relies on JACK; errors without JACK but OpenJVID continues
Filter Partially Supported Work in progress
Reverb Partially Supported Work in progress
OpenJVid Peripheral Supported

Peripheral Discovery Service

As of 2024-09-23: OpenJVID uses multicast to advertise its services on the network. Once a peripheral has been registered in OpenJVID, it can be added to the graph using the OpenJVID Peripheral component. Inter-peripheral communications use a subset of the QOYV streaming protocol.

Planned Features

OpenJVID has a long road ahead, including multiview layout configuration, video recording, and expanded GStreamer support.