NvNmos connects an application-owned data plane to NMOS control APIs. The same concepts appear in the C API, the nvnmosd gRPC API, and the GStreamer elements. This guide defines the common terms once.
A configuring transport file is a document supplied by an application to NvNmos. NvNmos uses it to create NMOS resources and their initial connection state.
The format depends on the transport:
These documents also carry NvNmos extensions for information that the standard formats do not contain. Examples include the caller's resource name and an MXL domain ID.
Several related documents use the same syntax but have different roles:
/transportfile is the result exposed to NMOS controllers.For RTP/UDP, an activation carries effective active SDP. A Receiver activation may use SDP supplied in an IS-05 PATCH instead of the configuring SDP. NvNmos applies the active IS-05 transport_params before delivering the SDP to the application.
For MXL, an activation returns the configuring MXL flow definition with the active mxl_domain_id and mxl_flow_id applied. The application can then use those to discover the flow_def.json and configure its MXL data plane.
See Configuring Transport Files for extension syntax and complete minimal Receiver examples.
An activation can begin on either side of NvNmos.
Not every IS-05 PATCH causes an activation. A PATCH may only update staged state. When a controller requests an immediate or scheduled activation:
For an immediate activation, this happens while the controller's request is in progress, so success or failure can be reported to the controller. A scheduled activation occurs after that request has been accepted and responded to.
The surface APIs are:
nmos_connection_activation_callback.SubscribeActivations, followed by AckActivation.The surface APIs are:
nmos_connection_activate.SyncResourceState.auto-activate=true applies the element's configured data plane without waiting for a controller.An activation callback and an activate or sync call therefore have opposite directions. The callback asks the application to handle a controller-originated request. The call reports a state change that originated in the application.
NMOS controllers and NvNmos applications identify resources differently.
NMOS controllers use the standard NMOS APIs. These APIs identify resources with NMOS UUIDs.
An application using the C API or the nvnmosd gRPC API identifies a Sender or Receiver using Node seed, resource side, and caller-chosen name.
The resource side is Sender or Receiver. Names must be unique among resources on the same side of a Node. A Sender and a Receiver on the same Node may share the same name.
One application resource can correspond to several NMOS resources:
Keep the seed and names stable to preserve the derived UUIDs across restarts. Changing either changes the corresponding resource UUIDs.
Labels, descriptions, group hints, and similar values are human-readable metadata. They do not uniquely identify a resource.
For the Node seed example-node and caller-chosen name camera-video, NvNmos derives:
The Node and Device UUIDs depend only on the seed. The Source, Flow, and Sender UUIDs use the name on the Sender side. The Receiver UUID uses the same name on the Receiver side. All six UUIDs are distinct and deterministic.
The corresponding nmos_make_*_id functions can compute each UUID before starting a server.
The NMOS Flow ID is not the MXL mxl_flow_id transport parameter. The NMOS Flow ID identifies the IS-04 Flow resource. mxl_flow_id identifies the MXL data-plane flow selected through IS-05.
The C API can compute or query Node, Device, Source, Flow, Sender, and Receiver UUIDs.
The gRPC API:
AddNode and OpenSession;AddSender or AddReceiver;Handles are allocated by a running nvnmosd instance. They remain valid only while the referenced object and daemon process exist. They are not NMOS UUIDs and are not visible to controllers.
The sender-name, receiver-name, and channelmapping-name properties provide the caller-chosen names used for NvNmos identity. A GStreamer element's name and a pad's name identify objects within the pipeline only. They do not provide NvNmos identity or affect NMOS UUIDs.
NvNmos also publishes the caller-chosen name as urn:x-nvnmos:tag:name on the corresponding NMOS Sender or Receiver. This helps correlate application configuration with controller-visible resources during debugging and diagnostics. Controllers must continue to use the NMOS UUID as resource identity.