Gst-nvdsudpsrc¶
The Gst-nvdsudpsrc plugin is a source type component which is used to receive the UDP-RTP packets from the network. Internally, the plugin uses Rivermax SDK APIs for network communications. NVIDIA Mellanox Rivermax® offers a unique IP-based solution for any media and data streaming use case. For more details, see the Rivermax Product Page..
Rivermax utilizes the kernel bypass technology and RDMA capabilities to achieve better CPU performance, low latency, and higher bandwidth. On top of Rivermax based enhancements, some of memory and buffer management optimization have been implemented to further reduce the CPU utilization in case of high packet rate use cases.
This component also supports RTP header and payload separation. RTP header and payloads can be received in separate memories. Header will always be in system memory while payload can directly be copied to GPU (Pinned) memory. This can avoid memory copies in cases when GPU processing is performed on the RTP payloads. Header and payload separation will happen only if “header-size” property is set to non-zero value and for fixed header size.
System can also have Gstreamer provided OSS implementation of udp source (udpsrc
) component. In that case system would have two implementations for udp source - udpsrc
and nvdsudpsrc
.
nvdsudpsrc
component can only be used with NVIDIA Mellanox ConnectX-5 and above cards after having installed Rivermax
SDK and its license.
Download and setup the
Rivermax
1.11.x SDK here: https://developer.nvidia.com/networking/rivermax-getting-startedFollow the instruction on the SDK page to obtain
Rivermax
development license or purchase it here: https://store.mellanox.com/categories/ethernet/connectx-smartnics/rivermax-licenses.html.To select
nvdsudpsrc
out of two installations, use eitherLOCAL_IFACE_IP
environment variable orlocal-iface-ip
property. Use the command below to export the environment variable:export LOCAL_IFACE_IP=<IP of Mellanox NIC>
nvdsudpsrc
component also requiresCAP_NET_RAW
capability. Either run the application that usesnvdsudpsrc
component with superuser privilege or set theCAP_NET_RAW
capabilities using the following command.sudo setcap CAP_NET_RAW=ep <absolute path of application>
For example:
sudo setcap CAP_NET_RAW=ep /opt/nvidia/deepstream/deepstream/bin/deepstream-app sudo setcap CAP_NET_RAW=ep /usr/bin/gst-launch-1.0
Inputs and Outputs¶
Inputs
None
Control parameters
LOCAL_IFACE_IP ENV flag or local-iface-ip property
payload-size
header-size
num-packets
uri
address
port
source-address
Output
GstBufferList having RTP packets as buffer content.
Features¶
The following table summarizes the features of the plugin.
Feature |
Description |
Release |
---|---|---|
Supports header and payload separation |
Separate memories can be allocated for RTP header and payload |
DS 6.0 |
Supports any type of RTP packet (Compressed, Uncompressed, audio etc.) |
No restriction on content of RTP payload |
DS 6.0 |
Supports RTCP packets |
In addition to RTP, RTCP packets can also be received |
DS 6.0 |
Supports RTP payload directly in GPU memory |
Content of RTP payload can directly be in GPU memory. This can avoid copy if GPU processing of payload is required |
DS 6.0 |
Gst Properties¶
The following table describes the Gst-nvdsudpsrc plugin’s Gst properties.
Property |
Meaning |
Type and Range |
Example / Notes |
Platforms |
---|---|---|---|---|
port |
The port number to receive the RTP packets from |
Integer, 0 to 65535 |
Port=5004 |
dGPU Jetson |
address |
IP address of the server to receive packets from |
String |
address=192.168.4.60 |
dGPU Jetson |
uri |
Uri of the server in the form of udp://<ip>:<port> |
String |
uri=udp://192.168.4.60:5004 |
dGPU Jetson |
payload-size |
Size of payload in RTP packet |
Integer, 0 to 65535 |
payload-size=1500 |
dGPU Jetson |
header-size |
RTP header size |
Integer, 0 to 65535 |
header-size=12 |
dGPU Jetson |
num-packets |
Number of packets for which memory to allocate |
Integer, 0 to 2147483647 |
num-packets=10000 |
dGPU Jetson |
local-iface-ip |
IP Address associated with network interface through which to receive the data |
String |
local-iface-ip=192.168.2.20 |
dGPU Jetson |
buffer-size |
Size of the kernel receive buffer in bytes |
Integer, 0 to 2147483647 |
buffer-size=50000 |
dGPU Jetson |
reuse |
Enable reuse of the port |
Boolean |
reuse=1 |
dGPU Jetson |
multicast-iface |
The network interface on which to join the multicast group |
String |
multicast-iface=eth0 |
dGPU Jetson |
auto-multicast |
Automatically join/leave multicast groups |
Boolean |
auto-multicast=1 |
dGPU Jetson |
loop |
Used for setting the multicast loop parameter |
Boolean |
loop=1 |
dGPU Jetson |
source-address |
Unicast address to receive the data only from that sender |
String |
source-address=”192.168.3.4” |
dGPU Jetson |
Example pipelines¶
Pipeline to receive and play 24 bit 2 channel 48k audio stream:
LOCAL_IFACE_IP=<ip address of Mellanox NIC> gst-launch-1.0 nvdsudpsrc address=<unicast / multicast address> port=<port number> ! 'application/x-rtp, media=(string)audio, clock-rate=(int)48000, encoding-name=(string)L24, encoding-params=(string)2, channels=(int)2, payload=(int)97' ! rtpL24depay ! rawaudioparse use-sink-caps=1 ! queue ! autoaudiosink -v --gst-debug=3
Pipeline to receive and display 10bit YUV 4:2:2 1080p30 video stream:
gst-launch-1.0 nvdsudpsrc address=<unicast / multicast address> port=<port number> local-iface-ip=<ip addr of Mellanox NIC> ! 'application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:2:2, depth=(string)10, width=(string)1920, height=(string)1080, colorimetry=(string)BT709, payload=(int)96' ! rtpvrawdepay ! nvvideoconvert ! nveglglessink -v --gst-debug=3