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:
Component | Status | Description |
---|---|---|
NDI Ingest | Supported | |
NDI Egress | Supported | |
FFMPEG Ingest (URL) | Supported | |
FFMPEG Ingest (File) | Partially Supported | Supported, but EOF is not properly dealt with, nor is video transport. |
FFMPEG Ingest (Video Device) | Supported | |
FFMPEG Ingest (String) | Partially Supported | Most FFMPEG String inputs are supported, however this is dependent on the 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) | When auto-framing a face, the relative aspect ratio changes slightly warping the output image |
Face Detector | Supported | |
Face Paint Digestor | Supported | |
Matrix Digestor | Partially Supported | Supported, options dialog needs to be updated to reflect last made routes |
Multiview Digestor | Supported | |
FFMPEG Egress | Unsupported | Planned addition |
Preview Frame | Supported | |
Scaling Digestor | Supported | |
GStreamer Ingest | Supported, not available | jVid backend library supports this and has been tested, just need to create the component for OpenJVID |
GStreamer Egress | Unsupported | |
Preview Frame with PTZ Buttons | Supported, not available | jVid backend library supports this and has been tested, just need to create the component for OpenJVID |
Audio Injector | Supported | Relies on JACK server |
Audio Extractor | Supported | Relies on JACK server |
Filter | Partially Supported | Work in progress |
Reverb | Partially Supported | Work in progress |
OpenJVid Peripheral | Supported | |
Component | Status | Description |
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