获取有关gstreamer是否正在接收任何数据包的信息

时间:2015-01-20 05:13:03

标签: embedded-linux gstreamer

我的应用是在多播组中安装音频流应用程序。它就像一个按键通话无线电。当有人按下按钮时,音频会被传输。我正在使用gstreamer播放音频。有什么办法可以让我知道是否有人在说话。

当有人按下按钮说话时,我需要通知他已有别人在说话。

是否有任何gstreamer api知道或有任何其他方式来了解它。

编辑: 为了更好地理解我的问题,我将描述一个用例。

考虑多播组中有4个USERS。

  • USER1按下PTT按钮开始讲话
  • 此时如果有人说USER2按下PTT按钮我需要通知 USER1已经是USER2   说话(至少是别人在说话)。
  • 另外我需要通知USER1 USER2现在已按下PTT按钮。

gstreamer中是否有任何API可以获取这些信息

1)该组播组中是否有其他人正在流式传输?

2)检索有关流媒体用户的信息?

2 个答案:

答案 0 :(得分:2)

如果其他人正在播放,GStreamer中没有任何内容可以为您提供是/否答案。但是,每次获取udp数据包时,都可以让gstreamer通知您的应用程序。您可以将此信息用于您要执行的操作。

首先,在udpsrc之后直接放置一个发球台并将一个假发附在发球台上。然后将信号处理程序附加到伪接收器的切换信号,并将signal-handoffs属性设置为true。

这种方法的问题在于它仍然不能保证其他人不发送 - 只是你没有从他们那里收到任何东西。 不可思议的是,你会在某些时候越过溪流,留下一个巨大的棉花糖StayPuff混乱。

我的建议是不要使用udpsrc和udpsink。除了最简单的使用案例外,它们对玩具不利。

相反,自己发送和接收多播数据包以及每个数据包上的一个小标题,说明它来自哪个。当您收到数据包时,请删除标题并使用appsrc将流推送到音频播放器。

如果你真的想从上到下一直使用gstreamer,你需要创建一个自定义多路复用器,在进入udpsink之前将用户信息添加到数据包上,以及一个可以选择单个流的自定义多路分离器不止一个人在同一时间说话。

制作自定义元素是可行的,但如果您之前从未使用过glib gobjects,那么可能会遇到很多麻烦。

答案 1 :(得分:0)

而不是使用gstreamer通知,为什么不使用按钮按下计数来检查是否有人在说话?

希望有所帮助。