<div dir="ltr">I think tsdemux is badly broken at the moment. I'm having a similar experience to you: sometimes it works, then you change something that should be completely irrelevant (in your case constructing the pipeline in C++ instead of using gst-launch; in my case I've found that just changing the log level can make a difference) and the pipeline freezes. See also <a href="https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1419">issue 1419</a>.<div><br></div><div>I've just tried adding a queue2 to my manager element where its sink is linked with my internal source (has a single src pad with caps "video/mpegts, systemstream = (boolean) true;") and the queue2's src is the target of my manager's src ghost pad. This made things worse. Highlights from the log of `gst-launch-1.0 playbin uri="htsp://..."`:</div><div><font face="monospace"><br></font></div><div><font face="monospace">0:00:00.088988232 24066 0x5591eb207ea0 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:363:gst_element_factory_create: creating element "tsdemux"<br>0:00:00.089118072 24066 0x5591eb207ea0 INFO        GST_ELEMENT_PADS gstelement.c:752:gst_element_add_pad:<MpegTSBase@0x7fac2c1d8000> adding pad 'sink'<br>0:00:00.089291804 24066 0x5591eb207ea0 INFO                GST_PADS gstpad.c:2377:gst_pad_link_prepare: trying to link typefind:src and tsdemux0:sink<br>0:00:00.089306656 24066 0x5591eb207ea0 INFO                GST_PADS gstpad.c:2585:gst_pad_link_full: linked typefind:src and tsdemux0:sink, successful<br>0:00:00.089310744 24066 0x5591eb207ea0 INFO               GST_EVENT gstevent.c:1610:gst_event_new_reconfigure: creating reconfigure event<br>0:00:00.089334061 24066 0x5591eb207ea0 INFO              GST_STATES gstelement.c:2769:gst_element_continue_state:<tsdemux0> completed state change to READY<br>0:00:00.089340768 24066 0x5591eb207ea0 INFO              GST_STATES gstelement.c:2669:_priv_gst_element_state_changed:<tsdemux0> notifying about state-changed NULL to READY (VOID_PENDING pending)<br>0:00:00.089424733 24066 0x5591eb207ea0 INFO        GST_ELEMENT_PADS gstelement.c:1006:gst_element_get_static_pad: no such pad 'video_%01x_%05x' in element "tsdemux0"<br>0:00:00.089433342 24066 0x5591eb207ea0 INFO        GST_ELEMENT_PADS gstelement.c:1006:gst_element_get_static_pad: no such pad 'audio_%01x_%05x' in element "tsdemux0"<br>0:00:00.089437649 24066 0x5591eb207ea0 INFO        GST_ELEMENT_PADS gstelement.c:1006:gst_element_get_static_pad: no such pad 'subpicture_%01x_%05x' in element "tsdemux0"<br>0:00:00.089441946 24066 0x5591eb207ea0 INFO        GST_ELEMENT_PADS gstelement.c:1006:gst_element_get_static_pad: no such pad 'private_%01x_%05x' in element "tsdemux0"<br>0:00:00.089528559 24066 0x5591eb207ea0 WARN                    task gsttask.c:890:gst_task_join:<srcqueue:src> trying to join task from its thread<br><br>(gst-launch-1.0:24066): GStreamer-WARNING **: 15:40:38.404: <br>Trying to join task 0x5591eb225170 from its thread would deadlock.<br>You cannot change the state of an element from its streaming<br>thread. Use g_idle_add() or post a GstMessage on the bus to<br>schedule the state change from the main thread.</font></div><div><br></div><div>I think I'm going to have to give up on gstreamer and try to get my head around something like MSE in a web app :-(.</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 6 Oct 2020 at 12:30, Torben <<a href="mailto:t.wiggerich@airrobot.de">t.wiggerich@airrobot.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi all,<br>
<br>
I have a problem to get the srcipt running in my application. So at first I<br>
tried to compile the following:<br>
<br>
gst-launch-1.0 -v udpsrc multicast-group=224.10.10.10 port=8008 ! tsdemux !<br>
h264parse ! avdec_h264 ! d3dvideosink sync=false<br>
<br>
It worked and displays the correct video.<br>
<br>
But if I try to do this in my application than happens nothing. I think the<br>
problem is that the event linkElements does not get called. So it comes from<br>
the pad-added signal of the tsdemux. I do not get any errors, or at least I<br>
cannot see them. So it seems for me that everything is ok. But the signal is<br>
not getting called...<br>
<br>
I run the following code with GST_DEBUG level 4.  gstdebug(4).txt<br>
<<a href="http://gstreamer-devel.966125.n4.nabble.com/file/t379676/gstdebug%284%29.txt" rel="noreferrer" target="_blank">http://gstreamer-devel.966125.n4.nabble.com/file/t379676/gstdebug%284%29.txt</a>>  <br>
<br>
Can you please tell me what I am doing wrong?<br>
<br>
#include <QCoreApplication><br>
#include <gst/gst.h><br>
#include <iostream><br>
<br>
typedef struct<br>
{<br>
  GstElement * pipeline = nullptr;<br>
  GstElement * source = nullptr;<br>
  GstElement * tsDemux = nullptr;<br>
  GstElement * h264parse = nullptr;<br>
  GstElement * avdecH264 = nullptr;<br>
  GstElement * sinkVideo = nullptr;<br>
} VideoData;<br>
<br>
static void linkElements(GstElement* element,GstPad* sourcePad, gpointer<br>
sinkElement);<br>
<br>
int main(int argc, char *argv[])<br>
{<br>
    QCoreApplication a(argc, argv);<br>
    GMainLoop *loop;<br>
<br>
    if (!g_thread_supported ())<br>
        g_thread_init (nullptr);<br>
<br>
    gst_init ( 0, 0 );<br>
<br>
    loop = g_main_loop_new (nullptr, FALSE);<br>
<br>
    VideoData m_data;<br>
<br>
    m_data.pipeline = gst_pipeline_new ("player");<br>
    m_data.source = gst_element_factory_make ("udpsrc", nullptr);<br>
    m_data.tsDemux = gst_element_factory_make("tsdemux", nullptr);<br>
    m_data.h264parse = gst_element_factory_make("h264parse", nullptr);<br>
    m_data.avdecH264 = gst_element_factory_make("avdec_h264", nullptr);<br>
    m_data.sinkVideo = gst_element_factory_make("d3dvideosink", nullptr);<br>
<br>
    g_object_set(G_OBJECT (m_data.source), "multicast-group",<br>
"224.10.10.10", nullptr);<br>
    g_object_set(G_OBJECT (m_data.source), "port", 8008, nullptr);<br>
    g_object_set(G_OBJECT (m_data.sinkVideo), "sync", false, nullptr);<br>
<br>
    gst_bin_add_many(GST_BIN(m_data.pipeline), m_data.source,<br>
m_data.tsDemux, m_data.h264parse, m_data.avdecH264, m_data.sinkVideo,<br>
nullptr);<br>
<br>
    std::cout << "Start linking all elements..." << std::endl;<br>
<br>
    if ( gst_element_link (m_data.source, m_data.tsDemux ) != TRUE )<br>
    {<br>
        std::cout << "1: Element could not be linked." << std::endl;<br>
        gst_object_unref (m_data.pipeline);<br>
        return 0;<br>
    }<br>
<br>
    g_signal_connect(m_data.tsDemux, "pad-added", G_CALLBACK(linkElements),<br>
nullptr); //nullptr //&m_data<br>
<br>
    if ( gst_element_link_many(m_data.h264parse, m_data.avdecH264,<br>
m_data.sinkVideo, nullptr) != TRUE )<br>
    {<br>
        std::cout << "2: Element could not be linked." << std::endl;<br>
        gst_object_unref (m_data.pipeline);<br>
        return 0;<br>
    }<br>
<br>
    std::cout << "Linked all elements!" << std::endl;<br>
<br>
    GstStateChangeReturn ret = gst_element_set_state(m_data.sinkVideo,<br>
GST_STATE_READY);<br>
<br>
    ret = gst_element_set_state (m_data.pipeline, GST_STATE_PLAYING);<br>
    if (ret == GST_STATE_CHANGE_FAILURE)<br>
    {<br>
        std::cout << "Unable to set the pipeline to the playing state." <<<br>
std::endl;<br>
        gst_object_unref (m_data.pipeline);<br>
        return 0;<br>
    }<br>
<br>
    g_main_loop_run (loop);<br>
<br>
    return a.exec();<br>
}<br>
<br>
static void linkElements(GstElement* element,GstPad* sourcePad, gpointer<br>
sinkElement){<br>
    std::cout << "Got here linkElements!" << std::endl; // It will never get<br>
here!<br>
    GstPad*<br>
sinkPad=gst_element_get_static_pad((GstElement*)sinkElement,"sink");<br>
    gst_pad_link(sourcePad,sinkPad);<br>
    gst_object_unref(sinkPad);<br>
}<br>
<br>
<br>
<br>
<br>
--<br>
Sent from: <a href="http://gstreamer-devel.966125.n4.nabble.com/" rel="noreferrer" target="_blank">http://gstreamer-devel.966125.n4.nabble.com/</a><br>
_______________________________________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank">gstreamer-devel@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr">TH<div><br></div></div></div>