【问题标题】:GStreamer multicast using IPv6 over a specific network interface通过特定网络接口使用 IPv6 的 GStreamer 多播
【发布时间】:2019-01-08 05:13:29
【问题描述】:

我对这个主题相对较新,因此我的知识可能存在一些基本空白,但我正在尝试使用 GStreamer 将 MPEG2-TS 流发送到使用 IPv6 的嵌入式设备(在 Windows 10 上)。嵌入式设备通过 USB 以太网适配器连接到媒体转换器(RJ45 到 BroadR-Reach)。

如果我使用 IPv4 进行广播(例如 192.168.1.255),一切正常。我可以毫无问题地在设备上接收流。一个有效的示例命令:

gst-launch-1.0.exe -v filesrc location=d:/video.ts do-timestamp=false ! \ "video/mpegts, systemstream=(boolean)true, packetsize=(int)188" ! \ tsparse set-timestamps=true ! rtpmp2tpay mtu=1200 pt=127 ! \ udpsink host=192.168.1.255 port=5001

现在我需要通过多播使用 IPv6 执行此操作,但我不知道该怎么做!

假设嵌入式设备的IPv6地址为fe80::1:2:3,PC上以太网接口的IPv6地址为fe80::1:2:4。我将哪个地址用作多播?我已经尝试过ff0x::1:2:4ff1x::1:2:4(其中 x=1,2,3),但数据是通过我计算机的主网络接口传输的(例如 WiFi 接口,这是使用 Wireshark 检查的)。

如果我尝试添加multicast-iface 的选项,GStreamer 会给出以下错误:

无法加入多播组:加入多播组时出错: 请求的地址在其上下文中无效。

【问题讨论】:

    标签: gstreamer ipv6 multicast rtp mpeg2-ts


    【解决方案1】:

    好的,所以在向各种邮件列表和论坛发布类似问题后,我了解到您不能以这种方式绑定到接口,此外,多播流量始终通过具有最低指标的接口路由。因此,实现我想要的唯一可能性是:

    • 使用相关接口的指标
    • 为所需地址范围添加路由
    • 以某种方式强制来自 GStreamer 的所有流量通过所需的接口(例如 ForceBindIP)

    由于我无法对 Windows 机器相对于网络路由/指标进行任何永久性更改,我选择了第三个选项的修改版本,即使用 USB 在 Linux 上运行 GStreamer 的 VirtualBox 虚拟机- 以太网适配器设置为唯一的活动网络接口。

    【讨论】:

      猜你喜欢
      • 2018-04-15
      • 2019-11-18
      • 2011-04-17
      • 2020-06-11
      • 2018-12-24
      • 2019-02-14
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      相关资源
      最近更新 更多