广东电信 IPTV 组播转单播极限测试
这两天给家里弄好了 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 转发组播(后改为 msd_lite)
🔧 硬件配置 ​
- 光猫: 中兴 7015tv3 (2.5G WAN + 1G ITV)
- 软路由: N5105 4 口 2.5G
- MacBook Pro: M2 Max/96GB + 2.5G 网卡
- 台式机 PC: i7-8700K/1080 + 万兆网卡
- Mac Mini: M2 Mini/16GB + 2.5G 网卡
所有设备在内网并没有网络瓶颈。测试用的电脑均为 2.5G 内网。除了上述设备,也使用到了 AppleTV、手机等设备进行测试。
📡 转发组播 ​
我也是昨天看到 /t/102603 这个帖子下的留言,发现可以通过「电脑插光猫 ITV 口直接播放」来验证是否能进行组播转发。
经过测试,我家东莞电信、深圳联通两地的 IPTV ,都可以满足。
我之前被其他帖子误导了,以为要鉴权抓包太麻烦就没搞了。没想到居然这么简单(刚好我的网络条件满足)。
🎮 测试播放器 ​
GridPlayer,基于 VLC 开发的多路播放器,支持硬解。
用 IINA 也试过,最多只能播放 15 个且很卡顿,后来搜到 GridPlayer 发现可以满足需求。
广电电信的组播除了表情,也提供 1080P 的直播源,还有少数 4K,我订阅的电视源使用的都是 HD 1080P 25帧的资源,码率 7Mbps - 10Mbps 波动,大多时候是 8Mbps。
某些 4K 直播源码率码率则在 30Mbps 左右,但是数量较少,这次我过滤留下了 145 个电视台,144 个是 1080P 25帧。
❗ 重要提醒 ​
一开始我使用 UDPXY 作为直播流代理。由于一开始配置的时候填写了最大客户端50的限制,后面测试的时候发现最大播放数量被限制在 55 路,误导我一直以为 IPTV 的最大播放数量被限制了。
但是使用 UDPXY 这一步测试结果依旧保留,仅供参考。
📊 UDPXY 测试结果 ​
下面以 UDPXY 转发测试过程的一些截图:
Mac 最多只能播放 25 路。
Mac 那边继续直播 25路,PC 额外播放 30 路,CPU 压力很大。
OpenWrt 监测 ITV 口带宽平均下来 500Mbps。
V 站有网友评论说 UDPXY CPU 占用率可能导致瓶颈,一开始我的确忽略了这个因素,于是重新又测试了下。
当 55 个通道同时播放时,CPU使用率在 50% 到 70% 之间波动,每个 UDPXY 进程占用 1%到2% 的CPU。但是可以推测,如果继续使用 UDPXY 进行转发,播放到 100 路的时候,CPU 占有率的确有可能达到 100%。
📺 UDPXY 占用网络带宽 ​
总路数 | PC 播放路数 | Mac 播放路数 | IPTV 总带宽占用 | 家宽测速结果 | IPTV状态 |
---|---|---|---|---|---|
30 | 30 | 0 | 300Mbps | 1300Mbps | 正常播放 |
50 | 30 | 20 | 450-460Mbps | 1300Mbps | 正常播放 |
55 | 30 | 25 | 490-500Mbps | 1300Mbps | 无法新增直播流,新增会导致原有直播随机断开一路 |
- Mac 跑到 25 路就到顶了(CPU 高负载+风扇难得跑了起来),系统不卡顿,但是播放器卡顿。
- PC 能撑到 30 路(Mac 那边 25 路还在运行),可添加无限源但超过会卡顿,已达 CPU 和显卡瓶颈,系统卡顿,播放器可能崩溃。
- 每路都是不同的电视台源,上面 55 路同时播放流畅不卡顿。跑满时,家庭局域网其他设备(AppleTV/手机) IPTV 客户端无法再播放,OpenWrt 监测 iTV 网口带宽平均速率 500Mbps。
⚡ msd_lite 测试结果 ​
27 号晚上,看到有人提到了 msd_lite,相比 UDPXY,msd_lite CPU 和内存占用更低 ,于是我又重新用 msd_lite 测试了下。
也是在这个时候,我才发现 UDPXY 配置里面有个最大客户端数 50 的限制,于是干脆重新测试,也因此得出了新的数据和结论,由于上面 UDPXY 测试时就已经达到了 1000M ,msd_lite 直接跳过,直接以 1000Mbps 向上的压力测试。
同时为了突破网口的物理限制,我将光猫上的 iTV 口绑定到了 2.5G 口上,原本的网络则改到了 1G 网口上。
这一轮测试,出动了 M2 Max MacBook / PC / M2 Mac Mini 共三台设备测试,同时客厅的 AppleTV 也在 4 路同屏一直播放(三台电脑同时播放时,硬件性能瓶颈太大都会卡顿,AppleTV 4 路直播不会因为硬件问题瓶颈,作为一个标定参考组)。
M2 Max MacBook 一直播放 62 路不停止,画面都能出来,但是播放不流畅,CPU 占用率 60-80% 之间波动。
旁边的 M2 Mini 则固定播放 25 路。
📺 msd_lite 占用网络带宽 ​
总路数 | PC 播放路数 | Mac 播放路数 | Mini 播放路数 | AppleTV 播放路数 | IPTV 总带宽占用 | 家宽测速结果 | IPTV状态 |
---|---|---|---|---|---|---|---|
91 | 0 | 62 | 25 | 4 | 900-1000Mbps | 1000Mbps | 除了电脑卡顿,其他端流畅播放,AppleTV 播放流畅 |
108 | 42 | 62 | 25 | 4 | 1200-1300Mbps | 10~100Mbps | 除了电脑端卡顿,其余端流畅播放,开始影响网速 |
147 | 56 | 62 | 25 | 4 | 1400~1500Mbps | 10~~100 Mbps | 播放卡顿感明显,少数源出现马赛克,ATV 正常播放但是加载偶尔出现进度条,家宽网速限速到 100M 以内 |
200 | 72 | 100 | 25 | 4 | 1500+Mbps | 1000 Mbps❓ | 极限重复 200 路测试,虽说 IPTV 达到 1.2G 之后大概率限速,但是实测依旧偶尔能够跑满 1000M 网络宽带 |
PC 在播放 56 路时,CPU 压力依旧很大。
在 147 路播放时,OpenWrt 监测 ITV 口带宽平均速率达到了 1.42 Gbps,约 1454 Mbps。后续尝试再增加无法突破。
改成 msd_lite 后,CPU 使用率明显下降,147 路播放时,CPU 在 50%-80% 之间波动。
上述播放,每个设备都是播放不同的电视源,最终是 145 路电视台同时播放。
接下来又分别将 M2 Max MacBook 和 PC 分别增加到 100 路和 72 路,重复播放 50 路。Mac 上这 10x10 的布局画面都展示出来了,但是无法流畅播放,幻灯片一样。
在 200 路播放的时候,iTV 的网口的流量达到了 1.4-1.45Gps ,对应约 1500Mbps 的带宽,与 147 路播放时一样,说明有可能是达到了 IPTV 线路的带宽上限。
🐎 IPTV 网速影响测试 ​
在上面 UDPXY 测试的时候,由于我的 IPTV 最高带宽也才 1000Mbps,网络带宽在 2.5Gps 网口下均能跑到 1300M,在 1G 网口下也能跑到 1000M。因此当时我得出结论是:IPTV 带宽不会影响家宽带宽。
但是随着后面转向 msd_lite,将 IPTV 的带宽进一步提升到 1.2Gps ,乃至最高的 1.47Gps 时,我发现了有趣的现象.
当播放 147 路,OpenWrt 监测 ITV 口带宽平均速率达到了 1.42Gps,约 1500Mbps。这个时候访问电信官网测速,下行下降到了两位数,在20-100Mbps 之间波动。
随后我关闭 PC 上的直播,总路数下降到91,网速恢复正常。后续我又尝试恢复 PC 上的直播,当PC的播放数量为7*6 = 42路时,iTV 带宽 1.2G 左右,若继续增加播放数量,在上升到 1.25G左右,网速则受影响下载到 100 Mbps 以内。
原本我以为运营商应该是对家宽和 IPTV 的限速做了某种策略,这个 IPTV 达到 1.2Gps 之后,可能会触发家宽线路的限速。但是随后又发生了一件奇怪的事情。
当我将播放数量增加到 200 路时,这时 iTV 的带宽又达到了 1.4-1.47Gbps 波动,这个时候我测速结果发现网速又回到了 1000M。这个时候我就不知道如何解释了。
📈 总结 ​
如同我在最开头所说的这次测试「娱乐性质大于技术研究」。
这次折腾 IPTV,更多是「好玩」性质,没有哪个正常的家庭会有这种同时播放这么多路电视的需求。
最终的结论可能并不严谨,它仅代表了在我家网络和硬件条件下对东莞电信IPTV的测试结果。
- 东莞电信 1000M 套餐附送的 IPTV,在 2.5G XGPON 光猫下,IPTV 能跑到 1.5 Gbps 的带宽。理论可支持 140+路 1080P 的直播。
- 当 IPTV 带宽低于 1.2Gbps 占用时,不影响原有的家庭网络带宽。
- 当 IPTV 带宽高于 1.2Gbps 时,有一定的几率,会触发家庭网络的限速。
(注:1.2 Gps ≈ 1,229 Mbps,1.5 Gps ≈ 1,536 Mbps)