Open jacobsunil1987 opened 1 year ago
One observation from logs is
We compared logs of ubuntu working case with webOS non working case.
working case - Ubuntu :
ndireceiver src/receiver.rs:719:gstndi::receiver:<ndisrc0> Received metadata at timecode 0:00:00.000000000: <ndi_tally_echo on_program="true" on_preview="false"/>
non working case - webOS :
ndireceiver src/receiver.rs:720:gstndi::receiver:<source> Received metadata at timecode 0:00:00.000000000: <ndi_tally_echo on_program="false" on_preview="false"/>
we see that on_program= false in issue case. Any reason why this difference in metadata? Can this be the reason for not receiving audio/video data in gst-plugin-ndi?
Can you provide a stream that shows this behaviour?
That metadata difference is going to be related, yes. However when creating the receiver, we already set that to true/false. That needs a bit of debugging directly with such a stream.
Also keep in mind that this repository is outdated. The latest version can be found at https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/tree/main/net/ndi
@sdroege Thank you so much for your quick support.
We are checking on how to upload the stream file here as we have restrictions from our firewall. We will share you the file soon after clearing the restrictions. But in our observation , we find this same problem in any file streaming.
And about the metadata , we checked our issue case and we see that
Ubuntu working case : We receive metadata twice
First time on_program="false",
Second time on_Program="true")
webOS non working case : metadata received only once with on_program="false"
Also we have tried to use gst-plugins-rs ndi code in our setup. We found same behaviour in that as well. We will soon provide you the logs of that.
@sdroege We have tried the same test run using ndi from gst-plugins-rs
Server : OBS Studio Stream file used : https://download.samplelib.com/mp4/sample-30s.mp4
Client : webOS device We have observed same behaviour in client and the streaming failed with "No frame received yet, retry".
root@LGwebOSID:~# GST_DEBUG=ndi*:9 gst-launch-1.0 -v playbin3 uri=ndi://10.221.44.89:5961 video-sink=lxvideosink
Setting pipeline to PAUSED ...
URI setting done uri is : 'ndi://10.221.44.89:5961'
uri schema is : 'ndi'
host is : '10.221.44.89'
port is : '5961'
url-address is : '10.221.44.89:5961'
Settings : Settings { ndi_name: None, url_address: Some("10.221.44.89:5961"), uri: Some("ndi://10.221.44.89:5961"), connect_timeout: 10000, timeout: 5000, max_queue_length: 10, receiver_ndi_name: "GStreamer NewTek NDI Source 0.11.0-alpha.1-12656af+", bandwidth: 100, color_format: UyvyBgra, timestamp_mode: Auto }
0:00:00.035133860 12607 0x2350c40 DEBUG ndireceiver src/ndisrc/receiver.rs:694:gstndi::ndisrc::receiver::Receiver::connect::{{closure}}:<source> Starting NDI connection...
0:00:00.035183660 12607 0x2350c40 DEBUG ndireceiver src/ndisrc/receiver.rs:698:gstndi::ndisrc::receiver::Receiver::connect:<source> Connecting to NDI source with NDI name 'None', URL/Address Some("10.221.44.89:5961") and URI Some("ndi://10.221.44.89:5961")
0:00:00.038751200 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
Getting uri from ndisrc : 'Some("ndi://10.221.44.89:5961")'
Pipeline is live and does not need PREROLL ...
Redistribute latency...
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0: ring-buffer-max-size = 0
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0: buffer-size = -1
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0: buffer-duration = -1
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0: use-buffering = false
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0: download = false
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0: uri = ndi://10.221.44.89:5961
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0: connection-speed = 0
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstURISourceBin:urisourcebin0: source = "\(GstNdiSrc\)\ source"
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstURISourceBin:urisourcebin0/GstNdiSrc:source.GstPad:src: caps = application/x-ndi
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstURISourceBin:urisourcebin0/GstTypeFindElement:typefindelement0.GstPad:src: caps = application/x-ndi
New clock: GstSystemClock
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstURISourceBin:urisourcebin0.GstGhostPad:src_0: caps = application/x-ndi
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstDecodebin3:decodebin3-0.GstGhostPad:sink.GstProxyPad:proxypad0: caps = application/x-ndi
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstDecodebin3:decodebin3-0/GstParseBin:parsebin0.GstGhostPad:sink.GstProxyPad:proxypad2: caps = application/x-ndi
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstDecodebin3:decodebin3-0/GstParseBin:parsebin0/GstTypeFindElement:typefind.GstPad:src: caps = application/x-ndi
0:00:00.043071460 12607 0x2364980 LOG ndisrcdemux src/ndisrcdemux/imp.rs:298:gstndi::ndisrcdemux::imp::NdiSrcDemux::sink_event:<ndisrcdemux0> Handling event Event { ptr: 0x2369198, type: "stream-start", seqnum: Seqnum(39), structure: Some(GstEventStreamStart { stream-id: (gchararray) "d98d50a2689291c9c08823e9f7969c161f852ba990457a6437c8adacce31782f", flags: (GstStreamFlags) ((GstStreamFlags) GST_STREAM_FLAG_NONE), group-id: (guint) 1 }) }
0:00:00.043169260 12607 0x2364980 LOG ndisrcdemux src/ndisrcdemux/imp.rs:298:gstndi::ndisrcdemux::imp::NdiSrcDemux::sink_event:<ndisrcdemux0> Handling event Event { ptr: 0xf3502410, type: "caps", seqnum: Seqnum(70), structure: Some(GstEventCaps { caps: (GstCaps) application/x-ndi }) }
0:00:00.043268600 12607 0x2364980 LOG ndisrcdemux src/ndisrcdemux/imp.rs:298:gstndi::ndisrcdemux::imp::NdiSrcDemux::sink_event:<ndisrcdemux0> Handling event Event { ptr: 0x2369198, type: "stream-start", seqnum: Seqnum(39), structure: Some(GstEventStreamStart { stream-id: (gchararray) "d98d50a2689291c9c08823e9f7969c161f852ba990457a6437c8adacce31782f", flags: (GstStreamFlags) ((GstStreamFlags) GST_STREAM_FLAG_NONE), group-id: (guint) 1 }) }
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstDecodebin3:decodebin3-0/GstParseBin:parsebin0/GstNdiSrcDemux:ndisrcdemux0.GstPad:sink: caps = application/x-ndi
0:00:00.043316200 12607 0x2364980 LOG ndisrcdemux src/ndisrcdemux/imp.rs:298:gstndi::ndisrcdemux::imp::NdiSrcDemux::sink_event:<ndisrcdemux0> Handling event Event { ptr: 0xf3502410, type: "caps", seqnum: Seqnum(70), structure: Some(GstEventCaps { caps: (GstCaps) application/x-ndi }) }
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstDecodebin3:decodebin3-0/GstParseBin:parsebin0/GstTypeFindElement:typefind.GstPad:sink: caps = application/x-ndi
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstDecodebin3:decodebin3-0/GstParseBin:parsebin0.GstGhostPad:sink: caps = application/x-ndi
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstDecodebin3:decodebin3-0.GstGhostPad:sink: caps = application/x-ndi
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstURISourceBin:urisourcebin0.GstGhostPad:src_0.GstProxyPad:proxypad1: caps = application/x-ndi
/GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstURISourceBin:urisourcebin0/GstTypeFindElement:typefindelement0.GstPad:sink: caps = application/x-ndi
0:00:00.088832840 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
0:00:00.138896520 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
0:00:00.188957040 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
0:00:00.239022120 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
0:00:00.289085600 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
0:00:00.339150600 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
0:00:00.389212140 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
0:00:00.439475160 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
0:00:00.489537360 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
0:00:00.539610820 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
0:00:00.589676020 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
0:00:00.639733760 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
0:00:00.689789660 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
0:00:00.739848140 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
0:00:00.789910080 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
0:00:00.839969200 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:802:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> No frame received yet, retry
.
.
.
0:00:10.052586320 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:798:gstndi::ndisrc::receiver::Receiver::receive_thread:<source> Timed out -- assuming EOS
0:00:10.052626540 12607 0x2371b20 DEBUG ndireceiver src/ndisrc/receiver.rs:865:gstndi::ndisrc::receiver::Receiver::receive_thread::{{closure}}:<source> Signalling EOS
0:00:10.052922080 12607 0x2364980 LOG ndisrcdemux src/ndisrcdemux/imp.rs:298:gstndi::ndisrcdemux::imp::NdiSrcDemux::sink_event:<ndisrcdemux0> Handling event Event { ptr: 0xf35025c0, type: "eos", seqnum: Seqnum(31), structure: None }
ERROR: from element /GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstDecodebin3:decodebin3-0/GstParseBin:parsebin0/GstNdiSrcDemux:ndisrcdemux0: Could not demultiplex stream.
Additional debug info:
src/ndisrcdemux/imp.rs(302): gstndi::ndisrcdemux::imp::NdiSrcDemux::sink_event (): /GstPlayBin3:playbin3-0/GstURIDecodeBin3:uridecodebin3-0/GstDecodebin3:decodebin3-0/GstParseBin:parsebin0/GstNdiSrcDemux:ndisrcdemux0:
EOS without available srcpad(s)
Execution ended after 0:00:10.013628420
Setting pipeline to NULL ...
0:00:10.054686620 12607 0x2350c40 DEBUG ndisrc src/ndisrc/imp.rs:498:<gstndi::ndisrc::imp::NdiSrc as gstreamer_base::subclass::base_src::BaseSrcImpl>::unlock:<source> Unlocking
0:00:10.055048700 12607 0x2350c40 DEBUG ndisrc src/ndisrc/imp.rs:506:<gstndi::ndisrc::imp::NdiSrc as gstreamer_base::subclass::base_src::BaseSrcImpl>::unlock_stop:<source> Stop unlocking
0:00:10.055089020 12607 0x2350c40 DEBUG ndireceiver src/ndisrc/receiver.rs:569:<gstndi::ndisrc::receiver::ReceiverInner as core::ops::drop::Drop>::drop::{{closure}}:<source> Closed NDI connection
Freeing pipeline ...
Please report that in gitlab.freedesktop.org then, thanks. I'd also need step by step instructions for how to set up an NDI stream with OBS.
@sdroege Sure thanks again. I will report this issue in gitlab.freedesktop.org
we can setup NDI Server using using two options
VLC player as Server : https://player.vimeo.com/video/692271561
In both cases issue occurs. I would suggest you can try using VLC player as Server as it is easy and quick to setup. We followed the same videos to setup both VLC and OBS Studio for our NDI Streaming
@sdroege i would like to update you on one thing. We have been using gst-plugin-ndi over gst-plugin-rs although gst-plugin-rs has latest ndi source because in webOS , we have gstreamer 1.18 version supported. But we know that gst-plugin-rs (NDI source) depends on gstreamer 1.20. So we have been trying with gst-plugin-ndi until now.
It does not depend on 1.20. By default it requires 1.18 but you can also compile it with 1.14 if you disable some features.
Once again thanks for your quick response. It really helps us know quickly on what next to be done. By the way the reason why i mentioned about the dependency of gst-plugins-rs with gstreamer 1.20, is that we got the below error while building gst-plugins-rs.
gstreamer-audio & gstreamer-pbutils were expecting v1.20
| cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR
| cargo:warning=`"pkg-config" "--libs" "--cflags" "gstreamer-audio-1.0" "gstreamer-audio-1.0 >= 1.20"` did not exit successfully: exit status: 1
| error: could not find system library 'gstreamer-audio-1.0' required by the 'gstreamer-audio-sys' crate
|
| --- stderr
| Requested 'gstreamer-audio-1.0 >= 1.20' but version of GStreamer Audio library is 1.18.2
|
| The following warnings were emitted during compilation:
|
| warning: `"pkg-config" "--libs" "--cflags" "gstreamer-pbutils-1.0" "gstreamer-pbutils-1.0 >= 1.20"` did not exit successfully: exit status: 1
|
| error: failed to run custom build command for `gstreamer-pbutils-sys v0.21.0 (https://gitlab.freedesktop.org/gstreamer/gstreamer-rs#0b922b0e)`
|
Build inside net/ndi
only instead of building everything.
Once again thanks for your quick response. It really helps us know quickly on what next to be done.
I don't expect to be able to have time to look into the actual problem anytime this week btw.
@sdroege The above error mentioned was got by building net/ndi alone.
And about your time, we are thankful until now for your responses to our queries. We will try to check ourself now. In any case we get any other queries , we will reach out to you later.
We have been trying to add NDI support in our webOS platform. For that we integrated gst-plugin-ndi along with libndi (NDI SDK) onto our webOS. But when we tested , we are currently facing issue in gst-plugin-ndi not receiving audio/video data.
We separately tested all examples related to libndi NDI SDK. We are able to receive audio/video data in libndi by running sender and receiver examples provided in NDI SDK. Below is the success logs of libndi after receiving video data from NDI server.
But when we try to receive data from gst-plugin-ndi , we are unable to receive the data. Below is libndi logs
Below is gst-plugin-ndi logs.
Can we get any support on this issue? or we want to know the reason why no frames are received in gst-plugin-ndi.