hello everyone,
This is my first post in the GStreamer-devel Forum, so first of all I would like to thank everybody for the good work on this open source framework.
I'm developing an application for an audio-conference on a LAN, the server should receive different rtp audio streams and mix them together. this is my pipeline:
udpsrc->gstrtpbin->rtpdepay1->decoder1->audioconvert1->adder->audiosink
->rtpdepay2->decoder2->audioconvert2 ->
->rtpdepayN->decoderN->audioconvertN->
In my program there is a callback that is called when a new pad has been created in the gstrtpbin. Than I create and connect to the adder the rtpdepay, the decoder and the audioconvert. The problem is that when I use the adder, if an rtp streams stops, the adder doesn't mix the other signals. Then is called the callback for the pad-removed on the gstrtpbin for timeout of the rtp stream. In this callback I disconnect and remove the elements connected to the adder and the stream restarts from the point in wich has stopped. On the other hand if I use the liveadder this problem doesn't exist, but liveadder seems to have a bug with the memory (
http://gstreamer-devel.966125.n4.nabble.com/Memory-leak-in-liveadder-td3418775.html). The pad of the gstrtpbin is removed after a rtp timeout of more then 20 seconds, if I use also the rtcp the timeout is shorter but not enough.
So how can I solve this problem? Is there any way to control if there is data in the input of the adder? In this case I can create a callback which checks the buffers every second and if a buffer of the adder is empty I can remove the elements of that stream, could this be a solution? what do you think?
I have looked for other topics but I can't find the solution, any help or any other idea is appreciated.
Thanks in advance,
Stefano