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

Get info about whether gstreamer is recieving any packet

我的应用程序是在多播组中有一个音频流应用程序。它就像一键通收音机。当有人按下按钮时,音频就会传输。我正在使用 gstreamer 进行流式传输音频。有什么方法可以知道现在有没有人在说话

当有人按下通话按钮时,我需要通知他是否已经有人在通话。

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

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

假设一个多播组中有 4 个用户。

gstreamer 中是否有任何 api 可以让我获取这些信息

1) 是否有人在该组播组中进行流式传输?

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

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

希望对您有所帮助。

GStreamer 中没有任何内置内容可以让您 yes/no 回答是否有其他人正在广播。但是,可以让 gstreamer 在每次收到 udp 数据包时通知您的应用程序。您或许可以将这些信息用于您正在尝试做的事情。

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

这种方法的问题是它仍然不能保证其他人没有发送——只是你还没有从他们那里收到任何东西。 不可避免地,你最终会在某个时候穿过溪流,给你留下一大堆棉花糖 StayPuff 烂摊子。

我的建议是不要使用 udpsrc 和 udpsink。它们是玩具,除了最简单的用例之外什么都没有用。

相反,您自己发送和接收多播数据包,并在每个数据包上加上一点 header 说明它来自谁。当您收到数据包时,剥离 header 并使用 appsrc 将流推送到音频播放器。

如果你真的想从上到下一直使用 gstreamer,你需要创建一个自定义 muxer,在进入 udpsink 之前将用户信息添加到数据包中,以及一个可以 select 如果多人同时讲话,则为单个流。

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