我对这个主题比较新,所以我的知识可能存在一些基本差距,但我正在尝试使用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:4
和ff1x::1:2:4
(其中x = 1,2,3),但是数据是通过我的计算机的主网络接口传输的(例如WiFi接口,这是使用Wireshark检查的)。
如果我尝试添加multicast-iface
选项,GStreamer会出现以下错误:
无法加入多播组:加入多播组时出错:请求的地址在其上下文中无效。
好的,所以在向各种邮件列表和论坛发布类似的问题之后,我了解到你不能以这种方式绑定到接口,此外,多播流量总是通过具有最低度量的接口进行路由。因此,实现我想要的唯一可能性是:
由于我无法对Windows机器相对于网络路由/指标进行任何永久性更改,因此我选择了第3个选项的修改版本,即在Linux上使用USB以太网适配器运行GStreamer的VirtualBox虚拟机设置为唯一的活动网络接口。