Skip to content

Syphon, Spout and NDI

Martin Pulec edited this page Jun 25, 2024 · 12 revisions

Table of Contents

NDI

Since UltraGrid version 1.7.2, binary builds include NDI®. NDI library is dynamically loaded, therefore you need to have the NDI runtime installed:

Capture

Basic usage is simply:

uv -t ndi -c <compression> [-s embedded --audio-codec <ac>] <receiver>

The above command picks first source found on a local network and sends the data to the receiver.

You may also specify name and/or URL (either in form ip_addr or ip_addr:port, exact URL format may change with future NDI releases) to capture from, eg.:

uv -t "ndi:name=HD10 (DeckLink 4K Extreme)" -c JPEG ultragrid-receiver.example.net
uv -t ndi:url=192.0.2.15 -c JPEG ultragrid-receiver.example.net
uv -t ndi:url=192.0.2.15:5961 -c JPEG ultragrid-receiver.example.net

(Note that the apostrophes in the first command are because the resource name contains spaces.)

You can also let UltraGrid discover available sources on a local network:

uv -t ndi:help

(The list doesn't need to be complete - UltraGrid waits only limited amount of time to response.)

If you want to capture including alpha channel, select a mode that captures RGBA (alpha is currently stripped from YCbCr formats):

uv -t ndi:color=0          # BGRX_BGRA; 1 (UYVY_BGRA), 2 (RGBX_RGBA), 3 (UYVY_RGBA) are also ok; default is however 100 (best)

Note: Very few of compressions support alpha-channel compression, one exception is GPUJPEG.

Audio

NDI video capture is capable of capturing video alongside with audio as usual:

uv -t ndi -s embedded -c libavcodec --audio-codec OPUS ultragrid-receiver.example.net

If the NDI source is audio only, it is possible to capture the audio with the NDI vidcap module even in the absence of video signal:

uv -t ndi:name=mic -s embedded --audio-codec OPUS ultragrid-receiver.example.net   # if "mic" is audio only NDI source, no video is sent

Display

Basic usage is quite usual:

uv -d ndi[:name=<n>] [-r embedded] <sender>

Analogically to the capture, the NDI display can also playback the audio without a video.

NDI Linux installation

This step is required to add run-time dependency, for compilation see here.

Installation steps:

  1. download and extract the installer:

    tar xaf Install_NDI_SDK_v6_Linux.tar.gz
    
  2. install the NDI

    ./Install_NDI_SDK_v6_Linux.sh
    
  3. this creates directory "NDI SDK for Linux" directory in current path

  4. make the contained library libndi.so.6 visible to UltraGrid, this can be done in two ways:

    • copy (as root) libraries to /usr/local/lib:

      cp -a NDI\ SDK\ for\ Linux/lib/x86_64-linux-gnu/lib* /usr/local/lib/
      cp -a NDI\ SDK\ for\ Linux/include/* /usr/local/include/      # (headers optional, can be omitted)
      
    • or export path to the library before running UG (or to system environment):

      export NDI_RUNTIME_DIR_V6=<NDI_SDK_root>/lib/x86_64-linux-gnu/lib/
      ./UltraGrid*AppImage [...]
      

Spout

Currently there is only Spout server support.

Server

Use following command to create Spout sender:

uv -d gl:spout  # or
uv -d spout     # wraps GL display, equivalent to `-d gl:spout:hide_window`

Similarly to Syphon, you can specify server name:

uv -d gl:spout=<name>

Client

You can use Spout capturer by running:

uv -t spout[:name=<srv_name>][:fps=<fps>]

Syphon

Server

Syphon support is added to UltraGrid OpenGL display. You can run it with following command:

uv -d gl:syphon # or 
uv -d syphon    # wraps GL display, equivalent to `-d gl:syphon:hide_window`

Alternatively, you can specify server name (instead of default UltraGrid):

uv -d gl:syphon=<another_name>

Client

Syphon clinet can be simply run as a normal capturer:

uv -t syphon -c <compression> <receiver_addr>

Footnotes

[1] NDI® is a registered trademark of NewTek, Inc.
[2] NDI® is available at http://ndi.tv/

Clone this wiki locally