我现在正在使用C#进行IPTV计划。作为媒体引擎,我正在使用VLC ActiveX插件。数据通过UDP协议。
现在我遇到了这个问题。 我有几个网络接口。例如,我有本地连接,用于网络和Internet访问,以及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();
但它不起作用。请有人帮帮我吗?
谢谢!
答案 0 :(得分:0)
我终于做到了!我创建一个套接字并使用我需要的网络接口绑定它。之后,我使用此套接字发送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();