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

时间:2018-07-31 18:11:23

标签: gstreamer ipv6 multicast rtp mpeg2-ts

我对该主题比较陌生,因此我的知识可能有一些根本的鸿沟,但是我试图使用GStreamer使用IPv6(在Windows 10上)将MPEG2-TS流发送到嵌入式设备。嵌入式设备通过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会出现以下错误:

  

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

1 个答案:

答案 0 :(得分:0)

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

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

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