前面的文章,写了在家庭组网里面,怎么用软路由(OpenWrt)实现将运营商的IPTV的组播转到局域网内的单播,实现不用运营商的盒子,在任何终端(电视、平板、手机)上通过上网的wif就能管看IPTV,具体过程见OpenWrt应用场景:IPTV融合介绍。
但是这个有个实现过程存在几个问题
这个问题,主要是回看有朋友留言问回看需要怎么配置。接下来就看下具体怎么实现IPTV回看吧。
开始之前,回顾一下之前单线复用或者双线复用的简单示意图如上图所示
有了以上了解,再来看回看的配置。
首先,回看是单播地址,那问题就很简单了,只要网络能通就行,先找下回看的地址是什么?
在之前的找鉴权抓包的过程中,也顺带抓了节目列表。比如成都电信,这个请求/EPG/jsp/getchannellistHWCTC.js
下,就有所有的组播和回放的单播地址,比如这样:
其中ChannelURL就是直播的组播地址,TimeShiftURL就是回看的单播地址。这里看到非常长,其实后面是一些回放的参数,比如时间什么的,到.smil即可。
其实这个地址自己抓包麻烦的,网上找下吧。比如成都电信,可以参考老张的列表四川成都电信IPTV组播地址
另外就是需要找到EPG节目单。这个可以简单理解有了回看的网络url,那我只是支持回看,至于回看到以前什么时间段的,看什么节目,靠EPG节目单来控制的。 这个部分很多公共的可以用,当时也可以自己建,git上很多自己建的方案。
有了地址,就看如何打通网络。其实我们家里面机顶盒能观看回放的节目,说明iptv这条线除了正常的组播流量,回放的流量也是通的。我们只需要保证我手机、电视等客户端到这个回看的地址是通的就行。
之前再说v6的时候,我们说过,我们上网的流量路径都是这样的:
客户端—>路由器lan口—>路由器wan口—>上一级路由器lan口—>上一级路由器wan口....-—>服务端
比如我要访问微信,我从客户端出来,到到家里面的路由器的lan口,然后从wan口出去,到运营商的路由器,再到骨干网络,最终到微信服务端。我们在客户端上,是指定了默认路由,在家用路由器上也指定了默认路由,流量才能一步一步的出去。
比如我这里,路由器上地址情况:
root@openwrt:~# ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 192.168.1.101/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 10.149.252.160/19 brd 10.149.255.255 scope global eth2
valid_lft forever preferred_lft forever
5: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
inet 192.168.5.1/24 brd 192.168.5.255 scope global br-lan
valid_lft forever preferred_lft forever
这里eth0是WAN口,br-lan是路由器的LAN口。
客户端的路由情况
default via 192.168.5.1 dev ens18 proto dhcp src 192.168.5.198 metric 100
路由器上路由情况
default via 192.168.1.1 dev eth0 proto static
路由器lan口收到客户端的数据包,通过防火墙设置,然后wan口转发出去,这就是路由器能够上网的原理。
类比这里,那就简单了,我回看的地址,不在互联网的骨干网上,或者在骨干网上,但是某一级路由没有给我们放通,那我们就手动指定路由。 这里的方法就是在OpenWrt上手动指定路由。路由的下一跳是TV口的网关(因为机顶盒能通回看地址,所以TV口也是能通的)
然后把TV口的防火墙区域 指定到WAN口。这样就可以通过lan到wan口的转发了。
“其实防火墙区域指到LAN口也行,正常在lan区域转发
有了以上的基础,配置就简单了
1.路由配置:网络--> 路由
路由这里,根据会看地址的范围来添加,有几个地址就添加几个,也可以像这里一样添加大段地址。
2.防火墙配置 网络—> 接口—>TV口,编辑—> 防火墙设置
将TV口的防火墙区域指向WAN口
路由器配置完成之后,就可以在播放器上配置了。这里需要选择支持回看的播放器,这里选择DIYP。 配置主要有两个地方,一个是节目列表,一个是EGP电子节目单。 DIYP需要是txt格式的节目列表,格式如下:
所有频道,#genre#,
CCTV-1高清,rtsp://182.139.235.40/PLTV/88888895/224/3221228504/658582939.smil
CCTV-2高清,rtsp://182.139.235.40/PLTV/88888896/224/3221227983/10000100000000060000000003751359_0.smil
CCTV-3高清,rtsp://182.139.235.40/PLTV/88888895/224/3221228508/666944883.smil
...
这里成都电信直接把老张的地址列表复制下来即可。将地址准备好之后,托管到路由器上即可。
DIYP设置—>接口设置—>节目地址:
同样的方式设置EGP的电子界面的:
DIYP设置—>接口设置—>EPG接口
epg接口这里直接用老张的,也可以选择其他的。当然也可以选择自建,看自己的情况吧。
配置完成就可以顺利的观看会看信息了。这里我在21点40回看了7点的新闻联播。
采用回看的地址,来改进组播转单播,实现IPTV的融合,在支持看直播的同时,也可以同时观看回看,该方案还跳过了运营商组播客户端数量的限制,真正实现了丢掉运营商的机顶盒,在任何设备上观看IPTV了。
这个也是其中一个朋友留言的问题,查了下资料,也折腾了几天,在帮朋友解决问题的同时,也改进自己的融合方案。
关于播放器的问题,困扰了很久,最开始在电脑上尝试,我用VLC的播放器,用rtsp格式死活播放不了,一直以为是网络的原因。后面问了论坛大佬,才知道是VLC不支持,在手机上换成DIYP就可以了。
另外,关于网络的打通。加路由是最简单的, 其实还可以做MWAN,将iptv单独做一个上行的wan口。过程中也尝试过了,其实都可以。不过iptv的鉴权信息这些,还是需要根据本地的情况,自己构建了。
以上就是改进的IPTV融合方案了,过程中参考借阅了很多大佬的经验,但是过程中的图以及配置细节都是自己在实际环境中仔细研究的,希望看到这篇文章的朋友,不仅能配置,也知道其中为啥要这么配。