OpenJVID

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 softwares 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 a custom codec based off QOY, a library which is inspired by QOI compression using YCbCr instead of RGB colorspace. The QOYV codec will be further explained in a separate post.

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 below image is a simple OpenJVID graph which streams from FFMPEG, into a scaler (1920×1080 -> 1280×720) and then into a preview window.

The below image is a preview of the “Add Component” dialog, which shows all available video/audio components. Selecting a component displays its unique configuration options in the dialog, upon completion will create the component and add it to the graph.

Supported Components

The following is a list of components and their support status:

ComponentStatusDescription
NDI IngestSupported
NDI EgressSupported
FFMPEG Ingest (URL)Supported
FFMPEG Ingest (File)Partially SupportedSupported, but EOF is not properly dealt with, nor is video transport.
FFMPEG Ingest (Video Device)Supported
FFMPEG Ingest (String)Partially SupportedMost FFMPEG String inputs are supported, however this is dependent on the source content
QOYV IngestSupported
QOYV EgressSupported
Amcrest Camera IngestSupported + ControlIncludes PTZ control capabilities
AutoFraming DigestPartially Supported (Aspect Ratio does not remain)When auto-framing a face, the relative aspect ratio changes slightly warping the output image
Face DetectorSupported
Face Paint DigestorSupported
Matrix DigestorPartially SupportedSupported, options dialog needs to be updated to reflect last made routes
Multiview DigestorSupported
FFMPEG EgressUnsupportedPlanned addition
Preview FrameSupported
Scaling DigestorSupported
GStreamer IngestSupported, not availablejVid backend library supports this and has been tested, just need to create the component for OpenJVID
GStreamer EgressUnsupported
Preview Frame with PTZ ButtonsSupported, not availablejVid backend library supports this and has been tested, just need to create the component for OpenJVID
Audio InjectorSupportedRelies on JACK server
Audio ExtractorSupportedRelies on JACK server
FilterPartially SupportedWork in progress
ReverbPartially SupportedWork in progress
OpenJVid PeripheralSupported
ComponentStatusDescription
As of 09-23-2024

Peripheral Discovery Service

OpenJVID uses multicast to advertise it’s services to 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 uses a subset of the QOYV streaming protocol.

Planned Features

OpenJVID has a long road ahead with plenty of features in the works, including:

  • Multicast QOYV Streaming
    • QOYV GPU transcoding (OpenCL)
  • Audio streaming
    • Audio effects
    • VST Support
    • AES67 support
  • Graph export and save
  • Automated graph loading
  • Control streaming
  • Broader codec support
    • VP9
    • AV1
  • FFMPEG and gStreamer egress