Gst-nvdsudpsink ================ The Gst-nvdsudpsink plugin is a sink type component which can be used to transmit the RTP packets over IP 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®| replace:: Rivermax\ :sup:`®` * Rivermax utilizes the kernel bypass technology and RDMA capabilities to achieve better CPU performance, low latency, and higher bandwidth. * Rivermax SDK provides two types of APIs for transmission – Media and Generic. This component has support for both the APIs. By default, it uses Generic APIs and can transmit any type of payload (Compressed, Uncompressed, audio etc.). * Rivermax media APIs are used for specific case of SMPTE 2110-20, 30, 40 streams. This component supports SMPTE 2110-20 (non-interlaced) and SMPTE 2110-30 streams with traffic shaping. * Rivermax media API mode can be enabled by setting ``sdp-file`` property of the component. For uncompressed video streams with media API, ``packets-per-line`` and ``payload-size`` properties along with ``sdp-file`` must be set. Similarly, value of ``mtu`` property of payload component must be same as ``payload-size`` of ``nvdsudpsink``. * For uncompressed audio streams with media API, ``max-ptime`` and ``ptime-multiple`` properties of payload component must be set. **Payload size and packets per line for some of common formats** To calculate the payload size and packets per line, use the following steps: 1. Calculate line stride as follows: :: line stride = (width * pgroup size) / pgroup coverage 2. Divide this stride into number of packets having equal bytes. This will be value of packet-per-line. 3. Add 20 bytes to size of each packet calculated in step 2 for RTP + Payload header. This will be value for payload-size. .. note:: It is assumed that there is only single Sample Row Data per RTP packet and line stride is equally divisible. Following are values for some of the common formats: :: YCbCr-4:2:2 1920x1080 8 bit: payload-size:1300, packets-per-line:3 YCbCr-4:2:2 1920x1080 10 bit: payload-size:1220, packets-per-line:4 YCbCr-4:2:0 1920x1080 8 bit: payload-size:1460, packets-per-line:2 YCbCr-4:2:0 1920x1080 10 bit: payload-size:1220, packets-per-line:3 RGB 1920x1080 8 bit: payload-size:1460, packets-per-line:4 RGB 1920x1080 10 bit: payload-size:1220, packets-per-line:6 Refer to the ``SMPTE ST 2110-20:2017`` for more information. System can also have Gstreamer provided OSS implementation of udp sink (``udpsink``) component. In that case system would have two implementations for udp sink - ``udpsink`` and ``nvdsudpsink``. ``nvdsudpsink`` 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-started. * Follow the instruction on the SDK page to obtain development license for Rivermax or purchase it here: https://store.mellanox.com/categories/ethernet/connectx-smartnics/rivermax-licenses.html. * To select ``nvdsudpsink`` out of two installations, use either ``LOCAL_IFACE_IP`` environment variable or ``local-iface-ip`` property. Use the command below to export the environment variable: :: export LOCAL_IFACE_IP= * ``nvdsudpsink`` component also requires ``CAP_NET_RAW`` capability. Either run the application that uses ``nvdsudpsink`` component with superuser privilege or set the ``CAP_NET_RAW`` capabilities using the following command. :: sudo setcap CAP_NET_RAW=ep 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 .. image:: /content/DS_plugin_gst-nvdsudpsink.png :align: center :alt: Gst-nvdsudpsrc Inputs and Outputs ------------------- * Inputs * GstBufferList having RTP packets as buffer content. * Control parameters * LOCAL_IFACE_IP ENV flag or local-iface-ip property * host * port * chunk-size * packets-per-chunk * payload-size * sdp-file * packets-per-line * internal-thread-core * Output * None Features --------- The following table summarizes the features of the plugin. .. csv-table:: Gst-nvdsudpsink plugin features :file: ../text/tables/Gst-nvdsudpsink tables/DS_Plugin_gst-nvdsudpsink_features.csv :widths: 30, 30, 30 :header-rows: 1 Gst Properties ---------------- The following table describes the Gst-nvdsudpsink plugin’s Gst properties. .. csv-table:: Gst-nvdsudpsink plugin gst properties :file: ../text/tables/Gst-nvdsudpsink tables/DS_Plugin_gst-nvdsudpsink_gst-properties.csv :widths: 20, 20, 20, 20, 20 :header-rows: 1 Example pipelines ----------------- * Pipeline to transmit 24 bit 2 channel 48k audio stream using Rivermax media API: :: gst-launch-1.0 audiotestsrc wave=8 ! 'audio/x-raw, format=(string)S24BE, rate=48000, channels=2, payload=(int)97' ! rtpL24pay ptime-multiple=1000000 max-ptime=1000000 seqnum-offset=0 pt=97 ! nvdsudpsink host= port= local-iface-ip= sdp-file= internal-thread-core=4 -v --gst-debug=3 * Pipeline to transmit 10bit YUV 4:2:2 1080p30 video stream using Rivermax media API: :: gst-launch-1.0 videotestsrc ! 'video/x-raw, width=1920, height=1080, format=(string)UYVP, framerate=30/1' ! queue ! rtpvrawpay mtu=1220 ! nvdsudpsink host= port= local-iface-ip= payload-size=1220 packets-per-line=4 sdp-file= -v --gst-debug=3