家里有个联通闲置的IPTV,一直想着拿来利用一下,总倒不出时间,趁着周末搞一下,思路很清晰,就是用openwrt安装udpxy程序实现组播到单http流的转发。没想到最费时间的是抓包整理频道清单。
1.硬件准备
先刷机,从家里扒拉出了一个吃灰的Netgear WNDR4300,上次刷机已经是好几年前了,现在准备给刷一个OpenWRT 22.03.7,先去网站下载对应的刷机包,WNDR4300在19.07之前对应的架构名是xr71xx,21.02之后就改名成ath79了,到下面路径去下载
接着找一个卡针,到路由器背面reset孔上按住后再通电开机,等待橙色灯闪烁结束就可以了,如果不行,就再关机再来一遍,我是试了2次才好用。
接着拿笔记本直连lan口,ip配置192.168.1.2,命令行ping 192.168.1.1,如果通了,说明成功了。
接着到控制面板-添加删除程序里启用WIndows组件:TFTP 客户端。
打开cmd,cd到openwrt-22.03.7-ath79-nand-netgear_wndr4300-squashfs-factory.img目录
执行下面指令,继续等待几分钟
1 | tftp -i 192.168.1.1 put openwrt-22.03.7-ath79-nand-netgear_wndr4300-squashfs-factory.img |
等到192.168.1.1能继续ping通了继续下一步。
2.安装udpxy和必要服务
WAN口先随便接到可以上网的局域网中,因为要下载软件包(等将来接到IPTV口上,Openwrt就不能上网了)
先ssh登录到Openwrt路由器中,执行以下命令
1 | opkg update |
配置igmpproxy
1 | vi /etc/config/igmpproxy |
启用并启动igmpproxy服务
1 | /etc/init.d/igmpproxy enable |
配置udpxy
1 | vi /etc/init.d/udpxy |
启用并启动udpxy服务
1 | chmod +x /etc/init.d/udpxy |
3.网络结构
本文通过旁路方式接入IPTV视频流服务,所以此OpenWRT路由器要关闭dhcp,更改LAN IP为192.168.1.2。
讲光猫IPTV的接口(通常是LAN2)接到OpenWRT的WAN口。
自此OpenWRT已经成功的接入家庭局域网了。
4.更改防火墙设置
在防火墙中添加一条策略,允许IGMP和UDP数据到路由器本机
网络-防火墙-通信规则-添加
名称:IPTV
协议:UDP,IGMP
源区域:wan
目标区域:Device(input)或者叫This device
5.抓包获取IPTV组播地址
由于网上只有一个3年前的大连联通的IPTV的播放清单,并且已经不好用了,只好自己抓包分析,自己测试了。
经过抓包分析发现,现在按下面的方式播放视频流已经不好用了
1 | http://192.168.1.2:8080/udp/232.0.0.1:8008 |
经查发现大连联通的IPTV升级了验证功能,增加了SSM(Source-Specific Multicast)验证,也就是组播请求时必须带源IP,也就是定义哪源个IP来发这个组播。
继续抓包分析可以找到这样的字样:
1 | IGMPv3 Membership Report |
这个218.24.1.1就是源IP,修改播放地址为下面方式就好用了。
1 | http://192.168.1.2:8080/udp/218.24.1.1@232.0.0.1:8008 |
最后就是漫长的抓包和数据整理,改名频道的过程了,做成m3u8文件就像下面这样就可以了。
1 | #EXTINF:-1 group-title="CCTV",CCTV1 |
这个#EXTINF这一行就是定义下一行url的频道分组和频道名的。
