本帖最后由 cayxxx 于 2018-3-16 12:10 编辑
比较懒,不废话。
坐标广东,ISP移动。
参考了官方文档:
https://openwrt.org/docs/user-guide/services/udpxy
https://openwrt.org/docs/guide-user/network/wan/udp_multicast
效果:机顶盒可照常看直播和点播,无须知道它要连什么服务器,其它终端可以看UDP/HTTP直播+正常上网,端口不限,只要是LAN口随便插,再接个交换机多连几个也行(接交换机一定要带igmp snooping支持的,不然会导致udp组播阻塞网络,出现卡顿或花屏。)
安装igmpproxy,udpxy(如需要udp转http供无线设备观看则安装),mwan3,luci-app-mwan3
重要:关于端口因为openwrt的缺陷需要额外设置,详见https://www.right.com.cn/forum/thread-308743-1-1.html
新建一个vlan,ID随意,哪个端口随意,根据自己需要,只要独立一个vlan用来插IPTV就行了。
新建接口,一般vlanid是多少就是eth0.多少。具体认证是DHCP还是PPPOE根据实际设置。
区域一定要新建一个!!别绑入现成的WAN,这可以避免很多问题!!
反正弄成三种颜色就没错了
把WAN口的网关跃点数设置为10,IPTV的设置为20,可以解决默认路由问题(方法来自@guangzi ,特别感谢!)
防火墙里照着这个效果来设置就行了
mwan3新建两个接口,名字是两个区域
不要多余的设置,因为不是要达到负载均衡。iptv的规则源地址选机顶盒的IP,并且要在第一位。
给机顶盒配置静态DHCP地址。
- cat /sys/devices/virtual/net/br-lan/bridge/multicast_snooping
复制代码
结果:找不到文件代表不支持igmp snooping,直接gg,为1代表已开启,为0代表未开启,需要在/etc/config/network里的lan接口添加一行命令:
配置igmpproxy,修改/etc/config/igmpproxy:
- config igmpproxy
- option quickleave 1
- config phyint iptv
- option network iptv
- option direction upstream
- list altnet 183.235.0.0/16 #组播源地址,不知道的可以用0.0.0.0/0替换
- config phyint lan
- option network lan
- option direction downstream
复制代码
配置防火墙/etc/config/firewall:
- config rule #这条规则的目的是接收DHCP报文,如果IPTV是通过其它方式认证的可以不加
- option target 'ACCEPT'
- option proto 'udp'
- option name 'IPTV-DHCP' #名字随意,没有这行也没关系,下同
- option family 'ipv4'
- option src 'iptv'
- option dest_port '68'
-
- config rule
- option target 'ACCEPT'
- option name 'IPTV-IGMP'
- option family 'ipv4'
- option proto 'igmp'
- option src 'iptv'
-
- config rule
- option target 'ACCEPT'
- option dest 'lan'
- option name 'ALLOW-MULTICAST'
- option proto 'udp'
- option dest_ip '224.0.0.0/4'
- option family 'ipv4'
- option src 'iptv'
- config rule #这条是udpxy需要的,不用可不加
- option name 'udpxy'
- option src 'iptv'
- option proto 'udp'
- option dest_ip '224.0.0.0/4'
- option target 'ACCEPT'
- option family 'ipv4'
复制代码
重启,现在已经可以随便插机顶盒都能正常工作了。
如要转成http流,下面是udpxy的配置,注意接口根据实际配置: 如果没有luci界面也可以通过修改/etc/config/udpxy来配置: - config udpxy
- option respawn '1'
- option verbose '0'
- option status '1'
- option port '4022'
- option disabled '0'
- option bind 'br-lan'
- option source 'eth0.3'
复制代码
ok,全部完成! 高清无压力 4k也可以,但感觉还是油管的流畅,应该是帧率问题
最多开5个高清,再多就开始花了。可能是接了个百兆交换机的锅,也可能到IPTV端口上限了。
今天把K2P刷了lean大的PandoraBox,代替原来的百兆941当交换机,果然能看多两个频道了,但是第8个打不开,应该是限制了最多同时看7个频道。
想到啥说点啥: 关于播放器:用potplayer播放,硬解不流畅,软解就很顺可能是我的显卡不行,VLC不用设置也很流畅,并且缓冲也比较快,看来VLC对流媒体比较擅长,不过视频效果感觉potplayer更胜一筹。
关于抓IPTV地址:一个个频道换台那是最没效率的办法,几百个频道少说也要半小时吧,而且还要查找过滤。那机顶盒自己是怎么知道直播地址的呢?总不会它也一个个频道轮个遍吧。 一般来说,它也是从服务器下载的,既然是下载的那就好办了。机顶盒从开机到能看直播中间肯定已经下载了直播地址,于是我们就可以只抓这期间的包。 直播地址一般都以udp://或rtp://开头,那么我们就可以直接搜索。在第一个结果上选择追踪http流 编码改成utf-8,查找一下udp://看看是不是我们需要的列表。果然如此,保存之后用notepad++等工具编译好就ok了。 那么万一运营商心血来潮,把直播地址改了呢,那我们岂不是又要抓一次?那得多麻烦。所以我们要一劳永逸解决它,把它的获取方法找出来。 再看回刚才那个包的,记一下它的顺序号,在过滤器里输入http过滤。 直播频道列表是返回结果,那么它前面肯定还有个请求的动作,果不其然,看最左边的小箭头所指,上面的getAllChannel就是了 以后就可以直接访问这个地址获取最新的频道列表了。
关于系统日志出现大量Entry not found错误,如
- Tue Mar 6 19:49:41 2018 daemon.err uhttpd[1166]: uci: Entry not found
- Tue Mar 6 19:49:46 2018 daemon.err uhttpd[1166]: uci: Entry not found
- Tue Mar 6 19:49:46 2018 daemon.err uhttpd[1166]: uci: Entry not found
- Tue Mar 6 19:49:51 2018 daemon.err uhttpd[1166]: uci: Entry not found
复制代码原因是luci-app-mwan3,只需把/usr/lib/lua/luci/view/admin_status/index/mwan.htm的内容注释掉就可以解决
- <!--%+mwan/openwrt_overview_status%-->
复制代码
关于多个设备同时看一个台时,其中一个换台,其它设备播放卡顿的问题:
igmpproxy默认开启了igmpv2中的快速离开(quickleave)功能,收到离开报文后,立刻删除成员端口,并向上行方向发送离开报文,所以其中一个设备请求离开后, 组播会出现断流,直到其它设备重新发起加入请求或者igmpproxy发起轮询收到回应的时候才会恢复。解决办法就是把/etc/config/igmpproxy中的option quickleave数值改为0,关闭该功能,igmpproxy收到离开报文后,会发起轮询并等待响应,大约10秒,在此等待期间保留组播状态,不会断流,超时后没有发现特定组成员才会向上行方向发送离开报文,所以如果ISP把同时观看频道数限制在一个比较低的数值时,关闭快速离开可能会引起换台延迟卡顿。
发帖注意事项
请勿胡乱发帖:https://www.right.com.cn/forum/thread-8307840-1-1.html
账户手机验证:https://www.right.com.cn/forum/home.php?mod=spacecp&ac=plugin&id=jzsjiale_sms:home
|