1. 从项目痛点出发:为什么偏偏是 PoE 和 UDP 组播
做局域网视频项目的朋友应该都有类似经历:明明摄像头、显示屏、解码终端都堆在同一个机房里,拉线却拉得让人崩溃。网线要走、电源线也要走,设备一多,机柜后面就是一团乱麻,排查故障时更是折磨。到了视频分发环节,问题更明显——多路高清流同时推给十几个接收端,交换机端口一多就卡顿、花屏,甚至直接黑屏。我这次做的这个项目,本质上就是要把这两件事一起解决:PoE 负责供电,UDP 组播负责分发,一套方案把布线和带宽两个痛点全部按下去。
先说清楚这套方案适合谁。如果你是在做园区监控、数字标牌、教室录播、会议室投屏、商场信息发布这类场景,终端设备数量在十几路到几十路不等,且全部集中在同一个局域网内,那论文里这套思路可以直接抄作业。如果你打算拿它跨三层网络、跨公网分发,那本文不适用,组播在跨网段场景需要考虑 RP、PIM 等一系列额外配置,复杂度和故障率都会显著上升。
我这次的实际项目是一栋办公楼的数字标牌系统,20 个 55 寸显示屏,分布在 4 层楼,每层一个弱电间。前端播放源是一台媒体服务器,需要把 12 路 1080p 视频流同时推到 20 个显示终端。最早用单播方案,服务器网卡直接被打满,交换机上联口也经常跑满千兆。后来换成 UDP 组播,配合 PoE 供电的显示终端,整个系统一下子清爽了。
先别急着上设备,咱们把思路理顺。整体方案的核心是**“控制链路 + 数据链路分离”**:控制链路用普通 TCP/HTTP,负责设备发现、播放列表下发、状态上报;数据链路全部走 UDP 组播。这样设计的好处很直接——控制信令量小,即便断了几包也不影响业务;视频数据量大,用组播可以一份流复制到 N 个端口,交换机自动完成复制,服务器只需要发一份。后面第三部分我会把组播的字节级设计拆开讲,先把整体的设备选型和 PoE 部分说透。
2. PoE 供电设计与设备选型的关键细节
2.1 PoE 标准与功率预算:802.3af/at/bt 必须当场算清楚
PoE 的选择不是随便找个 PoE 交换机就完事,第一步要把每个终端的实际功耗估算清楚,然后倒推交换机和供电标准的选型。我先列一个对照表,这张表我每次做项目都会贴在配置文档第一页:
| PoE 标准 | 常用叫法 | 单端口最大供电功率 | 实际可用功率(扣除线损等) | 典型应用 |
|---|---|---|---|---|
| IEEE 802.3af | PoE | 15.4W | 约 12.95W | 普通 IP Camera、小型 IoT 终端 |
| IEEE 802.3at | PoE+ | 30W | 约 25.5W | PTZ 摄像头、部分室内屏、AP |
| IEEE 802.3bt | PoE++ | 60W / 90W | 约 51W / 71W | 大屏、云台红外、笔记本电脑 |
我在这个项目里的显示终端是 55 寸的商用屏,标称功耗 85W,如果用标准 PoE 供电显然不可能——单端口 90W 的 802.3bt Type 4 都很勉强。所以实际方案是:显示终端用本地电源适配器供电,PoE 只负责给摄像头、环境传感器这类小功率设备供电。这里想提醒大家一个常见的认知误区:PoE 不是“所有设备都必须由网线供电”,它的价值在于让“小功率设备”免去电源适配器,而不是硬扛大功率负载。如果一个设备功耗超过 30W,老老实实走本地供电,别硬上,否则供电不足会引发反复重启,排查起来非常坑。
整个项目的功率预算可以这样计算:摄像头 8 路,每路功耗 8W;传感器节点 12 个,每路功耗 3W。总计最大功率 = 8×8 + 12×3 = 100W,加上 20% 的冗余,约 120W。选一台 8 口 PoE+ 交换机,总 PoE 功率预算 130W 以上就够。注意,这里 20% 冗余不是拍脑袋,是为了应对“所有设备同时启动”的浪涌电流——PoE 供电时,设备上电瞬间电流可能达到稳态的 3~5 倍,功率预算不足会导致交换机反复掉电保护,非常影响体验。
2.2 供电模式与线序:A/B 模式和 PoE 检测机制的坑
第一次接触 PoE 的人容易忽略一个问题:网线一共 8 根芯,PoE 是怎么在这 8 根芯里既传数据又传电的?答案是利用空闲线对或数据线对。802.3af/at 定义了两种供电模式:
- Mode A(数据线对供电):使用 1/2 和 3/6 线对,即数据线对同时承载数据和直流电。
- Mode B(空闲线对供电):使用 4/5 和 7/8 线对,这两个线对在百兆网络中本来就是空置的,千兆网络则复用传输。
不管是 Mode A 还是 Mode B,PSE(供电设备,一般是交换机)在供电之前都有一个检测过程:先输出一个低电压,检测受电端是否存在 25kΩ 的特征电阻。只有检测到符合标准的 PD(受电设备),才会逐步升压供电。这个机制非常重要——它保证了普通非 PoE 设备插上去不会烧,也解释了为什么有些“非标 PoE 交换机”容易烧设备,因为它们跳过了检测环节,直接强制供电。
实际项目里,我更推荐使用Mode B(4/5 + 7/8)的方案。原因是:千兆网络中 1/2、3/6、4/5、7/8 四对线全部用于数据传输,Mode A 需要把数据和直流信号耦合在同一对线上,对变压器和电路设计要求更高,市面一些低端 PoE 摄像头在 Mode A 下偶尔会出现握手异常;而 Mode B 在百兆网络下完全独立,稳定性更好。当然,如果是千兆 PoE+ 大功率设备,自动协商通常会选择 Mode A,因为 Mode B 的线序在长距离上的电压降控制不如 Mode A 成熟。这个听上去有点绕,但实际操作时你只需要记住:选正规的 PoE 交换机和摄像头,让它们自动协商即可,不要手动指定 Mode,手动指定的坑比收益多。
2.3 交换机选择与布线实践补充
交换机是整个 PoE 供电方案的心脏。我的选型原则有四个:
- 端口功率预算要高于总计算功耗 20%~30%,前面算过 120W 就得选 150W 左右的 PoE 预算,宁可多不可少,因为后续加设备是大概率事件。
- 必须有独立的 PoE 电源模块,而不是“共模供电”。独立电源模块的最大好处是故障隔离——一个模块挂掉不会影响整个交换机数据转发,而且更换成本低。
- 优先选支持 802.3at/bt 标准的型号,即便当前只需要 802.3af,at 和 bt 能够向下兼容,给以后的 PTZ 摄像头或更高功耗终端留余地。
- 风扇噪音要留意,如果设备部署在办公室或者会议室附近,低噪音型号会省去很多投诉。
布线方面,有一个很多人忽略的常识:PoE 供电距离限制是 100 米,这是数据链路的限制,也是供电的限制。超过 100 米,网线电阻会导致电压降过大,受电端可能频繁重启。如果非要超长距离,可以考虑 PoE 延长器,但我个人不太建议——延长器本质是再生供电,多一个设备就多一个故障点,不如把交换机下移到离终端更近的弱电间。
3. UDP 组播的视频分发设计与实现
3.1 为什么单播在 20 路终端下跑不动:带宽演算
先把数字摆出来,大家自己感受一版。假设一路 1080p 视频的码率是 8 Mbps,我有 12 路视频源。如果走单播(每个接收端单独请求一路独立流),那服务器发出的总带宽= 12 路 × 20 个终端 × 8 Mbps =1920 Mbps,远超千兆网卡和交换机上联口的带宽上限。即便用 4 个千兆口做链路聚合,也只有 4000 Mbps,勉强能支撑,但已经触顶。
换成 UDP 组播之后,服务器只需要发送 12 路视频流各一份,也就是 12 × 8 =96 Mbps。交换机收到一份组播流后,会根据组播组成员关系,在自己的端口上复制并转发,只为加入了该组的接收端口发送数据。从 1920 Mbps 降到 96 Mbps,带宽占用减少了 95%,这就是组播的核心价值。有人可能会问,为什么不把视频码率压到 2 Mbps 来解决带宽问题?压低码率确实能降带宽,但画质牺牲太大,对于数字标牌这种近距离观看场景,1080p 下 8 Mbps 已经接近清晰度的底线了,压码率的思路在商业展示场景不太可取。
3.2 组播地址、端口与 TTL 的规划:别乱用 224.0.0.x
UDP 组播的规划和 IP 地址规划一样重要,甚至更重要,因为一旦上线再改组播地址会涉及所有终端同步改动,非常折腾。我在规划时会遵循以下原则:
- 组播地址用 239.0.0.0/8 段,这是私有组播地址段,不会和公网组播冲突,适合局域网内部使用。
- 239.0.0.x 每个视频通道单独一个组播地址,比如通道 1 用 239.0.0.1:8001,通道 2 用 239.0.0.2:8002,以此类推。这样接收端可以按需加入特定的组,想看哪路就订阅哪路。
- TTL 设置为 2,TTL = 1 表示组播只能在本地子网传播,TTL = 2 表示可以经过一台路由器。对于单层局域网,TTL=1 够用;如果跨 VLAN 且做了组播路由,TTL 至少需要 2。不要随手设成 255,这会让组播报文在被错误路由时扩散到更大的范围。
- 尽量使用同一网段的专门组播 VLAN,把组播流量和办公流量隔离。这个下面会展开讲。
还有一个细节:源端口和目的端口最好分开规划。比如每个通道的目的端口固定,源端口可以随机,方便接收端做防火墙规则过滤;命令和控制报文走另一个端口段,逻辑清晰。我用习惯的规划是 8000~8015 段做视频流,8020~8025 段做控制信令。加了这个区分之后,抓包定位问题会快很多。
3.3 IGMP Snooping 与交换机侧配置:组播高效转发的开关
如果只是把交换机当成普通的二层交换机接到组播网络里,会怎样?组播报文到达交换机时,交换机会把报文广播到所有端口(除了入端口)。当组播接收端很多时,这个广播风暴会吞噬大量带宽,所有非组播终端的网络都会变慢。要避免这个问题,核心是开启交换机的IGMP Snooping。
IGMP Snooping 的原理一句话就能讲清楚:交换机“偷听”终端发送的 IGMP 报文,知道哪个端口下有哪些设备加入了哪个组播组,然后维护一张表,组播数据只发给对应端口。相当于给组播装上了“定向投递”的开关,从广播变成单播复制。
配置上,不同交换机指令不同,但核心操作高度一致:
- 全局开启 IGMP Snooping;
- 在对应 VLAN 下开启 IGMP Snooping;
- 配置查询器(IGMP Querier),特别是当网络里没有三层设备时,需要指定一台交换机作为查询器,否则组播组可能无法正常建立;
- 配置快速离开(Fast Leave),当接收端断开后立即删除组播表项,避免流量持续发向失效端口。
华为、H3C、Cisco 的命令各有差异,但逻辑相同。该项目里用的是华为 S5720 系列,命令大概长这样:
# 创建组播 VLAN vlan 100 name multicast quit # 开启 IGMP Snooping igmp-snooping enable igmp-snooping vlan 100 enable # 在 VLAN 下指定查询器(注意,一般选汇聚交换机) interface vlanif 100 igmp-snooping querier一开始我没开 IGMP Snooping,直接裸跑组播,结果整个办公网都变卡了,后来一查,交换机的 CPU 转发率飙升——这就是组播广播风暴的典型症状。开了 Snooping 之后,带宽立刻恢复正常,办公网和视频网彻底隔离开。
3.4 发送端和接收端的实现细节:socket 层面的几个关键点
TCP 有连接概念,而 UDP 组播本质上是“无连接”的。发送端只要把数据包丢到组播地址上,剩下的交给网络;接收端要主动加入组播组,才能收到对应报文。实现层面主要有几个关键细节:
发送端:
import socket import struct def send_multicast(ip: str, port: int, data: bytes): # 指定组播包 TTL sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2) # 设置为本机组播出口 sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF, socket.inet_aton("192.168.10.2")) sock.sendto(data, (ip, port)) sock.close()发送端有几个容易踩的坑。第一个是IP_MULTICAST_IF 必须手动设置,特别是在多网卡服务器上,如果不指定出口网卡,系统可能选择一个没有接组播网络的网卡发送,导致收不到数据。第二个是循环发送(Loopback),默认情况下发送端自己是能收到组播数据的,如果不想要这个行为,需要设置 IP_MULTICAST_LOOP 为 0。这个项目里我发送端和接收端在同一台服务器上做本地回环测试,就可以保留回环,但生产环境建议关掉,减少不必要的本地处理。
接收端:
import socket import struct def join_multicast(ip: str, port: int): sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(("", port)) # 加入组播组 group = socket.inet_aton(ip) mreq = struct.pack("4sL", group, socket.INADDR_ANY) sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) return sock接收端最隐蔽的坑是SO_REUSEADDR 和 bind 的 IP 地址。如果 bind 到具体的本机 IP,比如 192.168.10.5,那么组播包在 Linux 下可能收不到——因为组播报文目的地址是组播 IP,不是本机 IP,内核在绑定时不会把它们匹配到具体 IP 的 socket 上。正确做法是bind 到 0.0.0.0(所有接口)或者直接 bind 到组播 IP 地址。另外,多网卡环境下 IP_ADD_MEMBERSHIP 可以指定接口索引,如果机器有多个网卡,建议显式指定网卡名对应的接口索引,避免默认选择错误网卡导致加组失败。
# 指定网卡加入组播组 import socket import struct sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(("", port)) # 获取网卡接口索引 ifname = "eth1" index = socket.if_nametoindex(ifname) group = socket.inet_aton("239.0.0.1") mreq = struct.pack("4sI", group, index) sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)依赖 if_nametoindex 需要 Python 3.8+ 或额外安装 ifaddr 库,早期版本没有这个方法。项目里我直接用 ctypes 调系统函数解决,但为了可读性,上面的示例代码是简化版,大家实际使用时可以根据自己的 Python 版本调整。
4. 完整部署与实测过程:一套可直接照搬的落地流程
4.1 网络拓扑与设备清单:先画一张能落地的图
整个方案的网络拓扑比较简洁:一台核心交换机(带 SFP 上行),下挂几台 PoE 接入交换机;流媒体服务器接在核心交换机上,发送 UDP 组播流;20 个显示终端分布在各楼层的 PoE 交换机下。实际拓扑里我没有把所有细节画成一张复杂的图,而是列了一个表格,大家参考:
| 设备角色 | 型号/规格 | 数量 | 关键参数 |
|---|---|---|---|
| 流媒体服务器 | 普通 i5 工控机 | 1 | 千兆网卡×1,VLC/FFmpeg 推流 |
| 核心交换机 | 华为 S5720-28X | 1 | 开启三层组播路由(用于跨 VLAN) |
| PoE 接入交换机 | 华为 S5720-8P | 5 | 每台提供 8 个 PoE+ 端口,总 PoE 预算 130W |
| 显示终端 | 55 寸商显屏 | 20 | 支持 UDP 组播播放 |
| 摄像头 | 1080p IP Camera | 8 | PoE 供电,8W/路 |
| 传感器节点 | 环境监测终端 | 12 | PoE 供电,3W/路 |
组播 VLAN 划分我是这样做的:VLAN 100 专门跑视频组播,所有显示终端和流媒体服务器的组播口都划进去;办公网 VLAN 20 保持不变,两者通过核心交换机做三层路由。这样一来,办公网里的广播报文不会影响组播域,组播域的大量视频流量也不会冲击办公网络。
4.2 带宽和供电的量化计算:把数字先写死在方案里
带宽计算:
- 视频源 12 路 × 8 Mbps = 96 Mbps,这是组播模式下服务器发出的总流量;
- 交换机上联口需要承载的最大流量 = 96 Mbps(所有组播流的总和),考虑到办公流量,上联口建议用 1Gbps,富余量非常大;
- 如果后续扩展到 50 路终端,上联口流量仍然只有 96 Mbps,因为组播流只有 12 份。但如果换成单播,50 路终端乘 12 路源就是 4800 Mbps,必须换万兆。这就是组播方案扩展性上的最大优势。
供电计算:
- 摄像头 8 路 × 8W = 64W;
- 传感器 12 路 × 3W = 36W;
- 总计 100W,加 30% 冗余 = 130W;
- 五台 PoE 交换机每台 PoE 预算 130W,总共 650W 的 PoE 预算,完全覆盖需求,还留了以后加摄像头的余量。
这道算术题的结论是:20 路终端 + 12 路高清源的系统,实际总带宽需求不到 100Mbps,总供电需求不到 130W。对于一个办公楼系统来说,几乎可以忽略不计。如果今天有同事跟你说“视频系统太卡了把带宽占满了”,你先把方案里组播开没开查一下,多半能救回来。
4.3 部署步骤与校验方法:每一步的目标和验证手段
整个部署过程我按照下面的顺序推进,每一步都有明确的验证方法:
步骤 1:交换机基础配置。包括 VLAN、IGMP Snooping、PoE 使能、上联口 Trunk。这一步做完后,用一台电脑接在 PoE 交换机下,查看是否能从 DHCP 获取 IP,验证二层链路通。
步骤 2:流媒体服务器配置。在服务器上装好 FFmpeg,测试本地推流到 239.0.0.1:8001。用 VLC 播放器在服务器本机验证能否收到组播流。这一步最考验耐心,很多问题都出在 IP_MULTICAST_IF 没设置对。验证时最好用 tcpdump 抓包确认是否有组播报文发送出来:
tcpdump -i eth1 host 239.0.0.1 -vv看到持续不断的 UDP 报文就说明发送端正常。
步骤 3:接收终端联调。选一台显示终端,设置为自动加入 239.0.0.1:8001 的组播组,验证画面正常。此时在核心交换机上执行display igmp-snooping group查看组播组表项,确认对应端口已被纳进组播组:
display igmp-snooping group vlan 100正常情况下能看到 239.0.0.1 对应的出端口列表里有这台显示终端的端口。
**步骤 4:全量接入。**把所有显示终端接入组播 VLAN,逐一验证画面。接入时建议分批进行,每批 5 台左右,期间持续监控交换机上联口的流量。如果出现流量异常飙升,立刻回看 IGMP Snooping 是否真正生效。
步骤 5:跨 VLAN 验证。如果办公网需要观看视频(比如领导办公室的电脑),就在核心交换机配置组播路由,将组播流从 VLAN 100 路由到 VLAN 20。这里要注意,组播路由和单播路由是两个体系,H3C/华为设备的组播路由协议需要单独使能,不打开它,跨 VLAN 后终端收到 IGMP 报文但交换机不转发数据,很容易迷惑。
整个实测过程我在现场记录了几个关键数据:
- 组播流正常播放时,核心交换机上联口峰值流量约 98 Mbps,与理论 96 Mbps 几乎吻合;
- 20 台终端全部加入组播组后,显示终端网卡的入方向流量为 8 Mbps(单路流),而不是 96 Mbps(全量流)——这说明组播“只收自己组”的逻辑完全正确;
- PoE 交换机端口供电功率显示:摄像头 7.8~8.2W,传感器 2.9~3.1W,与标称值相符,没有出现供电告警。
5. 常见问题与排障实录:这套方案最容易翻车的地方
5.1 组播风暴:开 IGMP Snooping 之前发生了什么
第一次调试时,我在全部终端接入之前没有开 IGMP Snooping,结果 20 个终端一上线,办公网立刻卡死。具体症状是:ping 核心交换机延时从 1ms 飙到 200ms+,网页打开转圈,交换机 CPU 利用率 80% 以上。用display igmp-snooping port-info一查,所有端口都在向所有组播组转发数据。处理方式很简单:在核心和接入交换机上开启 IGMP Snooping,并且确认查询器的配置。这里有个重要提醒——查询器不要每台都配,同一 VLAN 内如果有多个查询器,它们在启动时会发生竞争,短期可能出现组播表项抖动。建议只在汇聚交换机(核心)上配,接入交换机只开启 Snooping。
5.2 显示终端偶尔黑屏:反向排查 IGMP 快速离开
有一次运营反馈某台显示屏每隔几分钟就黑屏 3~5 秒,然后又恢复。一开始怀疑是推流端卡顿,但抓包发现组播流一直正常发出。最后在接入交换机上查看组播表,发现该终端端口一直在组播组里进进出出。原因是显示终端的播放软件每隔一段时间会重新加载播放列表,期间主动发送 IGMP Leave 报文,而交换机默认开启了快速离开特性,收到 Leave 后立刻删除该端口的组播表项,等软件重新播放时再发送 Join,这段时间流是不通的。
解决方式有两种:一是关掉该端口的快速离开,这样即使短暂 Leave 也不会立即删表;二是在终端播放软件层面修正,让播放列表刷新时不释放组播 socket。我选择了第二种,因为第一种方案会导致终端异常掉线时组播流量继续发向故障端口,浪费带宽,也容易掩盖故障。
5.3 PoE 供电不足导致摄像头反复重启
有一个摄像头上电后工作 30 秒左右就重启一次,链路指示灯一闪一闪,看着极像设备故障。量一下 PoE 端口输出功率,发现只有 9V/0.5A,明显没有达到额定 12V/1.5A。检查发现这个摄像头被接在网线的末端,距离交换机约 90 米。虽然 90 米在数据链路标准范围内,但长距离下的电压降导致实际到达摄像头的电压低于最低工作电压。处理方式是更换一个 PoE 预算更大的端口,并在配置里将该端口强制为 802.3at 模式,提高供电功率;同时把摄像头的功耗控制在 8W 以内,这个摄像头后来升级到低功耗版本,问题解决。
这个案例给了一个启发:PoE 不是简单地接入就能用,长距离、高功耗、劣质网线这三个因素叠加时,供电成功率会急剧下降。尤其是五类网线或者内部线芯很细的“伪超五类”网线,线阻大、压降明显,一定要在布线验收时做通断和线序测试,顺手测一下线阻。
5.4 接收端能加组但收不到流:三层接口与组播路由的坑
跨 VLAN 场景里,显示终端和组播源不在同一网段。终端所在 VLAN 的网关接口收到终端发送的 IGMP Join 报文,如果交换机没有使能三层组播路由协议,IGMP 报文会被送往 CPU 但不会建立组播路由表项,组播数据自然无法传递。这类问题的排查路径非常清晰:先在接入交换机上确认display igmp-snooping group能看到终端对应的组播组,再看核心交换机的三层接口有没有下发组播路由:
display multicast routing-table如果没有路由项,就是组播路由协议没使能。对于华为设备,需要全局使能 multicast,然后在对应 VLANIF 下使能 PIM(通常是 PIM-SM 或 PIM-DM),并将其中一个接口设置为静态 RP。这些配置和二层 Snooping 完全是两个层面,很多人会在这里卡很久。如果你是纯二层部署(所有终端和源都在同一 VLAN),可以完全避开这个坑,这也是我强烈建议“能不分 VLAN 就不分”的原因——复杂度每加一层,故障面就大一圈。
5.5 Wireshark 筛选 UDP 组播包的日常技巧
最后补充一个调试技能。抓包时如果只想看组播报文,Wireshark 过滤器可以这样写:
udp.dstport == 8001只看某一组播组的报文:
ip.dst == 239.0.0.1这两个过滤器组合使用基本能覆盖绝大多数场景。检查两个相邻 UDP 报文的时间间隔,可以用frame.time_delta字段排序——如果同一个组播组内报文间隔突然拉长到几十毫秒,大概率是发送端抖动而不是网络拥堵。这个排障思路在视频卡顿定位时非常高效,优先区分是“源端没发”还是“交换机没转发”。
6. 最终落地效果与后续扩展方向
这套方案上线后已经稳定运行了半年多,给我最大的感受不是技术多炫酷,而是系统复杂度真正降下来了。以前视频系统单独拉网线、单独接电源,设备一多故障概率成倍上升;现在所有小功率终端一根网线全部搞定,组播流从 96 Mbps 占用量降到几乎可以忽略,办公网和视频网的冲突彻底消失。
后续如果我要在这个系统上继续扩展,方向有两个:一是把部分显示终端升级为支持 PoE 供电的低功耗型号,进一步减少本地电源,统一运维;二是引入组播流的镜像录制功能,在核心交换机上把组播流镜像到存储服务器,方便事后追溯。如果你正好也在做局域网视频分发,可以参考这套“PoE 供电 + UDP 组播 + IGMP Snooping”的组合,先把功率和带宽两张表算清楚,再动手配置,大概率能少走不少弯路。
最后分享一个很多教程不会提的小技巧:在流媒体服务器上用两个网卡,一个专门跑控制信令,一个专门跑组播视频流。控制网卡上去抖、管理、传输播放列表;组播网卡只发视频。这样不仅流量隔离更彻底,抓包排障时也能一眼看出问题出在哪一侧。我自己踩过几次混用单网卡的坑之后,现在所有视频项目都会坚持这个设计。