Baud
All protocols

NDI

Studio-quality video over an ordinary network: found by mDNS, streamed frame by frame.

Finding sources: mDNS

The open-standard part of NDI, byte for byte: a multicast DNS question.

mDNS query for _ndi._tcp.local · 33 bytes0816243200·00·00·00·00·01·00·00·00·00·00·00·04·5F_6En64d69i04·5F_74t63c70p05·6Cl6Fo63c61a6Cl00·00·0C·80·01·Transaction IDFlagsQuestion countOther countsLabel len…"_ndi"Label len…"_tcp"Label len…"local"End of na…Query typeClass + Q…Click a field to inspect it

Whole frame

00 00 00 00 00 01 00 00 00 00 00 00 04 5F 6E 64 69 04 5F 74 63 70 05 6C 6F 63 61 6C 00 00 0C 80 01: how a receiver finds NDI sources: it multicasts this to 224.0.0.251, UDP port 5353, and every NDI sender on the subnet answers with its name and where to connect.

FieldOffsetExample valueMeaning
Transaction IDByte 0–10mDNS (multicast DNS) reuses the DNS message format from RFC 1035, but its queries use ID 0: nobody replies to one specific asker, they answer the whole group.
FlagsByte 2–30x0000 = queryAll zero: a standard query.
Question countByte 4–51One question.
Other countsByte 6–110, 0, 0Answer, authority and additional counts: none in a question.
Label lengthByte 124Names are stored as labels each prefixed by its length. NDI advertises itself with the DNS-SD service type _ndi._tcp.
"_ndi"Byte 13–16_ndiThe service name: every NDI sender announces itself as an _ndi service. The leading underscore marks it as a service rather than a host.
Label lengthByte 174Next label: 4 letters.
"_tcp"Byte 18–21_tcpThe transport: the stream connection is TCP.
Label lengthByte 225Last label: 5 letters.
"local"Byte 23–27localThe special top-level domain for the local link: names ending in .local are resolved by multicast, not by a DNS server.
End of nameByte 280Zero-length label: the end.
Query typeByte 29–3012 = PTR12 = PTR: 'list every instance of this service'. Each answer is the name of one NDI source.
Class + QU bitByte 31–320x8001 = QU + INClass IN (1) with the top bit set: 'QU', meaning 'please answer me directly (unicast) rather than to the whole group'. Everyone else on the LAN is spared the reply.

Overview

NDI (Network Device Interface) sends low-latency video, audio and metadata between computers and cameras over standard Ethernet. Any NDI source on the local network appears automatically in any NDI-aware app such as OBS, vMix or Resolume: nobody types an IP address.

Be aware that NDI is proprietary (Vizrt/NewTek). Its discovery uses open standards (mDNS / DNS-SD), which this page shows byte by byte. The media connection itself has no public wire-level specification, so we explain its structure schematically instead of inventing byte layouts.

Key facts

Discovery
mDNS / DNS-SD, UDP 5353
Streams
TCP, from port 5960 (UDP/multicast in newer versions)
Codec
SpeedHQ (full) / H.264, H.265 (HX)
Bandwidth
~100+ Mbit/s per 1080p60 (HX: ~10–20)
Latency
About 1–3 frames
Specification
Proprietary (NDI SDK)

From discovery to video

The sequence of a receiver connecting to a sender. The media connection is drawn schematically because NDI's own format is not public.

Receivermonitor / mixerNDI sendercamera PCmDNS query_ndi._tcp.local PTRmDNS responsePTR + SRV :5961 + ATCP connect-> :5961NDI helloproprietaryVideo frameSpeedHQ · 1080p60Audio frametimecode, PCMMetadataXML: tally, PTZadvertisingsource foundCONNECTEDCONNECTED

Whole exchange

Discovery is open standard (mDNS); the media connection is NDI's own. A sender is announced once, and then any number of receivers on the network can pull its video.

  1. 1Who is sending NDI?

    The receiver multicasts a standard DNS-SD question (the bytes on the previous scene). This part is public, standard Internet protocol.

  2. 2A source answers

    The sender answers with its instance name (such as 'STUDIO-PC (Camera 1)'), an SRV record giving the TCP port (typically from 5960 upward), and an A record with its IP address.

  3. 3Open the stream connection

    The receiver opens a TCP connection to the advertised address and port. From here on the format is NDI's own.

  4. 4Introductions (schematic)

    The two ends exchange identity and capabilities and agree what to send: for example full-bandwidth or HX, whether audio is wanted. NDI's wire format is proprietary and not publicly specified, so this and the following steps are drawn schematically, not as byte layouts.

  5. 5A video frame

    Frame after frame of lightly compressed video: full NDI uses the SpeedHQ codec (roughly 100+ Mbit/s for 1080p60); NDI|HX instead sends H.264/H.265 at a tenth of that. At 60 fps a frame is sent every 16.7 ms.

  6. 6Audio in the same stream

    Audio travels with the video with timestamps, so lip-sync is kept without a separate connection.

  7. 7Control and tally flow backwards

    NDI is bidirectional on one connection: the receiver can send small XML messages back (tally lights, PTZ camera control) without another channel.

Where you meet it

  • Live production: cameras and computers into OBS, vMix, TriCaster
  • Houses of worship, schools, esports and events using standard gigabit switches
  • Video walls and projection mapping, sharing screens between machines

Watch out for

  • mDNS does not cross routers. Sources on another subnet or VLAN need NDI Discovery Server (TCP 5959) or manually typed addresses.
  • Full NDI at 1080p60 needs about 100+ Mbit/s per stream: a gigabit link fills quickly. Wi-Fi is not recommended.
  • Allow mDNS (UDP 5353) and the NDI TCP/UDP ports through firewalls, or sources never appear.
  • NDI|HX is lower bandwidth but adds latency and needs a hardware decoder or capable CPU.

Standards

  • NDI documentation (ndi.video): network requirements and port usage
  • RFC 6762: Multicast DNS
  • RFC 6763: DNS-Based Service Discovery

Related protocols