gst-plugin-ndi
gst-plugin-ndi copied to clipboard
NDI HX
Hi, is there a way to get the NDI source HX and put it on a virtual video capture device created with v4l2loopback?
I've tested the source created by NDI tool "NDI Screen Capture" running on my Windows PC and captured on Ubuntu machine by the cmd:
gst-launch-1.0 ndivideosrc ndi-name="PCROBERTOALDA (NVIDIA Quadro P620 1)"
! videoconvert
! "video/x-raw, format=YUY2, interlace-mode=progressive, tune=zerolatency"
! tee
! v4l2sink device=/dev/video0
and all is OK.
But when i try with source created by "NDI Screen Capture HX" it shows these msgs and exits:
Setting pipeline to PAUSED ... Pipeline is live and does not need PREROLL ... Setting pipeline to PLAYING ... New clock: GstSystemClock Got EOS from element "pipeline0". Execution ended after 0:00:10.023522556 Setting pipeline to PAUSED ... Setting pipeline to READY ... Setting pipeline to NULL ... Freeing pipeline ...
There are a lot of NDI HX Camera sources on commerce and i'd like to get them with gstreamer.
Is it possible to decode Ndi sources using hw acceleration of Intel (vaapi) or nvidia (NVDEC) video cards?
Can you help me please?
Thank you.
Can you get a debug log with GST_DEBUG=3,ndi*:9
from the HX source, and attach the log here?
Also please make sure that the NDI name you configure on the source is actually correct. You can use gst-device-monitor-1.0 -f
to list all the available ones.
This is the gst-device-monitor-1.0 -f result:
`Monitoring devices, waiting for devices to be removed or new devices to be added...
Device found:
name : PCROBERTOALDA (NVIDIA Quadro P620 1) (Audio)
class : Source/Audio/Network
caps : audio/x-raw, format=(string){ S16LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], layout=(string)interleaved;
properties:
ndi-name = "PCROBERTOALDA\ \(NVIDIA\ Quadro\ P620\ 1\)"
url-address = 192.168.1.114:5961
gst-launch-1.0 ndiaudiosrc ndi-name="PCROBERTOALDA\ \(NVIDIA\ Quadro\ P620\ 1\)" url-address=192.168.1.114:5961 ! ...
Device found:
name : PCROBERTOALDA (NVIDIA Quadro P620 1) (Video)
class : Source/Video/Network
caps : video/x-raw, format=(string){ UYVY, YV12, NV12, I420, BGRA, BGRx, RGBA, RGBx }, width=(int)[ 0, 2147483647 ], height=(int)[ 0, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ];
properties:
ndi-name = "PCROBERTOALDA\ \(NVIDIA\ Quadro\ P620\ 1\)"
url-address = 192.168.1.114:5961
gst-launch-1.0 ndivideosrc ndi-name="PCROBERTOALDA\ \(NVIDIA\ Quadro\ P620\ 1\)" url-address=192.168.1.114:5961 ! ...
Device found:
name : PCROBERTOALDA (NVIDIA Quadro P620 2) (Audio)
class : Source/Audio/Network
caps : audio/x-raw, format=(string){ S16LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], layout=(string)interleaved;
properties:
ndi-name = "PCROBERTOALDA\ \(NVIDIA\ Quadro\ P620\ 2\)"
url-address = 192.168.1.114:5962
gst-launch-1.0 ndiaudiosrc ndi-name="PCROBERTOALDA\ \(NVIDIA\ Quadro\ P620\ 2\)" url-address=192.168.1.114:5962 ! ...
Device found:
name : PCROBERTOALDA (NVIDIA Quadro P620 2) (Video)
class : Source/Video/Network
caps : video/x-raw, format=(string){ UYVY, YV12, NV12, I420, BGRA, BGRx, RGBA, RGBx }, width=(int)[ 0, 2147483647 ], height=(int)[ 0, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ];
properties:
ndi-name = "PCROBERTOALDA\ \(NVIDIA\ Quadro\ P620\ 2\)"
url-address = 192.168.1.114:5962
gst-launch-1.0 ndivideosrc ndi-name="PCROBERTOALDA\ \(NVIDIA\ Quadro\ P620\ 2\)" url-address=192.168.1.114:5962 ! ...`
This is my cmd:
gst-launch-1.0 ndivideosrc timeout=0 connect-timeout=0 ndi-name="PORTATILE-RA (Intel(R) UHD Graphics 620 1)" ! videoconvert ! "video/x-raw, format=YUY2, interlace-mode=progressive" ! tee ! v4l2sink device=/dev/video0
the log result is :
0:00:00.030372374 3290 0x55ee79fa0260 DEBUG ndivideosrc src/ndivideosrc.rs:303:gstndi::ndivideosrc:
If i use Screen Capture (not HX) from my Windows PC the same command works and i can get the video stream into my virtual device made with v4l2loopback in my Ubuntu.
That looks like a problem with the NDI SDK then, or how it's used here. Without being able to reproduce it myself there's not much I can do about that.
I'm having the same issue.
gst-launch-1.0 videotestsrc is-live=true ! videoconvert ! ndisink ndi-name=test
and
GST_DEBUG="3,ndi*:9" gst-launch-1.0 ndivideosrc ndi-name=test url-address="127.0.0.1:5961" ! videoconvert ! autovideosink
produces:
0:00:00.018749319 937119 0x563cc0ebdd20 DEBUG ndivideosrc src/ndivideosrc.rs:254:gstndi::ndivideosrc:<ndivideosrc0> Changing ndi-name from None to Some("test")
0:00:00.018787571 937119 0x563cc0ebdd20 DEBUG ndivideosrc src/ndivideosrc.rs:266:gstndi::ndivideosrc:<ndivideosrc0> Changing url-address from None to Some("127.0.0.1:5961")
Setting pipeline to PAUSED ...
0:00:00.022184878 937119 0x563cc0ebdd20 DEBUG ndivideosrc src/receiver.rs:533:gstndi::receiver:<ndivideosrc0> Starting NDI connection...
0:00:00.022253186 937119 0x563cc0ebdd20 DEBUG ndivideosrc src/receiver.rs:583:gstndi::receiver:<ndivideosrc0> Connecting to NDI source with NDI name 'Some("test")' and URL/Address Some("127.0.0.1:5961")
0:00:01.025074640 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
Pipeline is live and does not need PREROLL ...
0:00:01.025274304 937119 0x563cc1121920 FIXME default gstutils.c:4025:gst_pad_create_stream_id_internal:<ndivideosrc0:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
0:00:01.075206758 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.125410529 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.175539070 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.225587471 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.275687418 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.325787555 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.375891399 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.425993100 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.476096774 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.526197542 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.576300836 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.626401915 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.676509256 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.726617860 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.776727064 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.826838613 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.876954019 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.927073863 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:01.977194519 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:02.027311188 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:02.077427636 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:02.127547430 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:02.177648740 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:02.227765058 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:02.277887427 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:02.328189502 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:02.378307633 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:02.428529860 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:02.478636229 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:02.528739172 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
^Chandling interrupt.
Interrupt: Stopping pipeline ...
Execution ended after 0:00:01.524184440
Setting pipeline to NULL ...
0:00:02.549751994 937119 0x563cc0ebdd20 DEBUG ndivideosrc src/ndivideosrc.rs:418:gstndi::ndivideosrc:<ndivideosrc0> Unlocking
0:00:02.549861068 937119 0x563cc0ebdd20 DEBUG ndivideosrc src/ndivideosrc.rs:426:gstndi::ndivideosrc:<ndivideosrc0> Stop unlocking
Freeing pipeline ...
0:00:02.578841554 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:918:gstndi::receiver:<ndivideosrc0> No video frame received yet, retry
0:00:02.578867132 937119 0x7f2ab8002400 DEBUG ndivideosrc src/receiver.rs:892:gstndi::receiver:<ndivideosrc0> Shutting down
0:00:02.578879915 937119 0x7f2ab8002400 ERROR ndivideosrc src/receiver.rs:739:gstndi::receiver:<ndivideosrc0> Signalling error
I'm having the same issue.
This is a different problem and has nothing to do with NDI HX :) If you run gst-device-monitor-1.0 -f
you'll see the mistake: the NDI name (and probably URL address) are not matching.
The NDI name that you configure on the sink is always prefixed by the hostname (in uppercase letters) by the NDI SDK. So in your case it would become "YOURHOSTNAME (test)".
Thank you so much. I was also missing sudo
before gst-device-monitor-1.0
.
That shouldn't be needed unless your system setup is rather strange :)