Full dublex rtp stream
Krzysztof Konopko
krzysztof.konopko at youview.com
Wed Dec 5 04:49:06 PST 2012
Hi Tommi,
Try saving yourself effort and replace everything between lines
# incoming audio stream elements
and
def go():
with a single call parse_bin_from_description() and see if this works.
Kris
On 05/12/12 12:39, tommi roth wrote:
> Hi All,
>
> I 'm struggling with full dublex rtp problem.
>
> When I launch two separate pipeline (in same host) like below everything
> works just fine ( I can hear both sounds wave 5 and wave 1 and with
> wireshark I can see that rtp packets flows nicely in both directions):
>
> Client A
> ------------
> gst-launch-0.10 -v gstrtpbin name=rtpbin udpsrc
> caps="application/x-rtp,media=(string)audio,clock-rate=(int)16000,encoding-name=(string)SPEEX"
> port=5000 ! rtpbin.recv_rtp_sink_0 audiotestsrc wave=5 ! audioconvert !
> audioresample ! audio/x-raw-int,rate=16000 ! queue leaky=1 ! speexenc
> bitrate=16000 ! rtpspeexpay ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0
> ! udpsink port=5002 sync=false async=false rtpbin. ! rtpspeexdepay ! queue
> leaky=1 ! speexdec ! audioconvert ! audioresample ! autoaudiosink
>
>
> Client B
> ------------
> gst-launch-0.10 -v gstrtpbin name=rtpbin udpsrc
> caps="application/x-rtp,media=(string)audio,clock-rate=(int)16000,encoding-name=(string)SPEEX"
> port=5002 ! rtpbin.recv_rtp_sink_0 audiotestsrc wave=1 ! audioconvert !
> audioresample ! audio/x-raw-int,rate=16000 ! queue leaky=1 ! speexenc
> bitrate=16000 ! rtpspeexpay ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0
> ! udpsink port=5000 sync=false async=false rtpbin. ! rtpspeexdepay ! queue
> leaky=1 ! speexdec ! audioconvert ! audioresample ! autoaudiosink
>
>
> But some reason version coded with Python doesn't work so well. I can hear
> only audio sent by one client not both.
>
> Any idea what could be wrong in this Python code? Why both sounds cannot be
> heard?
>
> client-b code is exactly same except port numbers and in 'def go()' line
> 'print autoaudiosink.set_locked_state(gst.STATE_PLAYING)' is not commented
> out (i don't know why it have to be like this?).
>
>
> #!/usr/bin/env python
> # -=- encoding: utf-8 -=-
>
> import gobject, pygst
> pygst.require("0.10")
> import gst
> import gobject
> import sys
> import os
> import readline
>
> # To the laptop that will catch everything
> REMOTE_HOST = 'localhost'
>
> caps =
> 'application/x-rtp,media=(string)audio,clock-rate=(int)16000,encoding-name=(string)SPEEX'
>
> mainloop = gobject.MainLoop()
> pipeline = gst.Pipeline('client-a')
> bus = pipeline.get_bus()
>
> # incoming audio stream elements
> rtpspeexdepay = gst.element_factory_make('rtpspeexdepay')
> speexdec = gst.element_factory_make('speexdec')
> audioconvert1 = gst.element_factory_make('audioconvert')
> audioconvert2 = gst.element_factory_make('audioconvert')
> audioresample = gst.element_factory_make('audioresample')
> autoaudiosink = gst.element_factory_make('autoaudiosink')
> queue1 = gst.element_factory_make('queue')
> #queue1.set_property('leaky', 1)
>
> # outgoing audio stream elements
> audiotestsrc = gst.element_factory_make('audiotestsrc')
> audiotestsrc.set_property('wave', 5)
> audioconvert = gst.element_factory_make('audioconvert')
> audioresample = gst.element_factory_make('audioresample')
> speexenc = gst.element_factory_make('speexenc')
> speexenc.set_property('bitrate', 16000)
> rtpspeexpay = gst.element_factory_make('rtpspeexpay')
> queue2 = gst.element_factory_make('queue')
> #queue2.set_property('leaky', 1)
>
> # incoming rtp
> udpsrc_rtpin = gst.element_factory_make('udpsrc', "udpsrc1")
> udpsrc_rtpin.set_property('port', 5000)
> udpsrc_caps = gst.caps_from_string(caps)
> udpsrc_rtpin.set_property('caps', udpsrc_caps)
>
> # outgoing rtp
> udpsink_rtpout = gst.element_factory_make("udpsink", "udpsink0")
> udpsink_rtpout.set_property('host', REMOTE_HOST)
> udpsink_rtpout.set_property('port', 5002)
> udpsink_rtpout.set_property('sync', 'false')
> udpsink_rtpout.set_property('async', 'false')
>
> # incoming and outgoing rtcp
> #udpsink_rtcpout = gst.element_factory_make("udpsink", "udpsink1")
> #udpsink_rtcpout.set_property('host', REMOTE_HOST)
> #udpsink_rtcpout.set_property('port', 5003)
> #udpsink_rtcpout.set_property('sync', 'false')
> #udpsink_rtcpout.set_property('async', 'false')
> #udpsrc_rtcpin = gst.element_factory_make("udpsrc", "udpsrc0")
> #udpsrc_rtcpin.set_property('port', 5007)
>
> rtpbin = gst.element_factory_make('gstrtpbin', 'gstrtpbin')
>
> # Add elements
> pipeline.add(rtpbin, udpsrc_rtpin, rtpspeexdepay, speexdec, audioconvert1,
> queue1, autoaudiosink, audiotestsrc, audioconvert2, audioresample, queue2,
> speexenc, rtpspeexpay, udpsink_rtpout)
>
> # Link them
> udpsrc_rtpin.link_pads('src', rtpbin, 'recv_rtp_sink_0')
>
> def rtpbin_pad_added(obj, pad):
> print "PAD ADDED"
> print " obj = ", obj
> print " pad = ", pad
> print " pad capabilities = ", str(pad.get_property('caps'))
> rtpbin.link(rtpspeexdepay)
>
> rtpspeexdepay.link(queue1)
> queue1.link(speexdec)
> speexdec.link(audioconvert1)
> audioconvert1.link(autoaudiosink)
>
> audiotestsrc.link(audioconvert2)
> audioconvert2.link(audioresample)
> audio_caps = gst.Caps("audio/x-raw-int,rate=16000")
> audioresample.link_filtered(queue2, audio_caps)
> queue2.link(speexenc)
> speexenc.link(rtpspeexpay)
>
> rtpspeexpay.link_pads('src', rtpbin, 'send_rtp_sink_0')
> rtpbin.link_pads('send_rtp_src_0', udpsink_rtpout, 'sink')
>
> rtpbin.connect('pad-added', rtpbin_pad_added)
>
> def go():
> #print "Setting locked state for autovideosink and udpsink"
> #print udpsink_rtcpout.set_locked_state(gst.STATE_PLAYING)
> #print autoaudiosink.set_locked_state(gst.STATE_PLAYING)
> print "Setting pipeline to PLAYING"
> print pipeline.set_state(gst.STATE_PLAYING)
> print "Waiting pipeline to settle"
> print pipeline.get_state()
> #print "Final caps writte to", WRITE_AUDIO_CAPS
> #open(WRITE_AUDIO_CAPS,
> 'w').write(str(udpsink_rtpout.get_pad('sink').get_property('caps')))
> print "audio stream caps = ",
> str(udpsink_rtpout.get_pad('sink').get_property('caps'))
> mainloop.run()
>
> go()
>
>
> Thanks in advance!
>
> Thanks & Regards,
> Tommi Roth
>
>
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
More information about the gstreamer-devel
mailing list