在 C# 中使用特定网络接口和 VLC ActiveX 插件

Using specific network interface in C# with VLC ActiveX Plugin

我现在正在用 C# 编写 IPTV 程序。作为媒体引擎,我使用的是 VLC ActiveX 插件。数据通过 UDP 协议。

现在我运行进入了问题。 我有几个网络接口。例如,我有用于网络和互联网访问的本地连接,以及 VirtualBox 网络。 第一个连接的 IP 地址为 10.10.10.2,第二个连接为 192.168.1.2。 当我尝试加入多播组时,一些 IGMP 查询通过 VirtualBox 网络而不是本地连接。所以我没有收到多播流量。

我需要为我的应用程序选择特定的接口(局域网)。所以所有数据都将通过这个网络接口。 我在网上找到了一些答案,但不是专门针对我的问题。

这是我尝试使用的东西:

IPAddress localAddress = IPAddress.Parse("10.10.10.2");
IPEndPoint localEndPoint = new IPEndPoint(localAddress, 0);
Socket client = new Socket(localEndPoint.AddressFamily, SocketType.Raw, ProtocolType.Igmp);
client.Bind(localEndPoint);
axVLCPlugin21.playlist.add("udp://@239.1.9.2:1234", axVLCPlugin21, null);
axVLCPlugin21.playlist.play();

但它不起作用。有人可以帮帮我吗?

谢谢!

我终于做到了!我制作了一个套接字并使用我需要的网络接口绑定它。之后,我使用此套接字发送 IGMP 查询,然后通过所需的网络接口接收数据。

现在我正在使用这个代码:

        Socket mcastSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        IPAddress localAddress = IPAddress.Parse("10.10.10.2");
        IPEndPoint localEndPoint = new IPEndPoint(localAddress, 0);
        mcastSocket.Bind(localEndPoint);

        IPAddress mcastAddress = IPAddress.Parse("239.1.9.2");
        MulticastOption mcastOption = new MulticastOption(mcastAddress, localAddress);
        mcastSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, mcastOption);

        axVLCPlugin21.playlist.add("udp://@239.1.9.2:1234", axVLCPlugin21, null);
        axVLCPlugin21.playlist.play();