java - 如何寻址一个 RTPBIN 中的一个或多个音频流?

标签 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 来完成,但我不知道如何实现。

提前谢谢大家!!

最佳答案

我自己找到了答案。

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供引用

关于java - 如何寻址一个 RTPBIN 中的一个或多个音频流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9130308/

相关文章:

java - 限制 App Engine 访问自定义域上的 G Suite 帐户

java - 充电困惑 : Google Code Jam [2014]

java - XML Android 与 Html 5 性能和关注点?

gstreamer - gstreamer 中 Action 信号与查询的目的是什么?

rust - gstreamer rust 为 x264enc 上设置的比特率获取人类可读的输出

java - 测试 CompletableFuture.allOf。加入需要永远

java - 如何将 ResultSet 转换为 Object[] 并检索数据

java - 如何在 Windows 7 中通过 gstreamer-java 查看 VC500 捕获设备中的视频

c - 如何将 AVFrame 转换为 GstBuffer?

c++ - 使用 gstreamer 时出现 Eclipse 无效参数错误