如何处理一个RTPBIN中的一个或多个音频流?

时间:2012-02-03 14:35:38

标签: java gstreamer

我有一个客户端使用gstreamer发送4个音频流,如下所示:

gst-launch -v audiotestsrc freq=440 ! audioconvert ! audioresample ! mulawenc ! rtppcmupay ! udpsink host=192.168.0.91 port=5000

除了给定的频率外,其他3个流是相同的。

在接收方,我有

gst-launch udpsrc caps=\"application/x-rtp, media=audio \" port=5000 ! rtppcmudepay ! mulawdec ! liveadder name=mix ! libvisual_lv_scope ! ffmpegcolorspace ! 'video/x-raw-yuv, framerate=25/1 ,width=1024 ,height=786' ! xvimagesink gstrtpbin ! mix.

混合音频流并显示它们。到目前为止一切都很好。

我需要的是,可以从接收器端的RTPBIN过滤掉一个或多个音频流。 我相信这可以通过每个客户的SSRC和IP完成,但我不知道如何。

提前很多!!

1 个答案:

答案 0 :(得分:0)

我自己找到了答案。

GStreamers RTPBIN有一个信号NEW_PAD_ADDED,新的pad作为参数。您可以订阅该信号,然后将您的下一个元素接收器连接到新添加的源板,如下所示(java):

rtpbin.connect(new Element.PAD_ADDED() {            
@Override
    public void padAdded(Element element, Pad pad) {    

    PadLinkReturn linkOk;
    linkOk = pad.link(someElement.getStaticPad("sink"));
    System.out.println(linkOk);

    }
});

其中someElement是管道中的下一个元素。 LinkOk打印出链接的状态以及它可能失败的原因。检查this以获取参考