<DIV>Hi all,<BR>&nbsp; I want to make my simple palyer with gstreamer plugin,<BR>the test script is :<BR>gst-launch-0.10 filesrc location=testmediafile ! *demux name=demux d.! queue !*decoded ! audioconvert!.... d. !queue !*decodec ! ffmpegcolorsapce....<BR>(the way above can work properly)</DIV>
<DIV>&nbsp;I tried to find some example on the subject,but the document on the gstreamer.com do little help with me for this case,<BR>I have tried to do that as the following:</DIV>
<DIV>main piple :<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |--a_queue ---*decodec--videooutbin <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filesrc--*demuxer-|<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |--v_queue ---*decodec--audiooutbin<BR>audio out process :<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; construct a bin,which contains:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; audioconvert--...--audiosink<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; constrcut a ghost pad for audio out bin<BR>video out process :<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; construct a bin,which contains:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ffmepgcolorsapce--...--videosink<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; constrcut a ghost pad for video out bin</DIV>
<DIV>link each element<BR>&nbsp; .........</DIV>
<DIV>and my piple is :</DIV>
<DIV>int build_pipeline(gchar *location)<BR>{<BR>&nbsp; GstElement *filesrc;<BR>&nbsp; GstElement *a_dec,*a_conv,*audiosink,*a_resample,*a_queue;<BR>&nbsp; GstStateChangeReturn ret;<BR>&nbsp; GstPad *audiopad,*queuesinkpad,*queuesrcpad;<BR>&nbsp; <BR>&nbsp; g_print("vesion 20070907\n");<BR>&nbsp; sleep(2);</DIV>
<DIV>&nbsp; // create a new pipeline to hold the elements <BR>&nbsp; pipeline = gst_pipeline_new ("pipe");</DIV>
<DIV>&nbsp;// create file source element<BR>&nbsp;filesrc = gst_element_factory_make ("filesrc", "source");<BR>&nbsp; if (!filesrc )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; g_print ("source element could not be created\n");<BR>&nbsp; return -1;<BR>&nbsp; }<BR>&nbsp;g_object_set (G_OBJECT (filesrc), "location", location, NULL);<BR>&nbsp; gst_bin_add (GST_BIN (pipeline), filesrc);</DIV>
<DIV>&nbsp; bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));<BR>&nbsp; gst_bus_add_watch (bus, bus_call, loop);<BR>&nbsp; gst_object_unref (bus);</DIV>
<DIV>// create ts demux element<BR>&nbsp;ts_demux = gst_element_factory_make ("flutsdemux", "ts_demux");<BR>&nbsp;if (!ts_demux )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; g_print ("ts_demux element could not be created\n");<BR>&nbsp; return -1;<BR>&nbsp; }&nbsp; <BR>&nbsp; gst_bin_add (GST_BIN (pipeline), ts_demux);</DIV>
<DIV>&nbsp;gst_element_link (filesrc, ts_demux);<BR>&nbsp;<BR>//audio process....<BR>//create a queue bettwen demuxer and decoder, link ts_demux with queue<BR>&nbsp;a_queue = gst_element_factory_make ("queue", "a_queue");<BR>&nbsp;if (!a_queue )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_print ("a_queue element could not be created\n");<BR>&nbsp; return -1;<BR>&nbsp; }</DIV>
<DIV>&nbsp;gst_bin_add (GST_BIN (pipeline), a_queue);<BR>&nbsp;gst_element_set_state (a_queue, GST_STATE_READY);<BR>&nbsp;queuesinkpad = gst_element_get_pad (a_queue, "sink");<BR>&nbsp;queuesrcpad = gst_element_get_pad (a_queue, "src");</DIV>
<DIV>&nbsp;gst_pad_link (gst_element_get_pad (ts_demux, "audio_%02d"), queuesinkpad);</DIV>
<DIV>&nbsp;</DIV>
<DIV>//create audio decoder and link queue with a_dec<BR>&nbsp; a_dec = gst_element_factory_make ("flump3dec", "a_dec");<BR>&nbsp;gst_bin_add (GST_BIN (pipeline), a_dec);<BR>&nbsp;gst_pad_link (queuesrcpad,gst_element_get_pad (a_dec, "sink") );</DIV>
<DIV>&nbsp;</DIV>
<DIV>//create audio out bin<BR>&nbsp;&nbsp; audio=gst_bin_new ("audio");<BR>&nbsp;&nbsp; a_conv = gst_element_factory_make ("audioconvert", "a_conv");<BR>&nbsp;&nbsp; a_resample=gst_element_factory_make ("audioresample", "a_resample");<BR>&nbsp;&nbsp; audiosink = gst_element_factory_make ("alsasink", "audiosink");<BR>&nbsp;&nbsp; if ( !a_conv || !a_resample || !audiosink) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_print ("One element could not be created\n");<BR>&nbsp;&nbsp; return -1;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp; gst_bin_add_many (GST_BIN (audio), a_conv,a_resample,audiosink,NULL);<BR>&nbsp;&nbsp; gst_element_link_many (a_conv,a_resample,audiosink,NULL);<BR>&nbsp;<BR>&nbsp;//create ghost pad <BR>&nbsp;&nbsp; audiopad = gst_element_get_pad (a_conv, "sink");<BR>&nbsp;&nbsp; gst_element_add_pad (audio,gst_ghost_pad_new ("sink", audiopad));<BR>&nbsp;&nbsp; gst_bin_add (GST_BIN (pipeline), audio);</DIV>
<DIV><BR>&nbsp; //link a_dec with audio out bin<BR>&nbsp;gst_pad_link (gst_element_get_pad (a_dec, "src"),audiopad );<BR>&nbsp;gst_object_unref (audiopad);<BR>&nbsp; <BR>&nbsp;&nbsp; ret = gst_element_set_state (audio, GST_STATE_PLAYING);<BR>&nbsp;&nbsp; if (ret != GST_STATE_CHANGE_SUCCESS)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_printf("\nset audio out state : change state Expection!\n");</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>//video process.......<BR>//....<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING);<BR>&nbsp; if (ret != GST_STATE_CHANGE_SUCCESS)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_printf("\nset pipeline bin state : change state Expection!\n");<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp; return 0;<BR>}</DIV>
<DIV>&nbsp;</DIV>
<DIV>but when excuting gst_element_set_state to GST_STATE_PLAYING,the final state is GST_STATE_CHANGE_ASYNC....</DIV>
<DIV>I don't know how to process it?</DIV>
<DIV>maybe there is some problem with the mianframe of my program ? </DIV>
<DIV>can anybody help me or give me some related example? </DIV>
<DIV>Thank you!</DIV>
<DIV><BR>Volter<BR></DIV>
<DIV>&nbsp;</DIV><br><!-- footer --><br> 
<hr>
<font style="font-size:12px;line-height:15px;">独有“账号保险柜”保护密码,</font><a style="font-size:12px;line-height:15px; color:blue; text-decoration:underline;" href="http://adclient.163.com/event.ng/Type=click&FlightID=94603&AdID=96090&TargetID=1200&Values=31,43,51,60,72,85,91,100,110,312,332,499,587,701,702,733,734&Redirect=http://www.rising.com.cn/2008/trial/index.htm">“瑞星08版”开始免费</a>