proposal for DMX support in NDI:NDI-DMX

This page contains a technical proposal which is not currently a published or formal standard. If you have comments or feedback on the content of this proposal PLEASE contact us with your contribution.


The NDI IP Video protocol SDK does not currently offer any guidance on provision for carrying DMX control data.  However, NDI has multiple real time metadata mechanisms which could easily carry this sort of data. This document is an attempt to standardise support for DMX in order to prevent different implementations by each vendor by way of a recommended practice technical note.


Basic Premise:

The focus is based on the need of an NDI Sender or NDI Receiver to send or receive DMX information in a standardised protocol. This document simply standardises a mechanism for sending DMX information over an NDI Connection.


The objectives are to allow the following scenarios:

- Support for generic, unambiguous and non-specific communication of DMX Control messages from NDI Sender to NDI Receiver, or from Receiver to Sender.


The DMX concept is straightforward and unambigious. DMX supports up to 512 "universes" where a universe consists of up to 512 'slots' - which may represent the intensity or mode of a single element. Essentially they are 8 bit controllers which can be interpreted by the target device.  Thus a DMX controller has a universe address, and a slot address within the universe, then an 8 bit value. DMX sends all slots in a single message, such that the slot address is implied by the position of the data value in a sequence of values in a single DMX message. A DMX message can thus be up to 512 bytes long. If the message is shorter than 512 bytes, it addresses only the first 'n' slots of the targetted universe.


In this proposal, the DMX data is sent using dedicated metadata messages already defined in the NDI Protocol, the same type used for PTZ control of cameras, and NDI specific tally information.  It uses the real time (non frame based) NDI Metadata stream, with DMX data enclosed. The data is sent as an ASCII representation of the  hexadecimal values, from 00 through to FF per slot.


Example 1 : This message allows sends values 01 through 06 into slots 0 thru 5 of universe 43 and suggests the receiving device maintain the data indefinitely every 500 milliseconds.


NDIlib_metadata_frame_t meta_data


meta_data.p_data =

<DMX universe="43" refresh="500" lifetime="-1">010203040506</DMX>


Note that some systems require the DMX data to be sent continuously in order to keen the lights or other devices in the desired state (rather than switching off). The NDI-DMX protocol. The refresh attribute in the NDI-DMX message, which represents milliseconds tells the receiver of the message to keep 'using' the same data at intervals of that many milliseconds.  If the refresh parameter is 0 or is omitted, the receiving device should only act upon the NDI-DMX message once.  The lifetime parameter allows the sender to indicate how long to apply the refresh parameter to in seconds. A value of -1 means refresh indefinately, where 30 means, refresh at that the refresh period for 30 seconds. This mechanism allows NDI DMX senders to send changes only or infrequent data, rather than requiring a constant unbroken stream of data.


NB: The universe, refresh and lifetime attributes are decimal values.  If universe is omitted, the universe data will be defined by a default in the NDI receiver (or 0). If refresh and or lifetime is omitted behaviour is defined by settings in the NDI receiver.


An NDI Sending Device would send NDI-DMX messages (to connected clients) on an NDI 'send' it has created using the NDIlib_send_send_metadata() message, and could receive NDI-DMX messages back from connected clients using the NDIlib_send_capture() message


An NDI Receiving Device would receive NDI-DMX messages from the device it has connected to using the NDIlib_recv_capture_v2() message, and would send NDI-DMXI messages back to the sender using the NDIlib_recv_send_metadata() message.


Sienna's Free NDI Signal Generator for macOS can generate a range of test messages  in the NDI-DMX protocol format.


If you have any questions, or you would like to engage Sienna for NDI Consultancy or Custom Development, please contact info @ sienna.tv