Rivermax#

Rivermax SDK is the core library for accelerated network processing that enables developers to build SMPTE ST 2110 compliant applications, with UDP transport acceleration and optimal GPU transfer using GPUDirect support.

Other open-source Rivermax samples are available in the Rivermax Dev Kit, a high-level C++ software kit designed to accelerate and simplify Rivermax application development.

Rivermax is a licensed technology. You can access a free development license by registering as a Rivermax developer. This license will be valid for three months but can be renewed on demand for as many times as needed to develop and support your product.

Rivermax also provides pure UDP transport acceleration with optimal GPU transfer through GPUDirect RDMA support. This can benefit any type of applications using UDP based communication beyond ST 2110.

Resizable BAR#

To enable GPUDirect RDMA and large memory transfers with Rivermax, your motherboard and GPU should support Resizable BAR (Base Address Register). Resizable BAR is a PCIe capability allowing the PCIe device to negotiate the BAR size to optimize system resources when transferring large memory buffers.

NVIDIA GPUs from Ampere generation support Resizable BAR but require a compatible motherboard. The BIOS setting, which may be called Above 4G Decoding or Re-Size BAR depending on the vendor, should be enabled.

ST 2110#

SMPTE ST 2110 is a suite of protocol standards for transferring uncompressed media over IP networks, in a way that parallels the role of SDI as the traditional digital video interface. It supports video, audio and ancillary data as independent networking streams, and leverages network timing for synchronization and timing. Streams are often sent using multicast, so that multiple receivers can receive the same stream. Easy connection and management is possible to enable fully software defined professional media production over standard networking technology.

NMOS#

The Network Media Open Specifications (NMOS) provide automatic discovery and registration of media-streaming devices and services and control of the connections between senders and receivers. It leverages DNS Service Discovery (DNS-SD) and supports RTP multicast used in ST 2110 for connecting multiple receivers to the same stream.

You can find an introduction to NMOS and a getting started guide on the AMWA website, including video tutorials to learn more about the technology. The AMWA NMOS specifications themselves are also freely available.

PTP Timing#

The Precision Time Protocol (PTP) is required to achieve ST 2110 compliance. The Holoscan for Media platform provides PTP as a service, through the PTP Operator. For development, the PTP daemon for Linux (PTP4L) can also be run on a Linux host system with NVIDIA ConnectX-6 Dx and ConnectX-7 NICs. The NVIDIA Rivermax PTP Best Practice Guidelines outlines how a developer working on a bare metal Linux system can set up PTP for testing.

SDP#

Session Description Protocol (SDP) is a text-based format commonly used to describe one or more multimedia streams. ST 2110 uses SDP to describe streams properties. Below are two examples used for ST 2110 audio and video streams:

v=0
o=- 1443716955 1443716955 IN IP4 <session-ip>
s=1080p60 video sender
t=0 0
m=video <video-port> RTP/AVP 96
c=IN IP4 <destination-video-ip>/64
a=source-filter: incl IN IP4 <destination-video-ip> <source-ip>
a=rtpmap:96 raw/90000
a=fmtp:96 sampling=YCbCr-4:2:2; width=1920; height=1080; exactframerate=60; depth=10; TCS=SDR; colorimetry=BT709; PM=2110GPM; SSN=ST2110-20:2017; TP=2110TPN;
a=ts-refclk:ptp=IEEE1588-2008:traceable
a=mediaclk:direct=0
v=0
o=- 1756802747 0 IN IP4 <session-ip>
s=audio sender
t=0 0
m=audio <audio-port> RTP/AVP 97
c=IN IP4 <destination-audio-ip>/64
a=source-filter: incl IN IP4 <destination-audio-ip> <source-ip>
a=rtpmap:97 L24/48000/2
a=fmtp:97 channel-order=SMPTE2110.(ST)
a=ptime:1
a=ts-refclk:ptp=IEEE1588-2008:traceable
a=mediaclk:direct=0

Important fields from these SDP files can be described as follows:

  • IP Addresses
    • Destination video and audio IP <destination-video-ip> and <destination-audio-ip>

    • These are usually multicast IP addresses, allowing data to be sent to multiple receivers. Setting a multicast IP address simply requires choosing an IP in the 224.0.0.0 to 239.255.255.255 range.

    • The source IP address <source-ip> is provided to enable Source-Specific Multicast

  • Properties of the ST 2110-20 video stream are set on the line starting with a=fmtp:96
    • Sampling could be RGB or YCbCr-4:2:2

    • Width and height

    • Frame rate (exactframerate) can be set to integer frame rates like 50 or 60, or values like 60000/1001 for fractional frame rates like 59.94FPS

    • Transfer characteristic system (TCS) and colorimetry which are typically SDR and BT709 for standard dynamic range HD video.

    • Depth, the component bit depth, typically 8 or 10 bits

  • Properties of the ST 2110-30 audio stream are set on the lines starting with a=rtpmap:97 and a=fmtp:97; in particular, in L24/48000/2
    • L24 indicates 24-bit linear PCM audio samples

    • 48000 is the sample rate

    • 2 is the number of channels, in this example, being used for stereo audio

    • The a=ptime: line indicates the packet time, typically 1 or 0.125 milliseconds

Here is another SDP example for ST 2022-7 redundant streams:

v=0
o=- 1443716955 1443716955 IN IP4 <session-ip>
s=ST 2022-7 video sender
t=0 0
a=group:DUP leg1 leg2
m=video <leg1-port> RTP/AVP 96
c=IN IP4 <leg1-destination-ip>/64
a=source-filter: incl IN IP4 <leg1-destination-ip> <leg1-source-ip>
a=rtpmap:96 raw/90000
a=fmtp:96 sampling=YCbCr-4:2:2; width=1920; height=1080; exactframerate=60; depth=10; TCS=SDR; colorimetry=BT709; PM=2110GPM; SSN=ST2110-20:2017; TP=2110TPN;
a=ts-refclk:ptp=IEEE1588-2008:traceable
a=mediaclk:direct=0
a=mid:leg1
m=video <leg2-port> RTP/AVP 96
c=IN IP4 <leg2-destination-ip>/64
a=source-filter: incl IN IP4 <leg2-destination-ip> <leg2-source-ip>
a=rtpmap:96 raw/90000
a=fmtp:96 sampling=YCbCr-4:2:2; width=1920; height=1080; exactframerate=60; depth=10; TCS=SDR; colorimetry=BT709; PM=2110GPM; SSN=ST2110-20:2017; TP=2110TPN;
a=ts-refclk:ptp=IEEE1588-2008:traceable
a=mediaclk:direct=0
a=mid:leg2