<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi Zheng<div class=""><br class=""></div><div class="">Whenever possible, I use <a href="https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstParse.html#gst-parse-launch" class="">gst_parse_launch</a> to avoid these types of complications. This is what gst-launch uses underneath, so if it works on one it should work on the other.</div><div class=""><br class=""></div><div class="">Specifically in your example:</div><div class=""><br class=""></div><div class="">int startPipeline(const char *vs_location) {<br class=""><span class="Apple-tab-span" style="white-space:pre">   </span>GstElement *pipeline;<br class=""><span class="Apple-tab-span" style="white-space:pre">  </span>GstBus *bus;<br class=""><span class="Apple-tab-span" style="white-space:pre">   </span>guint bus_watch_id;<br class=""><b class=""><span class="Apple-tab-span" style="white-space:pre">        </span>gchar *pipe_desc;</b></div><div class=""><b class=""><span class="Apple-tab-span" style="white-space:pre">   </span>GError *error = NULL;</b></div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">    </span>gst_init(NULL, NULL);</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">      </span><b class="">pipe_desc = g_strdup_printf("rtspsrc port-range=5000-5100 location=%s latency=0 ! decodebin ! videoconvert ! video/x-raw,width=640,height=480,format=YUY2 ! autovideosink”, vs_location);</b></div><div class=""><b class=""><br class=""><span class="Apple-tab-span" style="white-space:pre"> </span>pipeline = gst_parse_launch (pipe_desc, &error);</b></div><div class=""><b class=""><span class="Apple-tab-span" style="white-space:pre">        </span>//Handle errors here</b></div><div class=""><b class=""><span class="Apple-tab-span" style="white-space:pre">        </span>g_free (pipe_desc);</b></div><div class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">        </span>bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));<br class=""><span class="Apple-tab-span" style="white-space:pre">    </span>bus_watch_id = gst_bus_add_watch(bus, bus_callback, NULL);<br class=""><span class="Apple-tab-span" style="white-space:pre">     </span>gst_object_unref(bus);<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">    </span>gst_element_set_state(pipeline, GST_STATE_PLAYING);<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">       </span>loop = g_main_loop_new(NULL, FALSE);<br class=""><span class="Apple-tab-span" style="white-space:pre">   </span>g_main_loop_run(loop);<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">    </span>// Clean up.<br class=""><span class="Apple-tab-span" style="white-space:pre">   </span>gst_element_set_state(pipeline, GST_STATE_NULL);<br class=""><span class="Apple-tab-span" style="white-space:pre">       </span>gst_object_unref(pipeline);<br class=""><span class="Apple-tab-span" style="white-space:pre">    </span>g_source_remove(bus_watch_id);<br class=""><span class="Apple-tab-span" style="white-space:pre"> </span>g_main_loop_unref(loop);<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">  </span>return 0;<br class="">}</div><div class=""><br class=""><div class="">
<div class=""><div class=""><font size="1" class="">—</font></div><div class=""><font size="1" class="">Michael Gruner <<a href="mailto:michael.gruner@ridgerun.com" class="">michael.gruner@ridgerun.com</a>></font></div><div class=""><font size="1" class="">Embedded Linux and GStreamer solutions</font></div><div class=""><font size="1" class="">RidgeRun Engineering</font></div><div class=""><font size="1" class="">Contact Us - <a href="http://www.ridgerun.com/#!contact/c3vn" class="">http://www.ridgerun.com/#!contact/c3vn</a></font></div></div>
</div>
<br class=""><div><blockquote type="cite" class=""><div class="">On Jun 16, 2016, at 19:45, Zheng <<a href="mailto:superxingzheng@gmail.com" class="">superxingzheng@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">*Thang you in advance!*<br class=""><br class="">*This is the working gst-launch-1.0 pipeline.*<br class=""><br class="">gst-launch-1.0 rtspsrc port-range=5000-5100<br class="">location=<a href="rtsp://192.168.1.10:8555/right" class="">rtsp://192.168.1.10:8555/right</a> latency=0 ! decodebin ! videoconvert<br class="">! video/x-raw,width=640,height=480,format=YUY2 ! autovideosink<br class=""><br class="">*The following is the NOT working C function.*<br class=""><br class="">int startPipeline(const char *vs_location) {<br class=""><span class="Apple-tab-span" style="white-space:pre">  </span>GstElement *pipeline;<br class=""><span class="Apple-tab-span" style="white-space:pre">  </span>GstBus *bus;<br class=""><span class="Apple-tab-span" style="white-space:pre">   </span>guint bus_watch_id;<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">       </span>gst_init(NULL, NULL);<br class=""><span class="Apple-tab-span" style="white-space:pre">  </span>pipeline = gst_pipeline_new("my_pipeline");<br class=""><span class="Apple-tab-span" style="white-space:pre">  </span>bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));<br class=""><span class="Apple-tab-span" style="white-space:pre">    </span>bus_watch_id = gst_bus_add_watch(bus, bus_callback, NULL);<br class=""><span class="Apple-tab-span" style="white-space:pre">     </span>gst_object_unref(bus);<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">    </span>GstElement *source, *dec_bin, *v_conv, *sink;<br class=""><span class="Apple-tab-span" style="white-space:pre">  </span>source = gst_element_factory_make("rtspsrc", "source");<br class=""><span class="Apple-tab-span" style="white-space:pre">    </span>dec_bin = gst_element_factory_make("decodebin", "dec_bin");<br class=""><span class="Apple-tab-span" style="white-space:pre">        </span>v_conv = gst_element_factory_make("videoconvert", "v_con");<br class=""><span class="Apple-tab-span" style="white-space:pre">        </span>sink = gst_element_factory_make("autovideosink", "sink");<br class=""><span class="Apple-tab-span" style="white-space:pre">  </span>gst_bin_add_many(GST_BIN(pipeline), source, dec_bin, v_conv, sink, NULL);<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre"> </span>// Set element properties.<br class=""><span class="Apple-tab-span" style="white-space:pre">     </span>g_object_set(G_OBJECT(source), "port-range", "5000-5100", NULL);<br class=""><span class="Apple-tab-span" style="white-space:pre">   </span>g_object_set(G_OBJECT(source), "location", vs_location, NULL);<br class=""><span class="Apple-tab-span" style="white-space:pre">       </span>g_object_set(G_OBJECT(source), "latency", 0, NULL);<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">     </span>gst_element_link_many(source, dec_bin, v_conv, NULL);<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">     </span>GstCaps *caps;<br class=""><span class="Apple-tab-span" style="white-space:pre"> </span>caps = gst_caps_new_simple(<br class=""><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>"video/x-raw",<br class=""><span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>"width", G_TYPE_INT, 640,<br class=""><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>"height", G_TYPE_INT, 480,<br class=""><span class="Apple-tab-span" style="white-space:pre">   </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>"format", G_TYPE_STRING, "YUY2",<br class=""><span class="Apple-tab-span" style="white-space:pre">   </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>NULL);<br class=""><span class="Apple-tab-span" style="white-space:pre"> </span>gst_element_link_filtered(v_conv, sink, caps);<br class=""><span class="Apple-tab-span" style="white-space:pre"> </span>gst_caps_unref(caps);<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">     </span>gst_element_set_state(pipeline, GST_STATE_PLAYING);<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">       </span>loop = g_main_loop_new(NULL, FALSE);<br class=""><span class="Apple-tab-span" style="white-space:pre">   </span>g_main_loop_run(loop);<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">    </span>// Clean up.<br class=""><span class="Apple-tab-span" style="white-space:pre">   </span>gst_element_set_state(pipeline, GST_STATE_NULL);<br class=""><span class="Apple-tab-span" style="white-space:pre">       </span>gst_object_unref(pipeline);<br class=""><span class="Apple-tab-span" style="white-space:pre">    </span>g_source_remove(bus_watch_id);<br class=""><span class="Apple-tab-span" style="white-space:pre"> </span>g_main_loop_unref(loop);<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">  </span>return 0;<br class="">}<br class=""><br class="">*Then the Errors are here.*<br class=""><br class="">0:00:00.442295071 16407 0x7f007c01e940 FIXME                default<br class="">gstutils.c:3825:gst_pad_create_stream_id_internal:<fakesrc0:src> Creating<br class="">random stream-id, consider implementing a deterministic way of creating a<br class="">stream-id<br class="">0:00:00.455584401 16407 0x7f006c0025e0 FIXME        rtpjitterbuffer<br class="">gstrtpjitterbuffer.c:1395:gst_jitter_buffer_sink_parse_caps:<rtpjitterbuffer0><br class="">Unsupported timestamp reference clock<br class="">0:00:00.455616947 16407 0x7f006c0025e0 FIXME        rtpjitterbuffer<br class="">gstrtpjitterbuffer.c:1403:gst_jitter_buffer_sink_parse_caps:<rtpjitterbuffer0><br class="">Unsupported media clock<br class="">0:00:00.457236636 16407 0x7f006c0025e0 WARN                 basesrc<br class="">gstbasesrc.c:2947:gst_base_src_loop:<udpsrc0> error: Internal data flow<br class="">error.<br class="">0:00:00.457268553 16407 0x7f006c0025e0 WARN                 basesrc<br class="">gstbasesrc.c:2947:gst_base_src_loop:<udpsrc0> error: streaming task paused,<br class="">reason not-linked (-1)<br class="">Error: Internal data flow error.<br class="">Debug: gstbasesrc.c(2947): gst_base_src_loop ():<br class="">/GstPipeline:my_pipeline/GstRTSPSrc:source/GstUDPSrc:udpsrc0:<br class="">streaming task paused, reason not-linked (-1)<br class="">0:00:00.458046376 16407      0x10af5e0 WARN                 rtspsrc<br class="">gstrtspsrc.c:5520:gst_rtspsrc_try_send:<source> receive interrupted<br class="">0:00:00.458083322 16407      0x10af5e0 WARN                 rtspsrc<br class="">gstrtspsrc.c:7546:gst_rtspsrc_pause:<source> PAUSE interrupted<br class=""><br class=""><br class=""><br class=""><br class=""><br class="">--<br class="">View this message in context: <a href="http://gstreamer-devel.966125.n4.nabble.com/Simple-RTSP-Pipeline-Works-with-gst-launch-But-Not-with-API-tp4678108.html" class="">http://gstreamer-devel.966125.n4.nabble.com/Simple-RTSP-Pipeline-Works-with-gst-launch-But-Not-with-API-tp4678108.html</a><br class="">Sent from the GStreamer-devel mailing list archive at <a href="http://nabble.com" class="">Nabble.com</a>.<br class="">_______________________________________________<br class="">gstreamer-devel mailing list<br class=""><a href="mailto:gstreamer-devel@lists.freedesktop.org" class="">gstreamer-devel@lists.freedesktop.org</a><br class="">https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel<br class=""></div></div></blockquote></div><br class=""></div></body></html>