SRT sink doesn't always start properly

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

SRT sink doesn't always start properly

MathieuP
I am trying to use SRT sink with GStreamer 1.16.0 on Ubuntu and I am facing
an issue at startup that is quite frequent. Once it's up and running it
works great, but about 50% of the time it simply doesn't want to start.

I managed to come up with a very simple pipeline to reproduce my issue

First, I start the consumer:
gst-launch-1.0 -v srtsrc uri="srt://127.0.0.1:8888" ! identity silent=false
! fakesink async=false

And then I try broadcasting something:
gst-launch-1.0 -v videotestsrc ! queue ! x264enc ! queue ! mpegtsmux
alignment=7 ! identity silent=false ! queue leaky=downstream ! srtsink
uri="srt://:8888" sync=false async=false

The identity element from my consumer will print stuff when it works, and I
tend to have to restart my 2nd pipeline 2 or 3 times before that happens,
even though the identity from this pipeline will always print, proving that
buffers seem to be flowing through normally there

Does anyone have experience with SRT streaming in GStreamer? Is anything
wrong with my pipeline?
My knowledge on SRT is quite limited (thanks GStreamer for abstracting all
that complexity), so I am not sure what else I can do to help with debugging
here.



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: SRT sink doesn't always start properly

MathieuP
After looking at this post:
http://gstreamer-devel.966125.n4.nabble.com/SRT-stream-not-sending-td4693973.html
I considered replacing my srtsink with a udpsink and spawning a
srt-live-transmit in the background to pick up my UDP stream and take care
of the SRT logic.

This seems to work 100% of the time, however this solution will never
support multiple clients: https://github.com/Haivision/srt/issues/574
They actually suggest using GStreamer in this thread for this kind of use
case, so hopefully something can be tweaked in my pipeline to make it work
as smoothly as their test app?

From there, I decided to try and see what is different between the default
config for srtsink and srt-live-transmit. It turns out they are using a
block size of 1456 instead of the default 4096 in srtsink, so I started
using blocksize=1456 on my srtsink. It's hard to tell for sure, but it seems
to be working better for me. It is still failing occasionally, but seems to
work about 80% of the time now...



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: SRT sink doesn't always start properly

MathieuP
After further testing, I found that when my element gets into this blocking
state, it is stuck at this line:
https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/blob/1.16.0/ext/srt/gstsrtobject.c#L640

srtobject->listener_poll_id seems to be valid (it is always 2 in my tests).
I've tried setting poll-timeout=1000, but unfortunately it keeps timing out
and never picks up my existing client.

From what I can tell, it shouldn't even reach this line anyway since I start
my client first. So my gut feeling is, something might be going wrong in the
way listeners register callers.



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel