C++ 如何加入多播 mpeg 流?

标签 c++ sockets udp mpeg2-ts multicastsocket

我如何设法加入地址为 udp://@224.1.50.15:1234 的多播 mpeg 流组?我想要管理的只是与流服务器建立连接,让服务器知道我对这个多播组感兴趣,让服务器在一段时间内向我发送流数据包。

举个例子: 在我使用 VLC Player 建立与该组的连接之前,我没有收到来自该组播组的任何数据包。即使在我关闭 VLC 播放器后,我也会在短时间内继续接收来自该组的数据包。我想做的是在没有 VLC Player 或任何其他第三方应用程序的帮助下接收数据包。

为了上述目的,我如何设法与该组建立联系。如果可能的话?

P.S:我安装了 4 个网络接口(interface)。

谢谢!

作为 Zaboj Campula 在本页回答中的推荐;我更改了代码如下。这给了我一个错误 10093。

struct ip_mreq {
    struct in_addr imr_multiaddr;   /* IP multicast address of group */
    struct in_addr imr_interface;   /* local IP address of interface */
};
SOCKET        s;
SOCKADDR_IN    localif;
struct ip_mreq mreq;
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
localif.sin_family = AF_INET;
localif.sin_port = htons(1234);
localif.sin_addr.s_addr = INADDR_ANY;
bind(s, (SOCKADDR *)&localif, sizeof(localif));
mreq.imr_interface.s_addr = INADDR_ANY; //Writing here my local ip didn't change the result.
mreq.imr_multiaddr.s_addr = inet_addr("224.1.50.15");
int rc = NO_ERROR;
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
// Join the group
rc = setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mreq, sizeof(mreq));
if (rc == SOCKET_ERROR)
{
    printf("JoinMulticastGroup: setsockopt failed with error code %d\n", WSAGetLastError());
}
else
{
    printf("Joined group: ");
    //PrintAddress(group->ai_addr, group->ai_addrlen);
    printf("\n");
}

最佳答案

UDP 套接字不支持连接。不可能在 UDP 套接字上调用 listenaccept。当UDP套接字绑定(bind)到本地端口时,您可以直接从UDP套接字读取。

套接字选项 IP_ADD_MEMBERSHIP 将套接字加入多播组。

 struct ip_mreq m;
 m.imr_interface.s_addr = inet_addr(loca_ip_address);
 m.imr_multiaddr.s_addr = inet_addr("224.1.50.15");
 setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&m, sizeof(m));

您可以在 http://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancedmulticast9a.html 找到完整示例

关于C++ 如何加入多播 mpeg 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41258742/

相关文章:

python - 如何在浏览器和应用程序之间创建通信

udp - GStreamer UDPSink block 大小属性不起作用?

c++ - 返回指针无法正常工作

c++ - 视频文件中的 QVideoFrames 列表

c - 建立 TCP 套接字连接时出现问题

python - EWOULDBLOCK 套接字编程错误

android - RxJava2如何观察UDP数据包?

c++ - 为什么我们可以从 C++ 中的成员函数访问非成员函数

c++ - 声明一个模板函数,将模板类 friend 的两个对象(仅)用于这两个特化

c - C 中套接字的频繁读/写操作