迫于看电视,折腾一下IPTV,网上各种帖子讲的很复杂,如果是用的江苏电信且没有特殊需求,实现多设备看IPTV还是比较容易的…
目标
实现局域网内各个终端包括其他电视、电脑、手机都能稳定观看直播(实际上外网也能连回家里看);保留电信IPTV盒子的功能。
网络环境
运营商:江苏(苏州)电信
光猫:友华PT926E(天翼网关3.0)
路由器:UBNT ER-X
IPTV抓包和测试
抓包
这一步的目的主要是为了抓取直播源和进行测试,不过现在网上可以找到很多江苏电信的直播源,经过测试,只要连接iptv口,不用特殊操作就能播放(下面内容建议跳过,直接看 测试 部分)
抓取可以买个usb网口,一个网口接光猫IPTV口,一个接IPTV盒子,然后进行桥接。在Windows下可以用wireshark进行抓包(记得安装 npcap ),后续操作大体可以参考 这个视频 。
这里其实涉及到江苏电信(浙江电信好像也是)是用的带鉴权的DHCP。就是说如果要在路由器上获取IP,需要option12(盒子序列号)、option60(加密的认证数据),再拷贝盒子MAC地址进行模拟,但实际上不用获取IP也能通过组播地址播放。对认证感兴趣的可以看这几个贴子: 浙江电信IPTV DHCP鉴权option12与option60获取方法分享 、 江苏泰州IPTV破解IP认证,实现DHCP获取IP
经过测试,使用wireshark进行关键词rstp、igmp抓包,也并不能找到明文的组播地址,所以老老实实用网上的源就好,基本不会变动,可以长期使用。如: 抓的江苏电信IPTV组播地址(2021-12-15) 、 IPTV(github)
测试
可以用电脑直接连接光猫的IPTV口,使用PotPlayer等软件播放组播地址,如
rtp://239.49.8.19:9614
。
网络调整
光猫设置
因为路由器和光猫都在弱电箱里,不需要使用网上提的的较多的单线复用(路由器和光猫只有一根线连接的情况),只要再接条线到路由器再设置即可。由于默认只有一个IPTV口,且这个口已经连到了房间的IPTV盒子上,首先需要登陆光猫把IPTV绑定到一个闲置的百兆口上,也就是光猫上有两个IPTV口。
这时候就需要先获取光猫的超密了,我的光猫是天翼网关3.0,参照
【教程】使用BurpStuite抓包获取天翼网关超级密码并更改天翼网关为桥接模式
,就能获取明文密码了。主要是利用了一个漏洞,浏览存储目录的时候,拦截请求修改请求目录参数,访问根目录对密码文件进行拷贝,拦截修改情况这步用fiddler也是可以的。(部分光猫似乎不是明文,可以尝试文章评论区的方方法)
拿到超密后,登陆修改业务绑定信息,INTERNET_B_VID是宽带业务,Other_B_VID是IPTV业务,
把宽带业务的绑定端口减少一个
,我这边是把端口4取消绑定了,端口2是原有的IPTV端口。再
把IPTV业务绑到空出来的端口4
上,这样就
保证IPTV盒子和路由器都能接入IPTV
。
路由器设置
OpenWRT设置参考本文评论区首先要将路由器的eth4端口(将要和新增的iptv口连接的端口)从Switch0桥接中删除,也就是将接口独立出来,目的是阻止IPTV的组播流量进入局域网(据说会引起风暴,降低网络性能,网上的很多帖子似乎是通过vlan、防火墙流量配置等方法解决的)在我的路由器上如图设置即可。
第一张截图有误,应该是点击switch0-Action-config修改
用网线把光猫上新增的IPTV口(端口4)连到路由器的eth4,完成物理连接,此时再登陆路由器管理页面可以看到已经连接上了。
UDPXY转HTTP(方法一)
UDPXY是把组播流量代理转换为HTTP,一是防止组播流量进入局域网,二是HTTP更加稳定,各终端通用性好。如果是OpenWRT可以安装相应luci插件进行设置,ER-X的EdgeOS基于Debian,需要下载编译好的 二进制文件 ,再新建个服务用于启动即可。
拷贝或下载到路由器用户目录后,SSH登陆,
chmod +x udpxy_erx
sudo mv udpxy_erx /usr/bin/udpxy
添加执行权限,
手动执行(eth4是连接iptv口的端口)/usr/bin/udpxy -S -a 192.168.2.1 -p 4022 -m eth4 -c 10 -B 1MB -M 30
先测试一下能不能用。
浏览器打开
http://192.168.2.1:4022/status
正常显示,播放器打开
http://192.168.2.1:4022/udp/239.49.8.19:9614
可以播放,测试成功。
接着创建service
sudo vi /etc/systemd/system/udpxy.service
(User要设置成ubnt,试了root不行),这里设置了ExecStartPre等待30秒执行,防止重启后启动失败
[Unit]
Description=Udpxy
After=network.target
[Service]
ExecStartPre=/bin/sleep 30
ExecStart=/usr/bin/udpxy -S -a 192.168.2.1 -p 4022 -m eth4 -c 10 -B 1MB -M 30
User=ubnt
[Install]
WantedBy=multi-user.target
保存后
sudo systemctl daemon-reload
sudo systemctl start udpxy
sudo systemctl enable udpxy
启动服务、设置开机启动,此时就基本完成配置了。
MSD_LITE转HTTP(方法二)
据说性能比UDPXY强上数倍,更顺畅。
sudo mv msd_lite.conf /etc/
移动配置文件
sudo vi /etc/msd_lite.conf
编辑配置文件(端口已设置为4022,接口eth4),找到相应位置,按需求修改
...省略
<HTTP>
<bindList>
<bind><address>0.0.0.0:4022</address><fAcceptFilter>y</fAcceptFilter></bind>
<bind><address>[::]:4022</address></bind>
</bindList>
<hostnameList> <!-- Host names for all bindings. -->
<hostname>*</hostname>
</hostnameList>
</HTTP>
...省略
<multicast> <!-- For: multicast-udp and multicast-udp-rtp. -->
<ifName>eth4</ifName> <!-- For multicast receive. -->
<rejoinTime>0</rejoinTime> <!-- Do IGMP/MLD leave+join every X seconds. -->
</multicast>
...省略
下面的步骤和方法一类似,不再赘述
chmod +x msd_lite_erx
mv msd_lite_erx /usr/bin/msd_lite
sudo vi /etc/systemd/system/msd_lite.service
[Unit]
Description=MSD_LITE
After=network.target
[Service]
ExecStartPre=/bin/sleep 30
ExecStart=/usr/bin/msd_lite -c /etc/msd_lite.conf
User=ubnt
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start msd_lite
sudo systemctl enable msd_lite
多设备播放
PC
WIndows上使用Potplayer,Mac上使用IINA ,可以做一个 m3u8列表 方便选取观看,网上的iptv源列表,替换成下列格式,命名为xxx.m3u8
,播放器打开即可播放,完整见
直播(江苏电信).m3u8
#EXTM3U
#EXTINF:-1,CCTV1HD
http://192.168.2.1:4022/udp/239.49.8.19:9614
#EXTINF:-1,CCTV2HD
http://192.168.2.1:4022/udp/239.49.8.50:9802
#EXTINF:-1,CCTV3HD
http://192.168.2.1:4022/udp/239.49.9.31:6000
#EXTINF:-1,CCTV4HD
http://192.168.2.1:4022/udp/239.49.8.51:9806
#EXTINF:-1,CCTV5HD
http://192.168.2.1:4022/udp/239.49.8.75:8000
#EXTINF:-1,CCTV5+HD
http://192.168.2.1:4022/udp/239.49.8.18:9610
电视
Android电视和盒子可以安装
DIYP影音
,然后在设置内自定义播放列表,打开对应URL就可以进行设置,格式为
频道名称,http地址
,完整见
直播列表(DIYP影音).txt
移动端
可以播放m3u8的播放器即可,或者手动复制http链接使用。
其他
外网播放
操作是可行的,不建议使用,占用大量上传,还存在一定风险。
参考
https://github.com/itiddler/udpxy_erx
https://blog.friskit.me/2020/05/31/bjunicom-network.html
https://www.bilibili.com/read/cv9858309
https://www.right.com.cn/forum/thread-7722652-1-1.html
https://www.right.com.cn/forum/thread-794304-1-1.html