Migration
August 5, 2026 · View on GitHub
API Changes for MXL Support
Existing application code needs to be updated as itemised below - mostly possible with search-and-replace.
Configuration Changes
NvNmosSenderConfig::sdpandNvNmosReceiverConfig::sdp(const char *) are nowNvNmosSenderConfig::transport_fileandNvNmosReceiverConfig::transport_file. A new siblingNvNmosTransport transportfield selects the format:NVNMOS_TRANSPORT_RTPfor SDP (the zero-initialised default),NVNMOS_TRANSPORT_MXLfor an MXL flow definition (JSON).- The SDP identity attribute
a=x-nvnmos-id:<id>is nowa=x-nvnmos-name:<name>— renamed for clarity, since its value has always been the caller-chosen name (unique within the Node), not a UUID. The NMOS resource UUIDs are generated deterministically by the library fromNvNmosNodeConfig::seed+ name and are now also exposed via the new ID accessors below. remove_nmos_sender_from_node_serverandremove_nmos_receiver_from_node_servernow take a caller-chosen name (sender_name/receiver_name) instead of a UUID.
Activation Changes
- The IS-05 activation callback typedef
nmos_connection_rtp_activation_callbackis nownmos_connection_activation_callback, and its signature changed from(server, id, sdp)to(server, side, name, transport_file). The matchingNvNmosNodeConfig::rtp_connection_activatedfield is nowconnection_activated. The newNvNmosSideparameter (NVNMOS_SIDE_SENDER/NVNMOS_SIDE_RECEIVER) disambiguates a name that may now be shared between a Sender and a Receiver on the same Node — names are scoped per side. nmos_connection_rtp_activate(server, id, sdp)is nownmos_connection_activate(server, side, name, transport_file).
New ID Accessors
The NMOS resource UUIDs are deterministic pure functions of (seed, side, name). Pure accessors compute them without a server:
nmos_make_node_id(seed, out, out_len)nmos_make_device_id(seed, out, out_len)nmos_make_source_id(seed, sender_name, out, out_len)nmos_make_flow_id(seed, sender_name, out, out_len)nmos_make_sender_id(seed, sender_name, out, out_len)nmos_make_receiver_id(seed, receiver_name, out, out_len)
Live accessors look them up on a running server:
nmos_get_node_id(server, out, out_len)nmos_get_device_id(server, out, out_len)nmos_get_source_id(server, sender_name, out, out_len)nmos_get_flow_id(server, sender_name, out, out_len)nmos_get_sender_id(server, sender_name, out, out_len)nmos_get_receiver_id(server, receiver_name, out, out_len)
All write a null-terminated UUID into a buffer of at least NVNMOS_ID_LEN bytes (37, including the terminator). Each returns bool.
MXL Transport File Format
For NVNMOS_TRANSPORT_MXL the transport file is an MXL flow definition JSON (the form consumed by the MXL SDK), with NvNmos extensions carried as entries in the standard tags property keyed by urn:x-nvnmos:tag:* URN strings. See NvNmos Extensions to the Transport File for the full set.
For MXL Senders, omitting the top-level id now leaves IS-05 mxl_flow_id unconstrained. Previously, NvNmos used the generated NMOS Flow ID as a fixed MXL flow identity. Applications that require a fixed MXL flow must now include its UUID explicitly; otherwise, a Controller may supply one or stage "auto" to generate a new UUID at activation.
For the full per-field documentation see the C API reference.
API Changes for RTP/UDP Sender IS-05 Defaults
On IS-05 activation, "auto" values for RTP/UDP Senders are now resolved based on the config SDP:
source_ipis resolved to the SDPa=x-nvnmos-iface-ip:ora=source-filter:source address as before.destination_ipis resolved to the SDPc=connection address if not0.0.0.0; otherwise, a source-specific multicast address is generated as before.destination_portis resolved to the SDPm=port if non-zero; otherwise, the IS-05 default (5004) is used as before.source_portis resolved to thea=x-nvnmos-src-port:port if present; otherwise, the IS-05 default (5004) is used as before.