前言
之前在 这篇博客 讲了现在家庭观影的方案,其中提到的一个点是使用网络上别人抓取到的 IPTV 的节目地址(m3u 后缀),放入 iPlayTV 中,可以直接播。但是这个节目地址过一段时间就失效了,这是因为联通 IPTV 服务器会时不时的会更新一下节目的播放地址,而 Apple TV 上填写的地址是固定的,无法及时更新,因此本文就来解决这个问题。
**使用前必读:**本人为北京联通宽带,**光猫使用桥接方式,路由器拨号,软路由 R4S 以旁路由**的方式进行连接。本教程针对该拓扑方案进行介绍,其他网络拓扑如「光猫桥接 + R4S 当主路由进行拨号,或者光猫拨号 + R4S 旁路由」等,也可以实现,但是其中关键的 R4S 设置也许跟本教程有些许的差异,建议多搜索一下,领会其中的精神,不用完全跟我的一样。
同上,如果你是使用光猫直接拨号,你可以直接从光猫接根线出来到旁/主路由上进行组播变单播;也可以直接在支持的设备上使用组播地址进行播放,就不用像我这么麻烦了。具体还要看你家的网络拓扑结构而定。
本教程仅针对北京联通 IPTV 测试成功,其他地区可能有所差异,如果发现文本中有跟地域强相关的内容,请根据你所在的地区替换对应内容。
在修改设置前,请提前先备份所有路由器、设备的设置,以防万一。
我使用的软路由是 R4S,有两个网口。如果你是跟我一样的网络拓扑,请保证你的软路由至少有两个或以上网口,因为一个需要连主路由,另一个需要连光猫。
我家的光猫网段是:192.168.1.x,主路由网段是 192.168.5.x;光猫地址是 192.168.1.1,R4S 的地址是 192.168.5.2,主路由 Lan 口地址是 192.168.5.1,路由器 Wan 口地址是 192.168.1.2。
确定是否支持白嫖
目前北京地区的 IPTV 没有增加鉴权,但是从我看到的信息来看其他地区的一些运营商有对 IPTV 进行加密鉴权,即必须用运营商给的 IPTV 盒子的 Mac 地址连接(盒子起到解密的作用),才能实现脱离盒子使用软路由进行局域网任意设备的播放。具体如何实现比较复杂,本教程不介绍这个场景。
提前下载 VLC
光猫桥接,路由器拨号的方式上网后,连接光猫后是无法上网的,因此请先提前在电脑上下载好 VLC 播放软件,以供一会儿进行测试,VLC 播放器地址在这里下载:
连接光猫
将电脑使用有线的方式连接光猫的 IPTV 口(如果光猫上没有发现 IPTV 口,则表示光猫支持混插,即接口不区分宽带和 IPTV 口,插任意一个口都行),然后在 VLC 软件中:
-
打开 File-Open Network。
-
点击下面的 Open RTP/UDP Stream。
-
Protocol 选 RTP,Mode 选 Multicast,IP Address 填:
239.3.1.241
(或者rtp://239.3.1.241
,具体哪个忘了)端口填8000
。
点 Open 之后,如果可以看到北京卫视,说明你可以免费白嫖。
这里的 `rtp://239.3.1.241:8000` 就是北京卫视的组播地址,将来该地址可能有变化,具体准确的地址,可以到 `https://raw.githubusercontent.com/qwerttvv/Beijing-IPTV/master/IPTV-Unicom.m3u` 这里,找到任意一个 rtp 路径后面的 ip 地址进行测试。
基本概念解释
不想了解的直接跳到下一节。
IPTV
根据维基百科对 IPTV 的解释:
网路协定电视(英语:Internet Protocol Television,缩写:IPTV)是宽频电视的一种。IPTV 是用宽频网络作为介质传送电视信息的一种系统,将广播节目透过宽频上的网际协议(Internet Protocol, IP)向订户传递数码电视服务。由于需要使用网路,IPTV 服务供应商经常会一并提供连接互联网及 IP 电话等相关服务,也可称为“三重服务”或“三合一服务”(Triple Play)。IPTV 是数位电视的一种,因此普通电视机需要配合相应的机顶盒接收频道,也因此供应商通常会向客户同时提供随选视讯服务。虽透过宽频网路及网际协议,但 IPTV 不一定透过网际网路,为传输品质会通过局域网传输。
有此可知,一般情况下 IPTV 都是宽带提供商提供的服务,通过它可以看电视。
组播
一种 IPTV 实现播放的技术手段,英文名叫「multicast」,也译为多播。具体概念不用弄太清楚,了解到它相比于单播:
优势在于:
-
不占用互联网带宽。
-
IPTV 盒子起到认证的作用,IPTV 运营商由于是对一个组进行广播,因此对自己的服务器压力较小。
劣势在于:
- 必须有线连接光猫 IPTV 口(有些光猫支持混插,即不区分 IPTV 口还是宽带口)才能用,因此只能连接 IPTV 盒子的设备使用,不能使用 WiFi 让家里任意设备观看网络电视。
单播
另一种较老的 IPTV 实现播放的技术手段,早期 IPTV 用户不多的时候使用该方案,相比于组播来说,彼之缺点就是其之优点,反之亦然,即:
优势在于:
- 接入后,局域网支持 WiFi ,以供任意设备播放。
劣势在于:
-
跟服务器 1 对 1 连接,服务器压力较大,用户多的时候播放会比较卡顿。
-
占用宽带的带宽,直接使用互联网连接进行的播放(就跟现在看直播一样)。
udpxy
udpxy 服务器是**一款 UDP 流转 HTTP 流的代理服务器**,可以将 IP 直播流转化为 HTTP 流,方便在各种终端上播放。
当无法直接获取到组播地址的时候,用来将组播地址转为单播地址,如组播地址是:a:b, d:e(a、d 为 ip 地址,b、e 为端口);转换成单播地址后就是统一的地址如 z/a/b,z/d/e。播放器监听这个地址 z 即可。
m3u
**M3U**(MP3 URL 的缩写)是一种播放多媒体列表的文件格式,它的设计初衷是为了播放音频文件,比如 MP3,但是越来越多的软件现在用做播放视频文件列表的格式。
m3u 文件就是一个里面含有全部播放组播地址的文本文件,在 Apple TV 或者电脑上读取这个文件地址,就可以播放其中的视频地址。
EPG
包含节目单信息,上一步知道 m3u 地址后,里面都是一个个的 ip 地址,那如何知道每个 ip 地址是哪个频道呢?这个时候就需要一个 EPG 进行配对了,EPG 含有每个地址的节目信息,甚至是频道的简单介绍,EPG 通常会随着视频信号一起广播。
网络拓扑
上手实操
动手之前先按照开头所述检查是否支持白嫖。
设置软路由
安装 udpxy 和 luci-udpxy
这一步就是常规的操作了,UI 安装最方便,如图(安装完成后先别启用,最后一步再启用):
新建/配置网络接口
这一步为了让软路由识别到来自光猫的数据。
- 在
网络-接口
中新建一个接口,随便起个名字叫IPTV
:
注意箭头的部分,我已经新建好了所以括号中有 IPTV 字样,刚新建的时候是没有的。其中 eth1 是我的 Lan 口,接的是主路由;eth0 是另一个接口,接的即是光猫(IPTV 口);这里我曾经修改过,默认情况下,eht0 是 Lan 口,eth1 是 Wan 口,不重要,这一步是将 Wan 口用作 IPTV 口。
- 配置「IPTV」接口的网关跃点与防火墙设置:
- 配置 Wan 口的网关跃点:
- 配置 Lan 口 IGMP 嗅探:
- 配置网络防火墙
配置 udpxy 服务
- 如图配置即可,注意这里的 eth0 是 Wan 口,别搞错了:
最后尝试打开 [http://192.168.5.2:4022/status]([object Object]) 验证 udpxy 服务是否启动成功:
之后,将之前使用 VLC 打开的地址 rtp://239.3.1.241:8000
改成 http://192.168.2.1:4022/rtp/239.3.1.241:8000
再尝试打开(不用点下面的 Open RTP/UDP Stream,直接在 URL 中打开)。
然后双击播放即可:
使用播放软件
我是在 Apple TV 4K 看电视的,试了几个播放软件,这里简单说说:
-
iPlayTV 不能播放,不知道为什么。
-
Fileball 上下换台没问题,但是一选台就闪退。
-
最终选择了 IIVA 同一个开发者的 app:「TV+」,港区售价 38 港币(购买第二天就限免,尴尬)。
如何实现自动更新地址
联通的 IPTV 节目播放地址,每隔一段时间都会变一次,有时候变的是端口,有时候变的是 ip 地址,这个时候再用这个办法播放就失效了,怎么办呢?
网上有好心人,经过一系列复杂监听操作,比如这个:
获取到了 IPTV 电视盒子与联通服务器通信的数据,拿到了它的地址,因此我们直接使用即可,如:
但是这里有个点是,你家里的软路由地址需要跟这位好心人的地址是一样的(192.168.123.1),然后将 udpxy 端口改为 23234,这样你就可以直接将这个地址放到 TV+ 里面即可:
否则,你就只能主动监听这个文件的变动,然后更新。
这里我花十分钟在 Vercel 部署了一个 API 服务,同时启用了 Vercel 的 Corn Jobs 服务,可以定时执行函数,来检测变动,代码如下,你也可以自己部署一套:
1 |
|
Corn Jobs 服务配置:
1 |
|
拉取该文件后若有更新,会自动更新 gist 文件:
这样,我只需要在 TV+ 中写死这个 gist 地址,即可在网友更新这个地址的时候,自动更新了。