24 年 12 月 28 日凌晨更新
下面的文章与最新的测试结果有出入:实测突破了 55 路和 1000M 的限制。可以等我更新这篇文章!!!(这句话存在就说明我还没更新)
这两天给家里弄好了 IPTV 的组播转单播,心血来潮,想看看极限能跑多少路 IPTV 直播。
有关这次折腾 IPTV 的记录和讨论,我也发到了推特和 V2EX 上。
这篇博客不是教程,由于全国各地不同运营商对于 IPTV 有不同的网络策略,还是建议各位自行以「IPTV + OpenWrt + 组播」等关键字搜索符合当地运营商的教程。
组播转单播
- IPTV 原始信号是以组播(Multicast)方式传输的
- 通过 udpxy 将组播流转换成 HTTP 单播流(Unicast)
- 这样转换后,内网中的设备就可以通过普通的 HTTP 协议访问这些视频流
这种转换的主要优点是:
- 让不支持组播的设备(如手机、平板、智能电视等)也能观看 IPTV
- 突破了原本 IPTV 信号只能在特定接口或设备上观看的限制
- 实现了全屋任意设备都能收看 IPTV 的效果
如果家里还有人要看电视,还是推荐可以搞个这个方案,在 AppleTV 、手机、平台上就能直接看直播了,而且没有机顶盒那么多广告。
有点可惜现在才弄这套方案,前段时间奥运会期间,和老婆在家看比赛直播还是挺多的。
参考资料
🌐 网络条件
- 东莞电信 1000M 下/50M 上(有公网 IPv4/IPv6)
- 光猫 2.5G 网口 1 桥接,软路由拨号
- 光猫 iTV 口 桥接: 封装类型 PPPoE 网线连软路由, OpenWrt 配置网口 UDPXY 转发组播
🔧 硬件配置
- 光猫: 中兴 7015tv3 (2.5G WAN + 1G ITV)
- 软路由: N5105 4 口 2.5G
- Mac: M2 Max/96GB + 2.5G 网卡
- PC: i7-8700K/1080 + 万兆网卡
除了上述设备,也使用到了 AppleTV、手机等设备进行测试。
📡 转发组播
我也是昨天看到 /t/102603 这个帖子下的留言,发现可以通过「电脑插光猫 ITV 口直接播放」来验证是否能进行组播转发。
经过测试,我家东莞电信、深圳联通两地的 IPTV ,都可以满足。
我之前被其他帖子误导了,以为要鉴权抓包太麻烦就没搞了。没想到居然这么简单(刚好我的网络条件满足)。
🎮 测试播放器
GridPlayer,基于 VLC 开发的多路播放器,支持硬解。
用 IINA 也试过,最多只能播放 15 个且很卡顿,后来搜到 GridPlayer 发现可以满足需求。
📊 测试结果
下面是测试过程的一些截图:
Mac 最多只能播放 25 路。
Mac 那边继续直播 25路,PC 额外播放 30 路,CPU 压力很大。
OpenWrt 监测 ITV 口带宽平均下来 500Mbps。
我订阅的电视源使用的都是 HD 1080P 25帧的资源,码率 7Mbps - 10Mbps 波动,大多时候是 8Mbps。
📺 IPTV 占用网络带宽测试
为了验证「家宽线路和 IPTV 线路是否共用带宽」,我又重新验证了下。
换了中兴 7013tv3 2.5G 光猫后,我家电信实际官网测速能稳定跑到 1300M 左右。刚刚重新测试了下。
好的,我来重新组织表格,将设备播放路数拆分为独立的列。
总路数 | PC 播放路数 | Mac 播放路数 | IPTV 总带宽占用 | 家宽测速结果 | IPTV状态 |
---|---|---|---|---|---|
30 | 30 | 0 | 300Mbps | 1300Mbps | 正常播放 |
50 | 30 | 20 | 450-460Mbps | 1300Mbps | 正常播放 |
55 | 30 | 25 | 490-500Mbps | 1300Mbps | 无法新增直播流,新增会导致原有直播随机断开一路 |
纠正:修正下 IPTV 的总带宽,一开始我把峰值带宽看成了实际带宽。实际上 55 路播放的时候,网口 3 分钟平均速率 490-500Mbps,峰值才大概 2 倍达到 1000Mbps。
- Mac 跑到 25 路就到顶了(CPU 高负载+风扇难得跑了起来),系统不卡顿,但是播放器卡顿。
- PC 能撑到 30 路(Mac 那边 25 路还在运行),可添加无限源但超过会卡顿,已达 CPU 和显卡瓶颈,系统卡顿,播放器可能崩溃。
- 每路都是不同的电视台源,上面 55 路同时播放流畅不卡顿。跑满时,家庭局域网其他设备(AppleTV/手机) IPTV 客户端无法再播放,OpenWrt 监测 iTV 网口带宽平均速率 500Mbps。
后来看到 V 站有网友评论说 55 路可能是 UDPXY CPU 占用率限制,经过他提醒,我发现的确忽略了这个因素,于是重新又测试了下。
我的 OpenWrt 软路由器配置为 2 核 2G。当 55 个通道同时播放时,CPU使用率在 50% 到 70% 之间波动,每个 UDPXY 进程占用 1%到2% 的CPU。因此,初步可以排除CPU瓶颈。
后来为了检查是光猫 1G 网口的物理限制是否影响 IPTV 带宽上限,我又将 iTV 口重新绑定到光猫 2.5G 网口重新测试,原以为突破 1000M 的网口物理限制,但是实测下来,最高播放数量依旧限制了 55 路直播。
看样子 IPTV 的线路除了带宽,应该还有其他限制。
得出最后结论:
- 家宽和 IPTV 带宽的确是隔离的,IPTV 线路不会影响家宽的带宽。
- 目前东莞电信 1000M 家庭宽带,IPTV 带宽大概 500M,所有设备支持最多同时 55 路直播。