通过特定网络接口使用IPv6的GStreamer多播

问题描述 投票:0回答:1

我对这个主题比较新,所以我的知识可能存在一些基本差距,但我正在尝试使用GStreamer将MPEG2-TS流发送到使用IPv6的嵌入式设备(在Windows 10上)。嵌入式设备通过USB以太网适配器连接到媒体转换器(RJ45-to-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个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.