mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3
1953 字
5 分钟
上海电信 SDN 网关全局域网皆可收看 IPTV 的实现
2023-10-02

自去年卡塔尔世界杯开始,在下开始逐渐有了观看在线 IPTV 直播源的需求。后来,在下经由 Formula 1: Drive to Survive 这部纪录片小小入了 F1 的坑,每逢大奖赛周末,也或多或少想着关注一下比赛的情况,然而 F1 大奖赛分布于全球各地,比赛的时间落在北京时间的凌晨一两点也相当正常,在下很难做到在这个时间点爬起来去开电视(在下比较爱看五星体育的解说,央视频和腾讯体育的解说氛围不足),因而观看在线 IPTV 直播源的需求与日俱增了。

当然,Github 上存在不少公开的 IPTV 直播源列表,不过,它们当中的大部分都存在重量而不重质的问题,这也不是说没有佼佼者存在,例如 fanmingming 大佬分享的直播源,无论从速度、稳定性还是台标、节目单的适配方面皆属翘楚。只是在下接触到该直播源时,其已经把免费的 Vercel 流量给用完,作者不得已临时将其搭建在了一个树莓派上运作(当然,只是临时,该项目直到目前还是相当稳定的,在下也相当推荐),可靠性到底还是令在下担忧,遂决定自己来研究一下 IPTV 直播源的问题。

关于上海电信 IPTV#

在下家中有一条上海电信的宽带入户,附带 IPTV,光猫是电信配装的 SDN 网关,没有改桥接(实际上有无桥接对本实现方案并无影响),只在用于管理 SDN 网关的网络管家 APP 处设置了 DMZ 到路由器。光猫的四个 LAN 口都融合了网络业务和 IPTV 业务,无论 IPTV 盒子接在哪一个口上,都可以正常收看(实际上就算是非融合接口也无大碍)。因此,在下要做的,就是充分发挥一下这 IPTV 业务,使任一局域网设备,都能愉快地观看到 IPTV。

根据在下了解到的资料,上海电信的 IPTV 业务采用了 A/B 面结构,A 面用作鉴权、B 面则用作转发。其中,鉴权是由 SDN 网关进行的,IPTV 盒子可以获取到两个 IP 地址,多出来的一个是 23 开头的 IPTV 用专网地址;转发经由虚拟局域网 VLAN 51/85 进行,VLAN 51 实现回看服务(点播),而 VLAN 85 则实现直播服务(组播)。

利用 udpxy 服务转发 IPTV 直播流#

在下不需要回看服务,只需能够观看直播服务即可,因此,只要能在一台接了 SDN 网关的局域网设备上把 VLAN 85 这一专网转发出来,就可以实现在任意局域网设备中观看 IPTV 了。此处,通常采用的方案是 udpxy,这样就可以将组播的数据流变成 TCP 协议的单播流,也避免了 IPTV 视频流在数据链路层广播。

一般来说,udpxy 服务运行在路由器上就好,当然其他接了 SDN 网关的 NAS 之类的设备也是可以的。主流的路由器系统都支持运行 udpxy 服务,这里以在下家中路由器的 Padavan 系统为例,其余路由器系统诸如 Openwrt 等,网上业有不少配置方案,故在此不做赘述:

进入路由器管理页面,选择内部网络(LAN) - IPTV,做如下配置:

iptv-ctsh-1

外部网络(WAN)- 端口隔离和 VLAN 过滤一栏做如下配置:

iptv-ctsh-2

如果将来想实现在公网观看家中 IPTV,则需要去防火墙 - 通用设置 - 从外网访问路由器服务中打开允许外网访问 UDP-HTTP 代理开关,并设置外网 UDP-HTTP 代理端口

一切设置完成之后,浏览器访问 http://YOUR_ROUTER_IP:4000/status 即可看到 udpxy 服务运行状态,在 Multicast address 一栏可以看到 IPTV 的专网 IP 已经被成功获取。

iptv-ctsh-3

这张截图中,在下有一个 Active clients,是当时在下在用手机看 CCTV-16 4K 奥林匹克频道(这一频道在 IPTV 盒子观看甚至需要付费)。

获取组播地址#

实际上到上一步结束,局域网内设备就已经有了看 IPTV 直播流的能力了,只不过还缺少各个频道的组播地址,只有拥有组播地址,才能通过 http://YOUR_ROUTER_IP:4000/udp/MULTICAST_ADDRESS 这个地址来看到各个频道的直播流。以在下的 udpxy status 截图为例,其中出现的 239.45.0.12<5140> 即为 CCTV-16 4K 奥林匹克频道的组播地址,也就是说,在局域网中任意支持网络视频流的播放器中输入 http://YOUR_ROUTER_IP:4000/udp/239.45.0.12:5140 即可观看到 CCTV-16 4K 奥林匹克频道的直播流了。

搜集各频道的组播地址着实是令人头疼的一件事,毕竟 IPTV 随随便便就有几十甚至上百个频道,每一个频道都有一个对应的组播地址;不过这还没完,这些组播地址还不是一成不变的,它们会随着频道的调整等种种原因发生变动,因而,维护组播地址令个人折腾 IPTV 直播流的成本上升颇高。

好在还是有人把这事给解决了,恩山无线论坛的 deny12138 大佬通过抓取机顶盒数据,实现了自动更新组播地址,甚至还附带准确的节目单等信息,并定期将信息生成数据并上传。这个组播源去除重复频道和购物频道,设置了精致的台标,还适配了 xteve 的 UDPxy 地址替换,实属不可多得。大佬发布的的原帖在此,这里附上组播源列表以及 EPG 节目单

收看 IPTV#

拿到组播地址后,就可以在任意局域网设备中愉快地收看 IPTV 了,deny12138 大佬提供的源支持 xteve 的 UDPxy 地址替换,在 xteve 中就可以自动替换成自己的路由器地址正常观看了,若使用其他不具备此功能的播放器,则需要自己修改 udp://@ 字段为 http://YOUR_ROUTER_IP:4000/udp/ 才可收看。在下直接在 Github 上开了个仓库,用 Github Actions 每天自动拉取大佬的组播源,改了之后传到 Gist 上托管,这样一来就方便许多。

另外,如果想要在公网观看家中的 IPTV 视频流,也是相当简单的,只要在 YOUR_ROUTER_IP 字段处填上 DDNS 地址即可,或是使用 VPN 连回家(前提是得有公网 IP),若没有公网 IP,也可自己折腾内网穿透。

至于播放器的选择,诸如 xteve 这种专门为观看 IPTV 设计的自然最好,如果观看频次少,用 PotPlayer 观看也并非不行,只是没法观看台标和节目单而已;安卓上则可以用 Kodi、Televizo 等 APP,选择也很多;iOS 也有 APTV、iPlayTV 等应用可供选择。

最后放一张 Windows 端使用 Potplayer 观看的效果作结:

iptv-ctsh-4

上海电信 SDN 网关全局域网皆可收看 IPTV 的实现
https://champhoon.xyz/posts/note/iptv-ctsh/
作者
澄沨
发布于
2023-10-02
许可协议
CC BY-NC-SA 4.0
相关文章 智能推荐
1
华硕路由器实现远程唤醒局域网设备的笔记
偽技術开发日常 从知名度很高的 TeamViewer 到新兴的 ToDesk,在下前前后后接触了不少远程控制软件,由于学校寝室和家中各有一台电脑,因而远程控制软件几乎成为了在下的刚需。但是,远程控制需要被控端一直处于开机状态待命,而要一直保持电脑开机又不太可能,所以远程开机是绕不开的一个问题。
2
使用甲骨文免费云服务器搭建 frp 内网穿透工具的笔记
偽技術开发日常 在之前的文章,华硕路由器实现远程唤醒局域网设备的笔记中提到,在下有着远程控制设备的刚需,而得益于寝室电信宽带分配的公网 IP,在下可以通过 DDNS 和 VPN 功能优雅而又轻松地满足这一需求。然而鉴于魔都电信的性价比对于寝室成员来说并不高,在使用了一年多以后,寝室成员终为魔都移动所折服。魔都移动虽在寝室日常使用时体验并无明显短板之处,但是由于移动手中的 IP 资源稀缺,导致寝室的宽带失去了公网 IP。于是,内网穿透就成了在下所必须折腾的一道坎。
3
在 KOReader 上显示直排文本
偽技術开发日常 为了持续精进日语水平,也为了一并练习阅读直排文本时的速度,在下最近开始了阅读日文原版轻小说的计划。虽然在下手头上不缺纸质的阅读材料,但是作为一名不折不扣的电子书爱好者,电子版的轻小说自然也是不可缺少的。不过,当在下在尝试把直排电子书导入 Kindle 阅读时,却发现了一个重大问题,KOReader 似乎并不支持显示直排文本……

目录