我正在尝试在启用了 IGMP 侦听的交换机后面使用
ffmpeg
捕获多播流:
root [ /tmpfs/root ] $ ffmpeg -i rtp://239.0.0.1:5006 /tmp/stream.mp4
流总是在路由器成员端口时间用完后断开,所以总是在我配置的 260 秒之后。
在我的 tcdump 捕获中,我可以看到第一个加入组数据包:
6 0.004965 192.168.1.12 224.0.0.22 IGMPv3 54 Membership Report / Join group 239.0.0.1 for any sources
7 0.005046 192.168.1.31 239.0.0.1 UDP 1382 5006 → 5006 Len=1340
8 0.005390 192.168.1.31 239.0.0.1 UDP 1109 5006 → 5006 Len=1067
...
此后,将不再捕获任何 IGMP 报告数据包,直至时间耗尽:
...
225360 279.883980 192.168.1.12 224.0.0.22 IGMPv3 54 Membership Report / Leave group 239.0.0.1
在我的 Linux 6.1.60 内核中,启用了
CONFIG_IP_MULTICAST=y
和 CONFIG_BRIDGE_IGMP_SNOOPING=y
。
我尝试调整主动报告间隔的间隔:
echo "10000" > /proc/sys/net/ipv4/conf/eth1/igmpv3_unsolicited_report_interval
据我了解,IGMP报告应该回答IGMP查询,但是IGMP查询应该从哪里来?来自流媒体摄像头还是交换机?我可以强制我的内核在没有查询的情况下发送报告吗?