<div dir="ltr">Hi,<div><br></div><div>I am not able to link pads between source, audiobin and videobin. Following is the pipeline I want to convert to application: </div><div>gst-launch-1.0 rtspsrc location="rtsp:<filepath>"  latency=0 name=demux demux. ! queue !  rtpmp4gdepay ! aacparse ! avdec_aac !  audioconvert ! audioresample ! autoaudiosink demux. ! queue ! rtph264depay ! h264parse ! omxh264dec ! videoconvert ! videoscale ! video/x-raw,width=176, height=144 ! ximagesink<br></div><div><br></div><div>Following is the code implemented till date:</div><div><br></div><div><div>#include <gst/gst.h></div><div><br></div><div>static void onPadAdded(GstElement *element, GstPad *pad, gpointer data)</div><div>{</div><div>        GstElement *decoder;</div><div>        decoder = GST_ELEMENT(data);</div><div>        g_debug ("Linking audio pad to depay ");</div><div><br></div><div>        GstPad *targetsink = gst_element_get_static_pad ( decoder, "audiosink");</div><div>        gst_pad_link (pad, targetsink);</div><div>        gst_object_unref (targetsink);</div><div><br></div><div>}</div><div><br></div><div>static void on_pad_added(GstElement *element, GstPad *pad, gpointer data)</div><div>{</div><div>        GstElement *decoder;</div><div><br></div><div>        decoder = GST_ELEMENT(data);</div><div>        g_debug ("Linking video pad to depay ");</div><div><br></div><div>        GstPad *targetsink = gst_element_get_static_pad ( decoder, "videosink");</div><div>        gst_pad_link (pad, targetsink);</div><div>        gst_object_unref (targetsink);</div><div>}</div><div><br></div><div>int main(int argc, char *argv[]) {</div><div>        GstElement *source, *audio, *video, *convert, *pipeline, *audioDepay, *audioQueue, *videoQueue,</div><div>           *audioParse, *audioDecode, *audioConvert, *audioResample, *audioSink, *videoDepay, *videoParser, *videoDecode, *videoConvert, *videoScale, *videoSink;</div><div>        GstCaps *capsFilter;</div><div>        GstBus *bus;</div><div>        GstMessage *msg;</div><div>        GstPad *pad;</div><div>        GstPad *sinkpad,*ghost_sinkpad;</div><div>        gboolean link_ok;</div><div>        GstStateChangeReturn ret;</div></div><div><div>      /* Initialize GStreamer */</div><div>        gst_init (&argc, &argv);</div><div><br></div><div><br></div><div>        /* Create Elements */</div><div>        pipeline = gst_pipeline_new("rtsp-pipeline");</div><div>        source = gst_element_factory_make ("rtspsrc", "source");</div><div><br></div><div><br></div><div>        /*audio bin*/</div><div>        audio = gst_bin_new ("audiobin");</div><div>        audioQueue = gst_element_factory_make ("queue", "audio-queue");</div><div>        audioDepay = gst_element_factory_make ("rtpmp4gdepay", "audio-depayer");</div><div>        audioParse = gst_element_factory_make ("aacparse", "audio-parser");</div><div>        audioDecode = gst_element_factory_make ("avdec_aac", "audio-decoder");</div><div>        audioConvert = gst_element_factory_make ("audioconvert", "aconv");</div><div>        audioResample = gst_element_factory_make ("audioresample", "audio-resample");</div><div>        audioSink = gst_element_factory_make ("autoaudiosink", "audiosink");</div><div><br></div><div>        if (!audioQueue || !audioDepay || !audioParse || !audioConvert || !audioResample || !audioSink)</div><div>        {</div><div>                g_printerr("Cannot create audio elements \n");</div><div>                return 0;</div><div>        }</div><div>        g_object_set(source, "location", "rtsp://<file path>", NULL);</div><div>        g_object_set(source, "latency", 0, NULL);</div><div>        g_object_set(source, "name", "demux", NULL);</div><div>#if 0</div><div>        gst_bin_add_many(GST_BIN(pipeline), source, audioQueue, audioDepay, audioParse, audioDecode, </div><div>                        audioConvert, audioResample, audioSink, NULL);</div><div><br></div><div>        if (!gst_element_link_many(audioQueue, audioDepay, audioParse, audioDecode, audioConvert, audioResample,  audioSink, NULL))</div><div>        {</div><div>                g_printerr("Error linking fields ...1 \n");</div><div>                return 0;</div><div>        }</div><div>#endif</div><div>        video  = gst_bin_new ("videobin");</div><div>        videoQueue = gst_element_factory_make ("queue", "video-queue");</div><div>        videoDepay= gst_element_factory_make ("rtph264depay", "video-depayer");</div><div>        videoParser = gst_element_factory_make ("h264parse", "video-parser");</div><div>        videoDecode = gst_element_factory_make ("omxh264dec", "video-decoder");</div><div>        videoConvert = gst_element_factory_make("videoconvert", "convert");</div><div>        videoScale = gst_element_factory_make("videoscale", "video-scale");</div><div>        videoSink = gst_element_factory_make("ximagesink", "video-sink");</div><div>        capsFilter = gst_caps_new_simple("video/x-raw",</div><div>                        "width", G_TYPE_INT, 176,</div><div>                        "height", G_TYPE_INT, 144,</div><div>                        NULL);</div><div><br></div><div>        if (!videoQueue || !videoDepay || !videoParser || !videoDecode || !videoConvert || !videoScale || !videoSink || !capsFilter)</div><div>        {</div><div>                g_printerr("Cannot create video elements \n");</div><div>                return 0;</div><div>                                                                </div><div><br></div><div>/*      gst_bin_add_many(GST_BIN(pipeline),source, </div><div>                        audioQueue, audioDepay, audioParse, audioDecode,audioConvert, audioResample, audioSink, </div><div>                        videoQueue, videoDepay, videoParser, videoDecode, videoConvert, videoScale, videoSink, NULL);</div><div><br></div><div>*/</div><div>        gst_bin_add_many(GST_BIN(audio),</div><div>                        audioQueue, audioDepay, audioParse, audioDecode,audioConvert, audioResample, audioSink, NULL);</div><div>//      g_signal_connect(G_OBJECT(source), "pad-added", G_CALLBACK(onPadAdded), videoDepay); </div><div>        /* set property value */</div><div>#if 0</div><div>        if (!gst_element_link(source, audioQueue))</div><div>        {</div><div>                g_printerr("Cannot link source and audioQueue \n");</div><div>                return 0;</div><div>        }</div><div>        if (!gst_element_link(audioQueue, audioDepay))</div><div>        {</div><div>                g_printerr("Cannot link audioDepay and audioQueue \n");</div><div>                return 0;</div><div>        }</div><div>#endif</div><div>        if (!gst_element_link(audioDepay, audioParse))</div><div>        {</div><div>                g_printerr("Cannot link audioDepay and audioParse \n");</div><div>                return 0;</div><div>        }</div><div>        if (!gst_element_link(audioParse, audioDecode))</div><div>        {</div><div>                g_printerr("Cannot link audioParse and audioDecode \n");</div><div>                return 0;</div><div>        }</div><div>        if (!gst_element_link(audioDecode, audioConvert))</div><div>        {</div><div>                g_printerr("Cannot link audioDecode and audioConvert \n");</div><div>                return 0;</div><div>        }</div><div>        if (!gst_element_link(audioConvert, audioResample))</div><div>        {</div><div>                g_printerr("Cannot link audioConvert and audioResample \n");</div><div>                return 0;</div><div>        }</div><div>        if (!gst_element_link(audioResample, audioSink))</div><div>        {</div><div>                g_printerr("Cannot link audioResample and  audioSink \n");</div><div>                return 0;</div><div>        }</div><div>        g_signal_connect(G_OBJECT(source), "pad-added", G_CALLBACK(onPadAdded), audioQueue);</div><div>#if 0</div><div>        if (!gst_element_link(source, videoQueue))</div><div>        {</div><div>                g_printerr("Cannot link source and videoQueue \n");</div><div>                return 0;</div></div><div><div>       }</div><div>#endif</div><div>        if (!gst_element_link(videoDepay, videoParser))</div><div>        {</div><div>                g_printerr("Cannot link videoDepay and videoParser \n");</div><div>                return 0;</div><div>        }</div><div>        if (!gst_element_link(videoParser, videoDecode))</div><div>        {</div><div>                g_printerr("Cannot link videoParser and videoConvert \n");</div><div>                return 0;</div><div>        }</div><div>        if (!gst_element_link(videoDecode, videoConvert))</div><div>        {</div><div>                g_printerr("Cannot link videoDecode and videoConvert \n");</div><div>                return 0;</div><div>        }</div><div>        g_signal_connect(G_OBJECT(source), "pad-added", G_CALLBACK(on_pad_added), videoQueue);</div><div><br></div><div>        gst_bin_add_many(GST_BIN(pipeline), source, audio, video, NULL);</div><div><br></div><div><br></div><div><br></div><div><br></div><div>#if 0   </div><div>        sinkpad = gst_element_get_static_pad (videoConvert, "sink"); </div><div>        ghost_sinkpad = gst_ghost_pad_new ("sink", sinkpad); </div><div>        gst_pad_set_active (ghost_sinkpad, TRUE); </div><div>        gst_element_add_pad (video, ghost_sinkpad);</div><div><br></div><div>        if (!gst_element_link_many(videoQueue, videoDepay, videoParser, videoDecode, videoScale, NULL))</div><div>        {</div><div>                g_printerr("Error linking fields... 2 \n");</div><div>                return 0;</div><div>        }</div><div><br></div><div>        gst_bin_add_many (GST_BIN(pipeline), video,NULL);</div><div>#endif</div><div><br></div><div>          /* Start playing */</div><div>        gst_element_set_state ( pipeline, GST_STATE_PLAYING);</div><div><br></div><div>        /* Wait until error or EOS */</div><div>        bus = gst_element_get_bus (pipeline);</div><div>        msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);</div><div><br></div><div>        /* Free resources */</div><div>        if (msg != NULL)</div><div>                gst_message_unref (msg);</div><div>        gst_object_unref (bus);</div><div>        gst_element_set_state (pipeline, GST_STATE_NULL);</div><div>        gst_object_unref (pipeline);</div><div>        return 0;</div><div>}</div></div><div><br></div></div>


        
        
        
<br/><hr align="left" width="300" />
View this message in context: <a href="http://gstreamer-devel.966125.n4.nabble.com/RTSP-client-application-with-source-audio-and-video-bins-tp4681527.html">RTSP client application with source, audio and video bins</a><br/>
Sent from the <a href="http://gstreamer-devel.966125.n4.nabble.com/">GStreamer-devel mailing list archive</a> at Nabble.com.<br/>