我最近翻出了吃灰多年的IPTV机顶盒。在这个短视频时代,很少有人看传统的电视节目了,电视可以不看,但不能没有,所以我决定还是把它装上。但是一看到那个遥控器,我的强迫症就犯了:长得丑不说,看个电视还要用两个遥控器,实在是不方便。那么有没有办法直接在电视机上看IPTV直播呢?经过一天的折腾,我终于搞定了直接在电视机上播放IPTV电视节目,而且家庭局域网内所有的电脑、手机、平板也都能收看。整个过程记录如下,照着做就行。

先弄懂:IPTV 是怎么工作的
在进入正题之前,先了解一下IPTV是怎么工作的。运营商的IPTV和普通宽带上网是两条"互不相干"的通道,即使它们共用同一根入户光纤和同一个光猫。理解这一点,是后面所有操作的前提。
我家的主路由是一台J4125处理器的软路由,直装的x86_64的OpenWRT系统,这个机器有4个网口,硬件名分别为eth0、eth1、eth2、eth3。eth0为WAN口,连接到光猫的Internet网口,通过PPPoE拨号接入互联网;eth2为LAN口,连接到主交换机;eth1和eth3暂时空置。光猫上有一个IPTV网口,专门承载IPTV业务,机顶盒插这个口,用内置的PPPoE账号拨号,接入运营商的IPTV网络。

机顶盒起的作用有两个:一是拨号接入IPTV网络,二是将接收到的电视节目流媒体数据包解码成HDMI信号传输给电视机播放。现代的电视机都内置了智能系统,本身就具备网络连接和视频解码的功能。所以我的思路就是:用OpenWRT路由器代替机顶盒进行PPPoE拨号接入,再把IPTV组播视频流转换成单播流,在电视机上用Kodi这样的播放器直接播放。这样就能彻底抛弃"机顶盒"这个硬件角色。
这里简单解释一下什么是"组播"、什么是"单播"。IPTV的"直播"本质是IP组播(Multicast):一个组播组(比如 239.x.x.x:port)里,运营商机房不停往外推节目流,机顶盒想看哪个台,就发一条IGMP Join请求加入那个组,加入之后就能持续接收这个组的数据流。组播流量在局域网中会被泛洪到所有设备,WiFi下体验极差,经常卡顿或者干脆收不到。而单播(Unicast)则是点对点的HTTP流,任何设备都能稳定播放。所以中间需要一个"组播转单播"的转换器。

传统的方案是用udpxy来做这个转换。不过这次我没有用udpxy,而是选择了功能更强大的rtp2httpd——它除了组播转单播,还内置了一个网页版播放器,浏览器打开就能直接看电视,而且播放列表格式跟udpxy完全兼容(都是 /udp/组播地址:端口 的形式),之前为udpxy生成的m3u列表可以一字不改直接使用。区别放到第五节细说。
以下教程基于两个前提:光猫IPTV口无VLAN(直接透传)、机顶盒认证是PAP明文(密码抓包直接可见)。有的运营商会在光猫IPTV口给流量打上VLAN标签,桥接/拨号前要先剥离VLAN,具体可以自行了解OpenWRT中VLAN的设置方法;如果机顶盒认证不是明文,抓包数据中就提取不出密码,需要通过其他途径获取机顶盒的PPPoE账号密码。
一、准备抓包
1.1 接线
机顶盒插eth2,光猫IPTV口插eth3。
1.2 把 eth2 和 eth3 做成一个二层桥接 br-iptv
打开浏览器访问路由器的管理页面,登录后:
菜单:网络 → 接口,点"添加新接口"按钮。
名称填iptv,"在以下设备上创建接口"下面勾选eth2和eth3,协议选"不配置协议"。
点"保存并应用"。会自动创建br-iptv桥,并让eth2、eth3都归它管。
注意,"不配置协议"是关键:别给它配IP,也别把它加进LAN/WAN区域。这个桥的唯一作用就是让光猫和机顶盒的流量透明穿过,供你抓包,设了IP反而会干扰机顶盒的PPPoE。
二、抓包
这一步必须用命令行(LuCI没有抓包界面),SSH登录路由器,执行下面这条指令:
tcpdump -i br-iptv -nn -s 0 -w /tmp/iptv.pcap
给机顶盒通电开机,开机之后机顶盒会自动进行PPPoE拨号,然后在机顶盒上依次切几个台(每个台停几秒),触发IGMP加入和组播流。切完台,回终端按Ctrl+C停止抓包。
注意播放节目的时间不要太长,因为抓包会把视频流也抓下来,时间长了抓包文件会很大。
三、读出密码和组播地址
在电脑上用Wireshark打开抓包文件iptv.pcap。它自带抓包分析,能看到明文密码。
3.1 获取 PAP 密码
在Wireshark顶部过滤框输入 ppp.password,下方列表会直接列出携带密码的PAP报文。点开一个,在协议树里展开 PPP → PAP → Password,明文密码就在那里;用户名同理(ppp.peer_id 或 ppp.user_id)。
3.2 获取组播频道地址
笨办法是用命令行工具tshark把整份pcap里的组播地址、端口以及频道名称提取出来。不过一百多个频道手工整理实在太麻烦,现在AI这么强大,完全可以让AI帮我们写一个Python脚本来完成这个任务,顺便生成最终的m3u文件供播放器使用。
最终生成的m3u文件长这个样子:
#EXTM3U #EXTINF:-1,CCTV-1 http://192.168.1.1:4022/udp/239.0.1.2:1234 #EXTINF:-1,CCTV-2 http://192.168.1.1:4022/udp/239.0.1.3:1234 #EXTINF:-1,CCTV-3 http://192.168.1.1:4022/udp/239.0.1.4:1234
这里的地址格式就是udpxy风格:http://路由器IP:4022/udp/组播地址:端口。记住这个格式,后面第五节配置rtp2httpd的时候会用到——端口保持4022,这份列表到最后一行都不用改。
四、软路由代拨号
4.1 建立 PPPoE 接口
进入路由器管理后台,把抓包用的桥停掉,再把eth3单独建一个PPPoE接口:
网络 → 接口,找到iptv (br-iptv),直接点"删除"删掉整个桥。
点"添加新接口":名称IPTV_WAN,设备选eth3,协议选PPPoE,填上抓包得到的账号和密码。
展开"高级设置":把"默认网关/使用默认路由"取消勾选(不让IPTV接口抢你的上网默认路由,这一步很重要,否则你的上网流量会跑到IPTV专线里去)。
防火墙设置里面把IPTV_WAN加入wan区域,保存并应用。
然后进入网络 → 防火墙 → 通信转发,将LAN到IPTV_WAN的转发设置为允许。
4.2 验证拨号成功
回到 网络 → 接口,找到IPTV_WAN,点"连接"。不出意外的话,几秒钟之后接口状态会变成"已连接",并且拿到了10开头的IPv4地址,就说明认证通过、已连接上IPTV网络。
这时候就可以拔掉机顶盒,让它正式下岗了(建议先留着别收起来,出问题好回退)。
五、配置 rtp2httpd
拨号已经通了,但组播不会自己"流"到局域网里来,需要一个组播转单播的网关。传统教程一般到这一步是装udpxy,我最后没有选它,而是装了rtp2httpd,理由有三:
一是内置网页播放器。udpxy只负责转流,想看电视还得在各设备上装播放器;rtp2httpd自带一个响应式网页播放器,手机、平板、电脑浏览器打开 http://192.168.1.1:4022/player 就能直接看,电视盒子连软件都不用装。家里长辈想看电视,发个网址过去就行,这是udpxy给不了的体验。
二是播放列表格式与udpxy完全兼容。它保留了 /udp/组播地址:端口 的地址风格,我们第三步生成的m3u列表一行都不用改。如果以后想从udpxy换过来,也是无缝迁移。
三是功能更丰富。它还支持RTSP转HTTP、EPG节目单代理、快速换台(FCC)等进阶功能,状态页也能直观看到每个客户端在看什么台、占了多少带宽,比udpxy那个简陋的文本状态页好用得多。
5.1 设置 rtp2httpd
OpenWRT软件包里直接搜索rtp2httpd安装(iStore软件源里也有),装好后进入 服务 → rtp2httpd,填这几个关键项:
启用:勾选。
端口:4022(和m3u列表里的端口保持一致)。
上游接口:填 pppoe-IPTV_WAN(告诉它组播流从这个IPTV专线接口进来,这是最关键的一项,填错了收不到组播)。
保存并应用。
5.2 验证
电脑浏览器访问这个地址:http://192.168.1.1:4022/status
如果能看到状态页(服务运行时间、活跃连接、带宽等统计信息),说明rtp2httpd工作正常。
这时候电脑上用PotPlayer或者其他支持IPTV的播放器打开之前生成的m3u文件,应该就能正常播放电视节目了。也可以直接在浏览器打开 http://192.168.1.1:4022/player,用内置的网页播放器选台观看,手机平板同样适用。
六、Kodi 配置播放
Android TV上的Kodi用PVR IPTV Simple Client插件读取m3u,然后在"电视 → 频道"里看直播:
Kodi 设置 → 插件 → 我的插件 → 全部 → PVR客户端 → IPTV Simple Client → 安装。
进插件设置 → M3U播放列表路径,设置好m3u文件的路径(把m3u放到U盘或NAS上,也可以直接填 http://192.168.1.1:4022/playlist.m3u 这样的在线地址),点确定保存设置后重启Kodi。
返回Kodi主页面,进入 电视 → 频道,应该能看到m3u里的全部频道,点开就能播放了,换台速度和原生机顶盒几乎没有区别。
写在最后
到这里,改造就全部完成了:一台软路由同时接管了互联网拨号和IPTV专线拨号,机顶盒彻底退休,全屋的电视、手机、平板、电脑打开浏览器或者播放器就能看直播。整套方案没花一分钱,只是把本来就有的设备用到了极致。如果你家也是光猫桥接加软路由的组合,不妨试试。
0 条评论 最新
暂无评论。