[gst-devel] please help me! Does I block the tee element wrong?
Tiago Katcipis
katcipis at inf.ufsc.br
Fri Aug 6 17:05:36 CEST 2010
Hi,
i don't know if this is your problem, but when having multiple udpsinks or
even one sink (audio/video) + a udpsink, if you don't set the async
propertie of the udpsink to false the pipeline will stay blocked on
prerroling.
hope this helps :-).
Best regards,
Tiago Katcipis
On Fri, Aug 6, 2010 at 9:55 AM, 刘兴民 <xflxmin17 at 163.com> wrote:
> Hi,All
>
> Now, I have a problem puzzled me several days. I want to transmit the video and audio to the other computer by 'gstrtpbin'.
> The pipeline, I used, as the following.
>
> diagram 1:
>
> +------+ +--------------------+ +------------+ +-------------+
>
> +----> |queue |--->|ffmpegcolorspace |--->| videoscale |--->|autovideosink|
>
> / +------+ +---------------------+ +------------+ +-------------+
> +----------------+ +---------+ /
>
> | |-----> | tee | |+---------------------------------------------------------------------------------------------------> will link for transmit video
>
> | | +---------+ \ | +----------------------------+
>
> | | \ +---->| |
>
> | | | |
>
> | uridecodebin | | transmit bin |
>
> | | | |
>
> | | /+----> | |
>
> | | / | +----------------------------+
>
> | | +----------+ |+------------------------------------------------------------------------------------------------------>will link for transmit audio
> | |----->| tee |
> +--------------+ +----------+
> \
>
> \ +------+ +-------------+ +-------------+
>
> +---->|queue |--->|audioconvert |--->|autoaudiosink|
>
> +------+ +-------------+ +-------------+
>
> diagram 2 (transmit bin):
>
> +------------------------------------------------------------------------------------------------------------------------------------------------------------+
>
> | |
>
> | +------+ +----------------+ +--------+ +----------+ +-----+ +---------+ +-------+ |
>
> | |queue |--->|ffmpegcolorspace|-->|x264enc |-->|rtph264pay|-->|queue|--+ | | -->|udpsink| rtp for video |
>
> | +------+ +----------------+ +--------+ +----------+ +-----+ \ | | +-------+ |
>
> |--+ / \ +--> |gstrtpbin| +-------+ |
>
> | | / | | --> |udpsink| rtcp for video|
>
> | |<-+ ghost pad "video_sink" +------+ | | +-------+ |
>
> | | rtcp for video |udpsrc|---------------> | | |
>
> |--+ +------+ | | |
>
> | | | |
>
> |--+ +------+ | | +-------+ |
>
> | | rtcp for audio |udpsrc|---------------> | |--->|udpsink| rtp for audio |
>
> | |<-+ ghost pad "audio_sink" +------+ | | +-------+ |
>
> | | \ +------> | | +-------+ |
>
> |--+ \ / | |--->|udpsink| rtcp for audio |
>
> | +-----+ +------------+ +----+ +--------------+ +-----+ / | | +-------+ |
>
> | |queue|-->|audioconvert|-->|faac|-->|rtpmp4apay |-->|queue|-----------+ +----------+ |
>
> | +-----+ +------------+ +----+ +---------------+ +-----+ |
>
> | |
>
> +--------------------------------------------------------------------------------------------------------------------------------------------------------------+
>
>
>
> 1)I create a pipeline to playback the media for previewing. As diagram 1. But it hasn't contain the transmit bin.
> 2)I hang the transmit bin to the pipeline which is in the running state.
>
> In order to add the transmit bin dynamicly, I do several steps.
> 1.add transmit bin to the running pipeline.
> 2.block video tee element's sink pad, and request a src pad.
> 3.block audio tee element's sink pad, and request a src pad.
> 4.link video tee's source pad to transmit bin's "video_sink" ghost pad.
> 5.link audio tee's source pad to transmit bin's "audio_sink" ghost pad.
> 6.change the transmit bin's state to running.
> 7.unblock the double tee's sink pad.
>
>
> In order to receive the media in the recevier end, I need the video and audio's caps.So I set up a signal handle to the 'udpsink'.
>
> I can get the video's caps correctly, but I can't get the audio's caps. Note that, the pipeline can playback the video and audio very well.
>
>
> I guess the probem may be in the blocking pad section. I change the blocking order, sometimes I can get the audio caps, but the video caps not .
>
>
> if( !gst_pad_set_blocked(tee0_pad_sink, TRUE) && !gst_pad_set_blocked(tee1_pad_sink, TRUE) )
> {
> g_printerr("pad block failed");
> }
>
> if( GST_PAD_LINK_FAILED( gst_pad_link(tee0_pad_src1, transmit_bin_video_sink) ) &&
>
> GST_PAD_LINK_FAILED( gst_pad_link(tee1_pad_src1, transmit_bin_audio_sink) ) )
> {
>
> g_printerr("tee1 pad link transmit_bin's video/audio sink failed\n");
> }
> gst_element_set_state(transmit_bin, GST_STATE_PLAYING);
>
>
> if( !gst_pad_set_blocked(tee0_pad_sink, FALSE) && !gst_pad_set_blocked(tee1_pad_sink, FALSE) )
> {
> g_printerr("pad unblock failed");
> }
>
>
> Please help me. Thanks in advance.
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by
>
> Make an app they can't live without
> Enter the BlackBerry Developer Challenge
> http://p.sf.net/sfu/RIM-dev2dev
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>
--
http://www.getgnulinux.org/windows
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20100806/4dbb8618/attachment.htm>
More information about the gstreamer-devel
mailing list