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
RGBorYCbCr-4:2:2Width and height
Frame rate (
exactframerate) can be set to integer frame rates like50or60, or values like60000/1001for fractional frame rates like 59.94FPSTransfer characteristic system (
TCS) and colorimetry which are typicallySDRandBT709for standard dynamic range HD video.Depth, the component bit depth, typically
8or10bits
- Properties of the ST 2110-20 video stream are set on the line starting with
- Properties of the ST 2110-30 audio stream are set on the lines starting with
a=rtpmap:97anda=fmtp:97; in particular, inL24/48000/2 L24indicates 24-bit linear PCM audio samples48000is the sample rate2is the number of channels, in this example, being used for stereo audioThe
a=ptime:line indicates the packet time, typically 1 or 0.125 milliseconds
- Properties of the ST 2110-30 audio stream are set on the lines starting with
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