teltek / gst-plugin-ndi

GStreamer NDI Plugin for Linux
GNU Lesser General Public License v2.1
154 stars 27 forks source link

Dropping old buffer - queue has 11 items #89

Open shabaz123 opened 2 years ago

shabaz123 commented 2 years ago

Hello,

I'm new to this plugin, but I think I have built it correctly, and I have tried the following pipeline, where 192.168.1.85:5961 is the IP address/port of an NDI source (found using gst-device-monitor-1.0), and host=192.168.1.250 port=1234 is the address of the destination machine running VLC Media Player with an appropriate SDP file. No image appears, and I have run tshark, and see no UDP packets generated.

gst-launch-1.0 --gst-debug=3 ndisrc url-address=192.168.1.85:5961 ! ndisrcdemux name=demux demux.video ! videoconvert ! x264enc tune=zerolatency bitrate=500 speed-preset=superfast ! rtph264pay ! udpsink host=192.168.1.250 port=1234 demux.audio ! fakesink sync=false

When I run it, I see the following debug output:

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
0:00:00.082723224  1950   0x559fb55000 FIXME                default gstutils.c:3981:gst_pad_create_stream_id_internal:<ndisrc0:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
New clock: GstSystemClock
Redistribute latency...
Redistribute latency...
0:00:02.063782791  1950   0x7f68003530 WARN             ndireceiver src/receiver.rs:755:gstndi::receiver:<ndisrc0> Dropping old buffer -- queue has 11 items
0:00:02.130537229  1950   0x7f68003530 WARN             ndireceiver src/receiver.rs:755:gstndi::receiver:<ndisrc0> Dropping old buffer -- queue has 11 items
0:00:02.323813387  1950   0x7f68003530 WARN             ndireceiver src/receiver.rs:353:gstndi::receiver:<ndisrc0> Delta 1033615241 too far from skew 265757, resetting
0:00:02.327066490  1950   0x7f68003530 WARN             ndireceiver src/receiver.rs:755:gstndi::receiver:<ndisrc0> Dropping old buffer -- queue has 11 items

I don't know if I'm doing something wrong, or if it is an issue with the plugin. How can I troubleshoot this further? Is the pipeline incorrect, how should I change it?

Apologies if this is a silly issue at my end; I've spent a day troubleshooting, and tried to figure it out on my own, but would appreciate a helping hand.

Many thanks.

sdroege commented 2 years ago

Like in the README.md, you have to add big enough queues after both source pads of ndisrcdemux. That will likely solve it.

shabaz123 commented 2 years ago

Thank you for the response, I had tried with and without queue, but both fail for me. I have attached a level 4 debug below.

gst-launch-1.0 --gst-debug=4 ndisrc url-address=192.168.1.85:5961 ! ndisrcdemux name=demux demux.video ! queue ! videoconvert ! x264enc tune=zerolatency bitrate=500 speed-preset=superfast ! rtph264pay ! udpsink host=192.168.1.250 port=1234 demux.audio ! queue ! fakesink sync=false

Result (level 4 debug): debuglevel4.txt

Level 3 debug:

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
0:00:00.084467023 12366   0x5597c836d0 FIXME                default gstutils.c:3981:gst_pad_create_stream_id_internal:<ndisrc0:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Redistribute latency...
Redistribute latency...
0:00:02.229755868 12366   0x7f68003470 WARN             ndireceiver src/receiver.rs:755:gstndi::receiver:<ndisrc0> Dropping old buffer -- queue has 11 items
0:00:02.283460188 12366   0x7f68003470 WARN             ndireceiver src/receiver.rs:755:gstndi::receiver:<ndisrc0> Dropping old buffer -- queue has 11 items
0:00:02.335539832 12366   0x7f68003470 WARN             ndireceiver src/receiver.rs:353:gstndi::receiver:<ndisrc0> Delta 1044645150 too far from skew 51112, resetting
0:00:02.338128387 12366   0x7f68003470 WARN             ndireceiver src/receiver.rs:755:gstndi::receiver:<ndisrc0> Dropping old buffer -- queue has 11 items
0:00:02.398646108 12366   0x7f68003470 WARN             ndireceiver src/receiver.rs:755:gstndi::receiver:<ndisrc0> Dropping old buffer -- queue has 11 items
0:00:02.582945435 12366   0x7f68003470 WARN             ndireceiver src/receiver.rs:755:gstndi::receiver:<ndisrc0> Dropping old buffer -- queue has 11 items
0:00:02.587964259 12366   0x7f68003470 WARN             ndireceiver src/receiver.rs:755:gstndi::receiver:<ndisrc0> Dropping old buffer -- queue has 11 items
0:00:02.592667607 12366   0x7f68003470 WARN             ndireceiver src/receiver.rs:755:gstndi::receiver:<ndisrc0> Dropping old buffer -- queue has 11 items
0:00:02.647812224 12366   0x7f68003470 WARN             ndireceiver src/receiver.rs:755:gstndi::receiver:<ndisrc0> Dropping old buffer -- queue has 11 items
shabaz123 commented 2 years ago

Hello, I was wondering, is there any other debug I should try, to troubleshoot this further? Many thanks.

shabaz123 commented 2 years ago

Just noticed a closed issue, https://github.com/teltek/gst-plugin-ndi/issues/86 that was created by @danjenkins I think I may be hitting the same issue, since I'm using HX as well. I'm using the Android HX Camera App. I've reached out to NewTek to request the Linux/ARM Advanced NDI SDK with the potential fix. I'll close this issue if it turns out to be the same thing.

Rajiv91 commented 1 year ago

Hey @shabaz123 i'm seing the same issue with a birddog camera, no matter how big are my queues the problem persists. Were you able to solve it?

shabaz123 commented 10 months ago

Hello, I still have this issue.

:gstndi::receiver: Dropping old buffer -- queue has 11 items 0:00:17.529585863 12401 0x7f58003470 WARN ndireceiver src/receiver.rs:736:gstndi::receiver: Dropping old buffer -- queue has 11 items 0:00:17.563872836 12401 0x7f58003470 WARN ndireceiver src/receiver.rs:736:gstndi::receiver: Dropping old buffer -- queue has 11 items 0:00:17.592449759 12401 0x7f58003470 WARN ndireceiver src/receiver.rs:736:gstndi::receiver: Dropping old buffer -- queue has 11 items

I'm running it on an ARM-based Linux platform, if that makes any difference.

Rajiv91 commented 10 months ago

Hey @shabaz123, in my case i was able to solve the issue adding an async property to the fakesing element: fakesink sync=false async=false

shabaz123 commented 10 months ago

Hi @Rajiv91 Thank you! That gets me a lot further. I used this syntax (on my ARM device):

gst-launch-1.0 --gst-debug=4 ndisrc url-address=192.168.1.91:5961 ! ndisrcdemux name=demux demux.video ! queue ! videoconvert ! x264enc tune=zerolatency bitrate=500 speed-preset=superfast ! rtph264pay ! udpsink host=192.168.1.250 port=1234 demux.audio ! queue ! fakesink sync=false async=false

For the video source, I am using the Android NDI HX app.

I see this output:

gstbin.c:2623:gst_bin_element_set_state:<ndisrc0> skipping transition from PLAYING to  PLAYING
0:00:00.492219264 23527   0x7f88004680 INFO              GST_STATES gstbin.c:2954:gst_bin_change_state_func:<pipeline0> child 'ndisrc0' changed state to 4(PLAYING) successfully
0:00:00.492272130 23527   0x7f88004680 INFO              GST_STATES gstelement.c:2676:gst_element_continue_state:<pipeline0> completed state change to PLAYING
0:00:00.492305047 23527   0x7f88004680 INFO              GST_STATES gstelement.c:2579:_priv_gst_element_state_changed:<pipeline0> notifying about state-changed PAUSED to PLAYING (VOID_PENDING pending)
0:00:01.438288176 23527   0x7f7c003470 WARN             ndireceiver src/receiver.rs:345:gstndi::receiver:<ndisrc0> Delta 1012482166 too far from skew 72852, resetting
0:00:02.440498586 23527   0x7f7c003470 WARN             ndireceiver src/receiver.rs:345:gstndi::receiver:<ndisrc0> Delta 1002227963 too far from skew 251802, resetting
0:00:03.446071733 23527   0x7f7c003470 WARN             ndireceiver src/receiver.rs:345:gstndi::receiver:<ndisrc0> Delta 1005582001 too far from skew 465167, resetting
0:00:04.451576649

The VLC Player has the following file (which I called h264.sdp) contents:

c=IN IP4 127.0.0.1
m=video 1234 RTP/AVP 96
a=rtpmap:96 H264/90000

However I do not see any video appear, but I do see this message displayed in VLC Media Player: vlc-display

Do you know what I may be doing wrong here? From the message displayed on the VLC player, it sounds like the NDI decoder is not installed, but I did install it. Here is the output from gst-inspect-1.0 ndi:

gst-inspect-1.0 ndi
Plugin Details:
  Name                     ndi
  Description              NewTek NDI Plugin
  Filename                 /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstndi.so
  Version                  1.0.0-12656af
  License                  LGPL
  Source module            gst-plugin-ndi
  Source release date      2022-04-09
  Binary package           gst-plugin-ndi
  Origin URL               https://github.com/teltek/gst-plugin-ndi

  ndideviceprovider: NewTek NDI Device Provider
  ndisrc: NewTek NDI Source
  ndisrcdemux: NewTek NDI Source Demuxer

  3 features:
  +-- 2 elements
  +-- 1 device providers

The SDK is correctly installed I believe, because I was successfully able to run an example application: :~/development/ndi/ndi_adv_sdk/examples/C++/NDIlib_Send_PNG and I was able to successfully see an image file as video, using the NDI Studio Monitor software on the Windows PC.

Is it a problem with the NDI HX app do you think? If so, is there any other NDI app to try? I do not have any other NDI source. My actual goal was to use a mobile phone (I don't mind what app, it doesn't have to be the NDI HX app if there is another one), and so I do not have any other suitable video source since the goal is to use mobile.

I'm a newcomer to NDI so apologies if I'm asking very basic things! If you have a suggestion for what the gst-launch syntax should be, or what I should place in the VLC player file, then it would be gratefully appreciated. Thank you for all the help so far!

ajit1433 commented 7 months ago

Hi @shabaz123, Were you able to get past this "Video decoder not found" message?

@Rajiv91 If you can share something, that would be great!