背景:

rtsp客户端接收组播流,PC上存在多个网卡情况下,加入组播组时会选择默认的网卡加入,导致无法接收组播消息,即使抓包已经抓到组播的数据也接收不到。

上图中的IGMPv3消息如果不是由接收组播流的网卡发送将无法接收组播数据,此时需要在调用加入组播的接口中指定网卡。

asio坑:我用的asio1.16.1,bind时,在windows上设置endPoint的ip为组播组ip会崩溃,要设置any()才行,且能正常区分不同组播组ip相同组播端口的流,但linux上如果设置any会导致同一个组播端口不同组播ip的流都能收到,需要设置endPoint的ip为组播组ip才行。按理asio做跨平台不应该这样windows和linux同一套代码有差异。

实现:

asio创建rtsp信令的socket后,可根据信令的socket获取和媒体服务器连接的网卡的ip,代码如下:

rtspSocket.local_endpoint().address().to_string(); // 获取连接到媒体服务器的网卡ip

加入组播组:

auto bindIp = asio::ip::address_v4::from_string(multicastIP);
#ifdine WIN32 // windows下绑定组播组ip会崩溃,linux不绑定组播组ip相同端口的组播会串流bindIp = asio::ip::address_v4::any();
#endifasio::ip::udp::endpoint endPoint(bindIp, multicastPort);
multicastSock.open(endPoint.protocol());
multicastSock.set_option(asio::ip::udp::socket::reuse_address(true));
multicastSock.bind(endPoint);
multicastSock.set_option(asio::ip::muticast::join_group(asio::ip::address_v4::from_string(multicastIP),
asio::ip::address_v4::from_string(networkIP)));
// 重点在这里,第二个参数可以不填,系统将随机选择网卡加入组播组,需要指定上一步获取的网卡ip
multicastSock.receive_from(...)

重点在设置join_group的第二个构成产生为对应网卡的IP,这个参数可以不填,系统将随机选择网卡加入组播组,这里需要指定上一步获取的网卡IP.

asio指定网卡加入组播组相关推荐

  1. 加入一个组播组过程分析

    转:https://blog.csdn.net/xbgprogrammer/article/details/51383202 网络中的一台主机如果希望能够接收到来自网络中其它主机发往某一个组播组的数据 ...

  2. 第十二章:组播 — 组播路由协议

    和单播路由协议类似,组播路由器在进行数据转发时也要依赖于组播路由协议.组播路由器依靠自己维护的组播路由表,对数据报文进行转发. 组播路由协议的主要作用: 确定朝向组播源的接口,这个接口被称为上游接口, ...

  3. 组播源不一定属于组播组,它向组播组发送数据,自己不一定是接收者。可以同时有多个...

    组播方式传输信息 综上所述,单播方式适合用户稀少的网络,而广播方式适合用户稠密的网络,当网络中需要某信息的用户量不确定时,单播和广播方式效率很低. IP组播技术的出现及时解决了这个问题.当网络中的某些 ...

  4. IP组播----组播基础 组播服务模型、组播地址

    一.简介 IPv4传输方式有三种:单播.组播.广播 单播:信息源为每个需要信息的主机都发送一份独立的报文 组播:信息源将保温发送到一个特定的组播IP地址,只有加入了这个组的主机才能接收 广播:信息源将 ...

  5. windows7 python 指定源组播 10049_Python3组播通信编程实现教程(发送者+接收者)

    一.说明 1.1 标准组播解释 通信分为单播.多播(即组播).广播三种方式 单播指发送者发送之后,IP数据包被路由器发往目的IP指定的唯一一台设备的通信形式,比如你现在与web服务器通信就是单播形式 ...

  6. 网卡驱动如何设置组播MAC地址

    最近关注了一些IP组播的知识,IP的组播需要以太网的支持.在这边文章内我们就主要讨论以太网如果支持IP组播. 首先看当前的interface是否支持multi-cast,如下面的命令红色部分标注,则说 ...

  7. 加入rtp组播_耗时10+小时撰写 带你系统认识组播 收藏这些概念

    组播multicast:在一个或跨越多个广播域,实现点对多点的通信需求,不存在强制性:比单播技术更加灵活.比广播技术更加高效:广泛应用在网络电视.在线直播.远程教育.视频会议等对带宽和数据交互实时性较 ...

  8. 组播MAC地址和各类IP地址

    MAC地址是以太网二层使用的一个48bit(6字节十六进制数)的地址,用来标识设备位置.MAC地址分成两部分,前24位是组织唯一标识符(OUI, Organizationally unique ide ...

  9. 广播单播组播的知识总结与分享

    第一部分 基本概念 在网络中设备与设备通信也就是我们说的报文的传递.他们传递的方式分为以下几种:广播.单播和组播.我们以下提到的二层和三层指的是OSI模型,它总共工作分为七层:物理层.数据链路层.网络 ...

最新文章

  1. Spring Boot spring mvc 拦截器
  2. 【读书笔记】 网页关闭确认框
  3. kaggle颅内出血比赛分析
  4. halcon 单通道图像转成3通道_halcon图像处理基本运算
  5. Mybatis实体类属性名与数据库类名不对应的两种解决方法
  6. 租房界的php,php实现出租房数据管理及搜索页面
  7. BZOJ 1232 USACO 2008 Nov. 安慰奶牛Cheer
  8. 期刊计算机仿真地址在哪,计算机仿真杂志社地址
  9. “我男友是程序员,修BUG比我重要,服了!”
  10. 在中国在行其道的智慧城市,为何折戟多伦多? | 凌云时刻
  11. win7用html做背景,怎么美化和自定义Win7鼠标右键菜单背景?
  12. 关于ele框架样式修改
  13. 《东周列国志》第八十回 夫差违谏释越 勾践竭力事吴
  14. 女老板为何因户外广告牌性贿赂城管?
  15. C++(STL)学习笔记
  16. Android面试题(六)2网络与安全机制(1)
  17. Delphi2010开发DataSnap服务器(一)
  18. 【STM32+cubemx】0030 HAL库开发:DDS芯片AD9833实现简单的波形发生器
  19. 1 | Nessus使用
  20. python实现excel搜索_从几百个Excel中查找数据,用Python一分钟搞定

热门文章

  1. 我的创作纪念日——创作历程,机缘,与成就
  2. 使用luastudio,调试 lua配置
  3. 面试官:聊聊 Java 的几把 JVM 级锁吧
  4. (翻译)加入俱乐部吧
  5. DIGITAL MARS C的下载及安装配置
  6. shp地图如何导入奥维地图手机_如何将平面坐标点导入到奥维互动地图
  7. mysql数据库理论和实践教学
  8. MATLAB定义变量小细节(1)
  9. 每日一招:散户巧寻主力筹码的方法
  10. 电子学:第014课——实验 15:防入侵报警器(第一部分)