I have a mobile(android) app with gst and unfortunately it hangs occasionally after a seek. I've been searching for several weeks and just can't get any further. Therefore, I hope that I can get this way a few tips on what I could still do.
The pipeline is attached in the image.
But in this case it is not a UDP Src but a souphttpsrc.
After a seek sometimes the pipeline doesn't get into the playing state anymore.
So I can't read from the queue of the appsink anymore. It hangs and triggers a deadlock.
gst_element_seek_simple(customData->pipeline, GST_FORMAT_TIME, (GstSeekFlags)(GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT),time_nanoseconds)
I tried it with a flush before the seek.
To get appropriate log output I set the loglevels like this.
setenv("GST_DEBUG", "GST_TRACER:7,GST_BUFFER*:3,GST_EVENT:9,GST_MESSAGE:9,appsink:9,queue:9", true);
setenv("GST_TRACERS", "leaks(GstEvent,GstMessage)", true);
Of course this generates a lot of output. Therefore, I attached the logfile.
If my app can't get any data from the appsink for a certain time, then I run through the pipeline and output each state. So you can see that both appsinks (each for audio/video) are still hanging in the pause state.
Even if I try to set them explicitly to playing nothing happens.
I also can't get
g_signal_emit_by_name(mAppSink, "pull-sample", &sample);
or similar on the appsink anymore.
It seems that the gst-libs/gst/app/gstappsink.c it hands on a mutex code. I don't know why.
I suspect that some buffer is full and I do not know why
every now and then I get
"Got data flow before segment event"
but it doesn't seem to be the problem because it sometimes works anyway.
What can I do to get to the bottom of this?
Regards
Patrick