rtpbin how to add and play items

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

rtpbin how to add and play items

Samuel Mathieson
Hello,

I am trying to link a depayer and a decoder to an rtpbin when a pad is added (new stream).
It does not seem to work, no errors, just does not play.

The prototype pipeline is:
gst-launch-1.0 -v audiomixer name=mix ! audioconvert ! alsasink rtpbin name=bin udpsrc address=ipHere port=portHere caps="application/x-rtp,media=audio,clock-rate=8000" ! bin.recv_rtp_sink_0 bin. ! rtppcmudepay ! mulawdec ! mix.

This works without issue, however after one stream it no longer works. I can keep adding "bin. ! rtppcmudepay ! mulawdec ! mix." a thousand times, but the real solution is for the elements to be created and destroyed as needed.

I have not gotten round to handling the destroyed part at all yet. Do I need to? Or will gstreamer delete elements as they are no longer used?

Any help would be appreciated.

Thanks.

Here is the relevant code:
    def request_decoder(self, element, pad):
        depay = Gst.ElementFactory.make("rtppcmudepay")
        decode = Gst.ElementFactory.make("mulawdec")
        self.pipeline.add(depay, decode)
        pad.link(depay.get_static_pad("sink"))
        depay.link(decode)
        decode.link(self.mixpad)

    def startAudio(self):
        logger.info("setting up audio reception @ {}:{}".format(multicast, port))
        pipestring = "audiomixer name=mix ! audioconvert ! alsasink rtpbin name=bin udpsrc name=src ! bin.recv_rtp_sink_0"
        logger.info("PipeLine: "+pipestring)
        self.pipeline = Gst.parse_launch(pipestring)
        self.srcpad = self.pipeline.get_by_name('src')
        self.binpad = self.pipeline.get_by_name('bin')
        self.mixpad = self.pipeline.get_by_name('mix')
        self.srcpad.props.address = multicast
        self.srcpad.props.port = port
        self.srcpad.props.caps = Gst.Caps.from_string('application/x-rtp,media=audio,clock-rate=8000')
        self.binpad.connect('pad_added', self.request_decoder)
        ret = self.pipeline.set_state(Gst.State.PLAYING)
        if ret == Gst.StateChangeReturn.FAILURE:
            raise Exception("Unable to start udp source!")
        logger.info("ready to receive audio")
        bus = self.pipeline.get_bus()
        bus.add_signal_watch()
        terminate = False
        while True:
            try:
                msg = bus.timed_pop_filtered(
                    0.5 * Gst.SECOND,
                    Gst.MessageType.ERROR | Gst.MessageType.EOS)
                if msg:
                    terminate = True
            except KeyboardInterrupt:
                terminate = True
            if terminate:
                break
        self.pipeline.set_state(Gst.State.NULL)

Este correo electrónico y cualquier archivo transmitido adjunto son confidenciales y destinados exclusivamente para el uso de la persona o entidad a quien se dirigen. Si usted ha recibido este mensaje por error por favor notifique al administrador del sistema.
Aviso de PrivacidadLa empresa Mathieson Electrónica en Comunicación S.A. De C.V. con domicilio ubicado en, Geranios #76, Jardines de San Mateo, Naucalpan, Estado de Mexico, C.P. 53240. utilizara sus datos personales recabados con los siguientes fines: Fines laborales. para mayor información sobre el tratamiento de sus datos personales usted puede ingresar a la siguiente página web: http://privacy.mathiesonelco.com/
Mathieson Electronica en Comunicación S.A. de C.V.

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel