Skip to main content
NVIDIA
NMOS Connections Operator
Container
NVIDIA
NMOS Connections Operator

Kubernetes operator for Holoscan for Media that manages NMOS connections between media function endpoints with ST 2110 and MXL support.

Sign in to access all content for this ContainerSigning in will also allow download accessSign In

NMOS Connections Operator

The NMOS Connections Operator is a Kubernetes operator for Holoscan for Media that manages NMOS (Networked Media Open Specifications) connections between media function endpoints. It provides declarative Custom Resources for establishing, monitoring, and tearing down IS-05 connections across ST 2110 and MXL media workloads.

The operator resolves source and destination endpoints dynamically via the NMOS registry (IS-04) or inline SDP, establishes connections using the NMOS Connection API (IS-05), and continuously monitors connection health with configurable retry and backoff strategies.

Custom Resources

Custom ResourceScopeDescription
NMOSConnectionsNamespacedDeclares desired media connections between source and destination endpoints.
MediaEndpointNamespacedRepresents an external media device with configurable inputs and outputs. Supports NMOS, inline SDP, or static MXL control.
NMOSConnectionsOperatorConfigClusterCluster-wide operator configuration (singleton). Controls NMOS registry URL, retry limits, backoff, and polling intervals.

Prerequisites

  • A Kubernetes cluster supporting apiextensions.k8s.io/v1 CRDs and CEL validation rules
  • Helm 3
  • An NMOS registry (IS-04) reachable from the operator pod when using NMOS-controlled endpoints
  • Multus CNI and default/media-a-rx-net-static for the packaged network defaults, or override highSpeedNetworks to use other attachments or only the default pod network

Installation

Install the operator using the associated Helm chart:

helm install nmos-connections-operator \
  <url> \
  --version 0.1.0 \
  --namespace nmos-connections-operator --create-namespace \
  --set image.imagePullSecrets[0].name=ngc-secret \
  --set-string config.nmosUrl=http://registry.example.com:8010

Helm Values

ValueDescriptionDefault
image.repositoryOperator container imagenvcr.io/nvidia/holoscan-for-media/nmos-connections-operator
image.tagOperator image tag"" (chart appVersion)
image.imagePullSecretsExisting Kubernetes image-pull secrets in the Helm release namespace[]
image.imageCredentials.registryRegistry for inline credential secretnvcr.io
image.imageCredentials.usernameRegistry username$oauthtoken
image.imageCredentials.passwordRegistry password (leave empty to skip secret creation)""
resources.limits.cpuCPU limit for the operator pod500m
resources.limits.memoryMemory limit for the operator pod128Mi
highSpeedNetworksAdditional Multus attachments; a list of {name, namespace, ip, resourceName}One default/media-a-rx-net-static attachment
config.nmosUrlNMOS registry base URLNot set; operator fallback is http://localhost:8010

For each network attachment, omit namespace to use the Helm release namespace, or set it explicitly for a cross-namespace NAD. Set highSpeedNetworks to [] to use only the default pod network.

config.nmosUrl must be reachable using the operator pod's routing, and its port is specified in the URL. Use the default pod network for management access, or add another network attachment with suitable routing to a dedicated out-of-band NMOS network.

Uninstallation

Remove all connection instances, then uninstall the operator:

kubectl delete nmosconnections --all -A
kubectl delete mediaendpoints --all -A
helm uninstall nmos-connections-operator -n nmos-connections-operator

Quick Start

Connecting Two Media Functions

The following Custom Resource connects a color pattern generator's video output to a video flipper's video input via NMOS:

apiVersion: nvidia.com/v1alpha1
kind: NMOSConnections
metadata:
  name: color-pattern-to-video-flipper
  namespace: default
spec:
  connections:
    - source:
        kind: NvidiaColorPatternMediaFunction
        name: nvidiacolorpatternmediafunction-sample
        output: video_output
      destination:
        kind: NvidiaVideoFlipperMediaFunction
        name: nvidiavideoflippermediafunction-sample
        input: video_input

Apply the resource:

kubectl apply -f connection.yaml

Verify the connection status:

kubectl get nmosconnections color-pattern-to-video-flipper

The Phase transitions to Ready once all connections are established.

Connecting an External SDP Source

Use a MediaEndpoint to represent devices outside the cluster that use inline SDP instead of NMOS discovery:

apiVersion: nvidia.com/v1alpha1
kind: MediaEndpoint
metadata:
  name: external-camera
  namespace: default
spec:
  outputs:
    video:
      control:
        sdp:
          data: |
            v=0
            o=- 1443716955 1443716955 IN IP4 192.168.100.195
            s=SMPTE ST2110-20 narrow gap 1080p60
            t=0 0
            m=video 50000 RTP/AVP 96
            c=IN IP4 234.5.6.7/64
            a=source-filter: incl IN IP4 234.5.6.7 192.168.100.195
            a=rtpmap:96 raw/90000
            a=fmtp:96 sampling=YCbCr-4:2:2; width=1920; height=1080; exactframerate=60; depth=10; TCS=SDR; colorimetry=BT709; PM=2110GPM; SSN=ST2110-20:2021
            a=ts-refclk:ptp=IEEE1588-2008:traceable
---
apiVersion: nvidia.com/v1alpha1
kind: NMOSConnections
metadata:
  name: external-camera-to-video-flipper
  namespace: default
spec:
  connections:
    - source:
        kind: MediaEndpoint
        name: external-camera
        output: video
      destination:
        kind: NvidiaVideoFlipperMediaFunction
        name: nvidiavideoflippermediafunction-sample
        input: video_input

Spec Reference

NMOSConnections - spec.connections[]

FieldTypeDescription
source.kindstringKubernetes kind of the source resource.
source.namestringName of the source resource.
source.namespacestringNamespace of the source (defaults to CR namespace).
source.outputstringOutput port name on the source.
destination.kindstringKubernetes kind of the destination resource.
destination.namestringName of the destination resource.
destination.namespacestringNamespace of the destination (defaults to CR namespace).
destination.inputstringInput port name on the destination.

MediaEndpoint - spec

FieldTypeDescription
outputsmap[string]EndpointPortSender endpoints keyed by output name.
inputsmap[string]EndpointPortReceiver endpoints keyed by input name.
inputs/outputs.<name>.control.nmosobjectSelect NMOS IS-04/IS-05 control using an empty object ({}).
inputs/outputs.<name>.control.sdp.datastringInline SDP for RTP transport.
inputs/outputs.<name>.control.mxl_static.mxl_domain_idstringStatic MXL domain identifier.
inputs/outputs.<name>.control.mxl_static.mxl_flow_idstringStatic MXL flow identifier.

Exactly one of nmos, sdp, or mxl_static must be configured for each input or output.

NMOSConnectionsOperatorConfig - spec

FieldTypeDefaultDescription
nmosUrlstringhttp://localhost:8010NMOS registry base URL. The built-in fallback normally must be overridden.
nmosTimeoutduration5sHTTP timeout for NMOS API calls.
maxConnectionRetriesint20Max connection attempts before stopping.
maxDisconnectionRetriesint10Max disconnection attempts before force-disconnect.
pendingRequeueIntervalduration1sRequeue interval while waiting for resources.
requeueIntervalduration5sBase retry interval for failed operations.
connectionCheckIntervalduration5sHow often to verify established connections.
disconnectedRetentionPeriodduration5sHow long to keep disconnected connections in status.
maxBackoffDurationduration5mCap for exponential backoff.

License

By downloading and using this software, you accept the terms and conditions of the NVIDIA AI Product Agreement.

Publisher
NVIDIA
Latest Tag0.1.0
UpdatedOctober 5, 2026 UTC
Compressed Size113.29 MB
Multinode SupportNo
Multi-Arch SupportYes

Modal Content

NVIDIA uses cookies to improve your experience on our web site. We and our third-party partners also use cookies and other tools to collect and record information you provide as well as information about your interactions with our websites for performance improvement, analytics, and to assist in marketing efforts. By clicking "Accept All", you consent to our use of cookies and other tools as described in our Cookie Policy. You can manage your cookie settings by clicking on "Manage Settings." By continuing to use this site or by clicking one of the buttons below, you agree to our Terms of Service (which contains important waivers). Please see our Privacy Policy for more information on our privacy practices.