Can a bin have double static ghost sink pad?

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Can a bin have double static ghost sink pad?

Hecate_Eos
I want use gstrtpbin to transmit my auido & video and in order to looks simple and logical, so I packaged video & audio process into a bin. Looks like the below.

.---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|                                                                                                                                                                                |
| queue -> ffmpegcolorspace -> x264enc -> rtph264pay -> queue -> |-----------------.-> udpsink (for output video rtp data)       |
|                                                                                                 |                 | -> udpsink (for output video rtcp data)     |
|                                                                                                 |  gstrtpbin  | <-  udpsrc ( for input video rtcp data)       |
|                                                                                                 |                 | ->udpsink (for output audio rtp data)        |
|queue-> audioconvert -> faac -> rtpmp4apay           -> queue  ->    |                 | -> udpsink (for output audio rtcp data)     |
                                                                                                  | _________| <- udpsrc ( for input audio rtcp   data)      |
|.___________________________________________________________________________________________________  |
 
I create double ghost sink pad for this big bin. a bin named "sink_video", the other "sink_audio".
If add it in to a pipeline before the pipeline change state to running in the pipeline creating stage, I can get the result. It works well.
But, If I dynamicly add the big bin into the running pipeline, it does NOT work.
In my pipeline, I will link the big bin to double tee elements. tee0 --->>> (ghost pad)"sink_video".....
                                                                                       tee1 --->>> (ghost pad)"sink_audio"......
In order to link pads,I blocked the tee's sink pad.
After that, I link the double tees to the ghost pads.
******now I make the big bin running ********gst_element_set_state(transmit_bin, GST_STATE_PLAYING);
unblock the tee's sink pad.
In the recevieing end, I just can receive the video, no audio received. I am assure the receive end is ok.so the problem is the big bin.
I guess " gst_element_set_state(transmit_bin, GST_STATE_PLAYING)" does not make the whole bin's elements change into running state.So I get the bin's iterator, and make all the elements change into running state. Not very lucky, it can't work.
Does the bin can have double static ghost pads? And how to make them all into running or work?
Or, this is a bad solution? Can you give me some advice?
Thanks in advance! Sincerely!