nmossink

nmossink is an NMOS Sender. It creates an IS-04 Sender on an NMOS Node hosted by nvnmosd and transmits the video, audio or ST 2038 ANC essence arriving on its sink pad over the configured transport.

Properties are listed alphabetically below. The Configuration Guide groups them by task and explains the common configuration choices.

Examples

These pipelines assume nvnmosd is listening on unix:/tmp/nvnmosd.sock. With the default auto-activate=false the Sender appears on IS-04/IS-05 and an IS-05 controller PATCHes it to start media.

Caps-driven MXL sender (scripts/example-pipelines/minimal-prop-sender-mxl.sh):

 gst-launch-1.0 -e \
   videotestsrc pattern=smpte is-live=true ! \
   video/x-raw,format=v210,width=1920,height=1080,framerate=25/1,interlace-mode=progressive ! \
   nmossink \
     transport=mxl \
     node-seed=example-minimal-producer \
     sender-name=video1 \
     mxl-domain-id=92c696c2-66f9-4d86-8a87-13135d847189 \
     mxl-domain-path=/dev/shm/gst-nmos-rs-examples \
     caps="video/x-raw,format=v210,width=1920,height=1080,framerate=25/1,interlace-mode=progressive" \
     label="minimal 1080p25 v210 sender"

Caps-driven RTP/UDP sender (scripts/example-pipelines/minimal-prop-sender-udp.sh):

 gst-launch-1.0 -e \
   videotestsrc pattern=smpte is-live=true ! \
   video/x-raw,format=UYVP,width=1920,height=1080,framerate=25/1,interlace-mode=progressive ! \
   nmossink \
     transport=udp \
     node-seed=example-minimal-producer \
     sender-name=video1 \
     source-ip=192.0.2.10 \
     caps="video/x-raw,format=UYVP,width=1920,height=1080,framerate=25/1,interlace-mode=progressive" \
     label="minimal 1080p25 UYVP sender"

Replace source-ip with the IP address of the local NIC to transmit from.

Deferred sender: omit caps and the element synthesises the configuring transport file from upstream caps at pre-roll — often videotestsrc ! nmossink with only transport, node-seed, and sender-name is enough.

Transport-file variant: write an MXL flow_def or SDP to disk and pass transport-file-path=/path/to/file instead of caps and the identity properties above (scripts/example-pipelines/minimal-file-sender-mxl.sh, minimal-file-sender-udp.sh).

Daemon connection

This element is a front end for the nvnmosd NMOS daemon and holds no NMOS state of its own. At NULL→READY it opens a gRPC session to the daemon (daemon-uri) and closes it again at READY→NULL, so nvnmosd must already be running when the pipeline starts. The daemon serves the AMWA IS-04, IS-05 and IS-08 HTTP APIs; the element only drives the session and its inner GStreamer data path.

Node properties

Sessions that share a node-seed contribute to the same NMOS Node, so one host can present many Senders, Receivers and channel maps under a single Node simply by reusing the seed. The Node identity properties — host-name, node-properties, domain, registration-url, system-url and http-port — are taken from whichever session first creates the Node and ignored by later sessions that attach to it. node-properties groups the Node and Device label, description, and BCP-002-02 asset information.

Transport

transport selects the inner data path — mxl (MXL shared memory), udp or udp2 (ST 2110 over RTP/UDP), or nvdsudp (ST 2110 via DeepStream and Rivermax). The element builds and manages the matching inner elements for you, so you never add mxlsink, udpsink and the RTP payloaders to the pipeline yourself. MXL additionally needs mxl-domain-path; the RTP transports use the IS-05 endpoint properties.

Inner elements are created when the data path starts and must already be registered: mxl uses mxlsink from the gst-mxl-rs plugin (and libmxl.so on the dynamic loader path); udp uses udpsink plus an essence-specific rtp*pay from gst-plugins-good; udp2 prefers matching *pay2 elements from gst-plugins-rs where available, falling back to gst-plugins-good per element (udpsink is always from gst-plugins-good); nvdsudp uses nvdsudpsink from the DeepStream plugin (built-in payloading). The exact RTP payloader is chosen from the configuring transport file and caps. See the transport property for the full family list; plugin loading and GST_PLUGIN_PATH setup are in the Usage Guide.

Configuring the Sender

Before it can be added to the Node the Sender needs a configuring transport file — an SDP for the RTP transports or an MXL flow_def. Provide it in one of two ways:

  • From caps. Set caps to the essence you are sending and the element synthesises the file, together with the transport identity properties (mxl-flow-id on MXL; the IS-05 endpoint properties such as destination-ip on RTP/UDP).
  • From a transport file. Set transport-file-path (or, for programmatic callers, transport-file) to a ready-made SDP or flow_def.

If neither is set the Sender is configured lazily: the element reads the upstream caps as the pipeline pre-rolls and synthesises the file from those, so a plain … ! nmossink often works with no caps property at all. sender-name names the Sender on the Node; label and description are optional and override the file.

Activation

Appearing on the Node (visible to IS-04/IS-05 controllers) is separate from the data path going live. By default (auto-activate=false) the Sender is created but stays idle until an IS-05 controller activates it with a PATCH. Set auto-activate=true to bring the data path up immediately from the configured transport file and have the daemon reflect that in the IS-05 API — a convenient shortcut for development and controller-less setups.

Hierarchy

GObject
    ╰──GInitiallyUnowned
        ╰──GstObject
            ╰──GstElement
                ╰──GstBin
                    ╰──nmossink

Implemented interfaces

GstChildProxy

Factory details

Authors: – NVIDIA Corporation

Classification:Sink/Network/NMOS

Rank – none

Plugin – nmos

Package – gst-nmos-rs

Pad Templates

sink

ANY

Presencealways

Directionsink

Object type – GstPad


Properties

active

“active” gboolean

Whether the data plane is currently active (real inner transport chain). Orthogonal to GStreamer pipeline state: the pipeline may be PLAYING while this property is false when waiting for activation.

Flags : Read

Default value : false


auto-activate

“auto-activate” gboolean

Activate the configured data plane without waiting for an IS-05 controller. This property does not change the GStreamer pipeline state. Default: false.

Flags : Read / Write

Default value : false


caps

“caps” GstCaps*

Unpacketized media caps used to configure and advertise this Sender. When transport-file* is also set, it must agree with these caps.

Flags : Read / Write


daemon-uri

“daemon-uri” gchararray

Address of nvnmosd used to expose this element through NMOS. Only Unix socket URIs are supported. Default: unix:/tmp/nvnmosd.sock.

Flags : Read / Write

Default value : unix:/tmp/nvnmosd.sock


description

“description” gchararray

Description for this Sender shown to controllers as IS-04 description. When set, overrides the matching value from transport-file*.

Flags : Read / Write


destination-ip

“destination-ip” gchararray

Remote unicast address or multicast group for RTP/UDP transmission. Empty uses transport-file* or a controller-supplied value. Corresponds to IS-05 Sender transport_params.destination_ip. Used only with RTP/UDP.

Flags : Read / Write


destination-port

“destination-port” guint

Remote destination port for RTP/UDP transmission. 0 uses transport-file*, otherwise 5004. Corresponds to IS-05 Sender transport_params.destination_port. Used only with RTP/UDP.

Flags : Read / Write

Default value : 0


domain

“domain” gchararray

DNS domain used to discover NMOS services. Use local for mDNS. Empty selects automatic discovery. Only the first element to create the Node controls this value.

Flags : Read / Write


format-bit-rate

“format-bit-rate” guint64

Coded media bit rate in kilobits per second for JPEG XS. 0 is unset. When only one bit-rate property is set, the other is derived. Used only with RTP/UDP.

Flags : Read / Write

Default value : 0


group-hint

“group-hint” gchararray

NMOS group hint for the Sender, for example Camera:Video. When set, overrides the matching value from transport-file*.

Flags : Read / Write


host-name

“host-name” gchararray

Host name advertised by the NMOS Node. Empty autodetects it. Only the first element to create the Node controls this value.

Flags : Read / Write


http-port

“http-port” guint

Port for the Node's NMOS HTTP APIs. 0 allocates a port automatically. Only the first element to create the Node controls this value.

Flags : Read / Write

Default value : 0


label

“label” gchararray

Label for this Sender shown to controllers as IS-04 label. When set, overrides the matching value from transport-file*.

Flags : Read / Write


mxl-domain-id

“mxl-domain-id” gchararray

UUID advertised for the MXL Domain. Empty lets domain_def.json supply it. Without either value, the domain remains application-resolved. It must match domain_def.json when both are present. Used only with MXL.

Flags : Read / Write


mxl-domain-path

“mxl-domain-path” gchararray

Local path to the MXL Domain used by the data plane. A domain_def.json in this directory can supply or verify mxl-domain-id. Used only with MXL.

Flags : Read / Write


mxl-flow-id

“mxl-flow-id” gchararray

UUID of the MXL flow produced by this Sender. When set, overrides the matching value from transport-file*. Used only with MXL.

Flags : Read / Write


node-properties

“node-properties” GstStructure*

Node and Device metadata. Supported fields are label, description, manufacturer, product, instance-id, and functions; the asset fields must be supplied together. For example properties,label=Studio-A,manufacturer=Acme,product=(string)"Widget Pro",instance-id=XYZ123-456789,functions=(string)<Encoder,Decoder>. Only the first element to create the Node controls this value.

Flags : Read / Write


node-seed

“node-seed” gchararray

Caller-chosen seed for the NMOS Node. Elements using the same seed with one daemon join the same Node. Use a globally unique seed for each Node. It determines stable NMOS resource IDs. It is required.

Flags : Read / Write


pay-properties

“pay-properties” GstStructure*

Additional properties for the RTP payloader, for example properties,mtu=(uint)1220. Applied the next time the Sender data plane is built. Used only with RTP/UDP.

Flags : Read / Write


registration-url

“registration-url” gchararray

Fixed IS-04 Registration API URL. Empty uses DNS-SD discovery. Only the first element to create the Node controls this value.

Flags : Read / Write


sender-name

“sender-name” gchararray

Caller-chosen name for this Sender. It must be unique among Senders on the Node. Together with node-seed, it determines stable NMOS resource IDs. It is required unless supplied by transport-file*.

Flags : Read / Write


source-ip

“source-ip” gchararray

Local source address for RTP/UDP transmission. Empty selects it automatically. Corresponds to IS-05 Sender transport_params.source_ip. Used only with RTP/UDP.

Flags : Read / Write


source-port

“source-port” guint

Local source port for RTP/UDP transmission. 0 lets the operating system choose. Corresponds to IS-05 Sender transport_params.source_port. Used only with RTP/UDP.

Flags : Read / Write

Default value : 0


system-url

“system-url” gchararray

Fixed IS-09 System API URL. Used only when registration-url is also set. Only the first element to create the Node controls this value.

Flags : Read / Write


transport

“transport” GstNmosTransport*

Data-plane implementation. udp uses gst-plugins-good RTP/UDP. udp2 uses gst-plugins-rs RTP/UDP where available. mxl uses MXL shared memory. nvdsudp uses DeepStream/Rivermax ST 2110. Default: udp.

Flags : Read / Write

Default value : udp (1)


transport-bit-rate

“transport-bit-rate” guint64

Total RTP/UDP/IP bit rate in kilobits per second for JPEG XS. 0 is unset. When only one bit-rate property is set, the other is derived. Used only with RTP/UDP.

Flags : Read / Write

Default value : 0


transport-caps

“transport-caps” GstCaps*

RTP-layer settings expressed as application/x-rtp caps. Used only with RTP/UDP.

Flags : Read / Write


transport-file

“transport-file” gchararray

Configuring SDP text for RTP/UDP or MXL flow-definition JSON for MXL. Empty makes the element derive the configuration from the caps property or negotiated upstream caps, plus applicable RTP/UDP endpoint or MXL properties. Mutually exclusive with transport-file-path.

Flags : Read / Write


transport-file-path

“transport-file-path” gchararray

Path to configuring SDP or MXL flow-definition JSON, read when the element starts. Mutually exclusive with transport-file.

Flags : Read / Write


transport-properties

“transport-properties” GstStructure*

Additional properties for the selected transport source or sink, for example properties,buffer-size=26214400. Applied the next time the data plane is built.

Flags : Read / Write


The results of the search are