# Receiver Discoverability, Monitoring, and Control Overview

## Introduction

NDI 6.2 introduces new functionality to all NDI receivers, any device or&#x20;application capable of receiving an NDI stream.&#x20;This functionality allows NDI Receivers to be discoverable, similar&#x20;to how NDI Senders are discoverable on the network. Users can also monitor the Receivers and get information on&#x20;the stream they are connected to.&#x20;Finally, users can control the Receiver to connect to any&#x20;available sources.

## Network Model

A high level overview of how the relevant parts of the system connect together.

<figure><img src="https://3444609009-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDO9LSaUxLOBIgPjyrjR1%2Fuploads%2FFe02hGWkmcHcqqkIfc4j%2Fimage.png?alt=media&#x26;token=fd9b877d-a4a0-46fc-a0fb-9da2817b004f" alt=""><figcaption></figcaption></figure>

## NDI Receiving Device

In the NDI device or application receiving NDI streams, the feature introduced in NDI SDK 6.2 will&#x20;be used to create a **Receiver Advertiser** which registers individual receivers.&#x20;The Advertiser is responsible for communicating with the Discovery Server&#x20;using an IP address configured at the application layer.

<figure><img src="https://3444609009-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDO9LSaUxLOBIgPjyrjR1%2Fuploads%2FwrBgghkoFhncYByvQ9eN%2Fimage.png?alt=media&#x26;token=3265da27-41f9-49cb-95ff-c8e4175c1428" alt=""><figcaption></figcaption></figure>

## NDI Receiver Inputs

Individual receivers need to be grouped together&#x20;to create a **Receiver Input**.&#x20;The individual receivers represent the different stream&#x20;components of the NDI stream such as video, audio,&#x20;and metadata.&#x20;This grouping facilitates discoverability, monitoring, and control by allowing users to view and refer to these as distinct&#x20;inputs instead of the individual receiver components.

<figure><img src="https://3444609009-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDO9LSaUxLOBIgPjyrjR1%2Fuploads%2F7tSW6b7iJ2RtOW1flKiy%2Fimage.png?alt=media&#x26;token=692a1be8-6868-4ec2-bb20-6fac4fde5201" alt=""><figcaption></figcaption></figure>

## NDI Discovery Server

While the NDI Discovery Server continues to be available as a command line utility, it is also available as a Windows or Linux service[^1]. This makes it easier to&#x20;manage or integrate directly into software applications.

The Discovery Server registers all NDI devices on the network and&#x20;collects their information, accessible via the new [NDI Discovery Tool](https://docs.ndi.video/all/developing-with-ndi/developer-guides/broken-reference) or any&#x20;third-party application interfacing to the Service.

It essentially acts as the central broker for all discovery, monitoring, and control.&#x20;The Discovery Server is lightweight and can be run on very small, lower end systems.

{% hint style="info" %}
NDI Receivers can only be discovered by the Discovery Server when they are&#x20;registered to it. NDI Senders can still be discovered automatically without a Discovery&#x20;Server and do not change from existing functionality.
{% endhint %}

## NDI Discovery Tool

This is a Windows and Mac based client application, packaged with&#x20;NDI Tools to provide a user-friendly front-end interface for the Discovery Server.&#x20;The client allows users to see a list of discovered **Senders** and **Receivers**.&#x20;Users can expand the Receivers tab to see monitoring information and select a source for it to connect to.

<figure><img src="https://3444609009-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDO9LSaUxLOBIgPjyrjR1%2Fuploads%2FGtQWVukJO9jhddpAeNQC%2Fimage.png?alt=media&#x26;token=fccd8eca-e585-4b2a-b44c-a7fe1f5aab01" alt=""><figcaption></figcaption></figure>

## Third Party Access to Discovery Server

The ability to monitor and control NDI Receivers is available to any third-party developer&#x20;via the NDI Advanced SDK.&#x20;Using the Advanced SDK, a **Receiver Listener** is created which communicates with the Discovery&#x20;Server receiving information about all discovered Receivers and allowing control of them.

<figure><img src="https://3444609009-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDO9LSaUxLOBIgPjyrjR1%2Fuploads%2FliLXCX1X6g19ti7UTQs0%2Fimage.png?alt=media&#x26;token=6f142787-ff49-4749-af62-f96b9fbb5a3a" alt=""><figcaption></figcaption></figure>

## Available Monitoring Parameters

|                                |                                                                                               |
| ------------------------------ | --------------------------------------------------------------------------------------------- |
| Alpha presence                 | Indicate whether there is alpha in the stream                                                 |
| Audio channels                 | Number of audio channels present                                                              |
| Audio Format                   | Audio format and codec                                                                        |
| Audio presence                 | Indicate whether there is audio in the stream and per channel                                 |
| Audio receive mode             | Will indicate the transmission method for the audio stream (SingleTCP, RUDP, multicast etc)   |
| Audio sample rate              | Will indicate the sample rate for the connected source that has audio                         |
| Connection state               | Will indicate if the receiver is connected/disconnected to a source                           |
| Frame rate                     | Frame rate of connected stream                                                                |
| Resolution                     | Resolution of connected stream (width x height)                                               |
| Source name                    | Name of sender and stream that receiver is connected to                                       |
| Source URL                     | Will indicate the IP address and Port number for the connected stream (e.g. 192.1.15.11:5961) |
| Video codec                    | NDI format and codec                                                                          |
| Video color primaries          | Indicates the HDR color information if connected stream is HDR                                |
| Video frame type               | Indicates if the video stream is progressive/interlaced/interleaved streams                   |
| Video matrix coefficients&#xD; | Indicates the HDR color information if connected stream is HDR                                |
| Video presence&#xD;            | Indicate whether there is video in the stream                                                 |
| Video receive mode&#xD;        | Will indicate the transmission method for the video stream (SingleTCP, RUDP, multicast etc)   |
| Video transfer function        | Indicates the HDR color information if connected stream is HDR                                |

## Control

In this release, it is possible to control the receiver to select which NDI source it connects to.&#x20;

{% hint style="info" %}
It can only connect to sources that have also been discovered by the Discovery&#x20;Server.
{% endhint %}

## Communication and Security

All communications between NDI Receivers, the Discovery Server and NDI Discovery tool,&#x20;and third-party applications using the Advanced SDK use XML messages with a basic level&#x20;of security.

In this initial release there is no encryption or authentication applied. A Receiver need only&#x20;register to the IP of a Discovery Server to communicate with it. Applications must use NDI's propriety API calls provided in the Advanced SDK.&#x20;

Developers can add authentication at the application layer to prevent unauthorized access&#x20;to the application and the ability to monitor or control NDI devices.

[^1]: Runs the Discovery Server automatically in the background, managed by the operating system for startup, monitoring, and restart
