Usage Guide

GStreamer plugin (nmos) providing the nmossrc, nmossink, and nmosaudiochannelmap elements. They talk to the nvnmosd NMOS daemon over gRPC. See the Daemon design record and the Rust workspace quick start.

The Core NvNmos Concepts guide explains the transport file, activation direction, and identity model shared by the GStreamer elements, C API, and daemon.

Quick Start

The workspace quick start covers prerequisites and builds libnvnmos, nvnmosd, and this plugin. It then runs an RTP/UDP Sender and Receiver in three terminals:

# Terminal 1, from rust/
cargo run --bin nvnmosd

# Terminal 2, from rust/gst-nmos-rs/
./scripts/example-pipelines/1080p25-sender-udp.sh

# Terminal 3, from rust/gst-nmos-rs/
./scripts/example-pipelines/1080p25-receiver-udp.sh

The example uses transport=udp, so its transport path uses gst-plugins-good, and auto-activate=true, so video starts without an NMOS Controller. The full quick start shows the required NVNMOS_LIB_DIR, LD_LIBRARY_PATH, and GST_PLUGIN_PATH settings.

Building

cd /path/to/nvnmos/rust
cargo build -p gst-nmos-rs

Build output is target/debug/libgstnmos.so (or target/release/...).

Loading the Plugin

export GST_PLUGIN_PATH=/path/to/nvnmos/rust/target/debug
gst-inspect-1.0 nmos

gst-inspect-1.0 nmos prints the plugin metadata; gst-inspect-1.0 nmossink, gst-inspect-1.0 nmossrc, and gst-inspect-1.0 nmosaudiochannelmap list the exact property reference.

Pipeline Examples

The pipeline examples provide copy-paste gst-launch-1.0 recipes for MXL, RTP/UDP, and DeepStream Rivermax, plus an interactive three-Node IS-05 demo. Static scripts are under scripts/example-pipelines/.

Troubleshooting

  • Plugin not found: confirm libgstnmos.so is on GST_PLUGIN_PATH and libnvnmos.so is on LD_LIBRARY_PATH, then run gst-inspect-1.0 nmos.
  • Cannot connect to the daemon: start nvnmosd and check that daemon-uri names the same Unix socket.
  • Node has no Sender: an nmossink without caps or transport-file* waits until READY→PAUSED to query upstream caps. Move the pipeline to PAUSED or PLAYING and ensure upstream offers fixed, supported caps.
  • Node has no Receiver: nmossrc does not defer configuration; set caps or transport-file* before READY.
  • Sender or Receiver is visible but media is not flowing: either activate it through IS-05 or set auto-activate=true for a self-starting pipeline.
  • Caps negotiation fails: compare the configured or negotiated caps with the supported essence shapes.
  • Node does not appear in the Registry: check domain, registration-url, and the DNS-SD service used by the host.
  • MXL or DeepStream transport setup fails: check the MXL environment in the workspace quick start or the DeepStream/Rivermax prerequisites.

Further Guidance

The results of the search are