【问题标题】:Obtaining Clients List (Active Clients) for a multicasting daemon in C/C++ (either Gstreamer API or C sockets)获取 C/C++ 中的多播守护进程的客户端列表(活动客户端)(Gstreamer API 或 C 套接字)
【发布时间】:2013-02-08 22:56:53
【问题描述】:

操作系统:LINUX(Redhat Enterprise 和 Ubuntu LTS)

我目前正在使用 Gstreamer Pipeline 将视频数据多播到各种客户端。我的管道如下所示。 rtspsrc location=rtsp://<ip>:<port>/<location>.sdp latency=0 ! udpsink host=225.1.1.1 auto-multicast=true port=5678 sync=false async=false 。可以看到我有一个多播组 225.1.1.1 和端口 5678。鉴于此信息,是否可以通过(1)Gstreamer API(2)C/C++ 中的 Berkeley Unix 套接字获取当前连接/活动客户端(IP 地址和其他属性)的列表(如果有)?

将其视为一个小型嗅探工具(不像 tshark、ngrep、pcap 等那样复杂)。我可能可以将 bash/Python 脚本和 tshark 与一些过滤器结合使用。但如果可能的话,我更喜欢 C C++ 代码(非 root 执行会很棒!)。

【问题讨论】:

  • 由于 UDP 是无状态/无连接的,因此没有活动的连接确认。因此,似乎必须使用基于 TCP 的机制。

标签: c++ c sockets gstreamer multicast


【解决方案1】:

在典型的RTSP 流式处理方案中,客户端将在PLAY 之前调用SETUP 命令,其中数据类型和客户端端口可用。 SETUP 通常在收到 DESCRIBE 响应后调用,即客户端知道源的属性并继续设置连接。因此,SETUP 可能是了解更多客户信息的好地方。

【讨论】:

  • 记住情况是上面的管道是一个多播广播器。在源头,它连接到单个流。在此示例中,src 结束流输入是 RTSP,但我可以将其替换为 MJPEG 流。多播发生在此管道的接收端(不是 src)。因此 rtsp 特定的相关解决方案是徒劳的,因为它不是通用的,可能不适用于 mjpeg 源。无论如何,这个解决方案似乎与上述问题无关。
  • 对于任何数据传输,listen 对传入连接的了解会不会更有帮助?
  • 我将如何将其应用于我的案例? gstreamer 管道代码中的套接字文件描述符信息呢?
  • @Ganesh 这是多播。没有listen(),也没有传入的连接。
  • @EJP 谢谢,你是对的。连接将结束 UDPSOCK_DGRAM
【解决方案2】:

GStreamer Pipeline API/协议可能会提供一种方式:UDP 多播本身当然不会。你所能知道的只是是否有任何客户端,你必须编写一些原始套接字代码来做到这一点(IGMP 协议)。

【讨论】:

    猜你喜欢
    • 2015-07-02
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 2016-01-01
    相关资源
    最近更新 更多