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.

Advanced Flows

OpenJVID supports more advanced signal flow combinations. One example is the below image. This flow ingests video from a camera using GStreamer, and pipes it into a face detection digestor, which uses OpenCV & Deep Learning to identify facial features. Those facial datasets are then piped using Control Node Points into the FaceSet painter digest, which paints a rectangle around the subject in the frame. Once the paint is completed, the video is scaled and then previewed in a PreviewFrame.

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 Graphs current link state.

Supported Components

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

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 (Now implemented)
  • Automated graph loading (Now implemented)
  • Control streaming
  • Broader codec support
    • VP9 (Now implemented via FFMPEG Ingress & Egress)
    • AV1 (Partially implemented)
  • gStreamer egress
  • NDI Discovery