GStreamer 在特定网络接口上使用 IPv6 进行多播

GStreamer multicast using IPv6 over a specific network interface

我对这个话题比较陌生,所以我的知识可能存在一些根本性的差距,但我正在尝试使用 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 给出以下错误:

Could not join multicast group: Error joining multicast group: The requested address is not valid in its context.

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

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

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