本文共计4031字,预计需要花费 6分钟才能阅读完成。
前面的文章,写了在家庭组网里面,怎么用软路由(OpenWrt)实现将运营商的IPTV的组播转到局域网内的单播,实现不用运营商的盒子,在任何终端(电视、平板、手机)上通过上网的wif就能管看IPTV,具体过程见OpenWrt应用场景:IPTV融合介绍。
但是这个有个实现过程存在几个问题
- 运营商限制了组播的客户端数量。即同时少数播放客户端没问题,但是超过限制了,就不行了。
- 相比第一个,第二个问题其实弊端更明显,组播转单播不支持回看。一场经典的比赛,重要的新闻报道等,如果没来得及看实时的直播,那过后看回看其实就很有必要了。
这个问题,主要是回看有朋友留言问回看需要怎么配置。接下来就看下具体怎么实现IPTV回看吧。
基本原理介绍
IPTV融合的前提
开始之前,回顾一下之前单线复用或者双线复用的简单示意图如上图所示
- 光猫一根线或者两个根线到路由器。如果是双线,那就基于双线(iptv和wan口各用一根),创建两个逻辑的接口,一个wan口一个tv口。如果是单线,那就用vlan隔离,然后同样的创建出两个接口
- 在tv口上,配置上iptv的鉴权信息(账号或者dhcp)
- 在路由器上安装udpxy或者msd lite
- 客户端通过抓包或者网上搜索,找到本地的组播地址源。
- 在客户端上安装DIYP或者Kodi,通过http://路由器地址:UDPXY端口/rtp/组播地址格式构建m3u或者txt格式的节目列表
- 在上图中,黄色线部分,在tv口以下都是单播的,出了tv口上线,才是组播的。
有了以上了解,再来看回看的配置。
IPTV回看准备
首先,回看是单播地址,那问题就很简单了,只要网络能通就行,先找下回看的地址是什么?
在之前的找鉴权抓包的过程中,也顺带抓了节目列表。比如成都电信,这个请求/EPG/jsp/ [getchannellistHWCTC.js](http://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区域转发
配置步骤
有了以上的基础,配置就简单了
OpenWrt配置
1.路由配置:网络--> 路由
路由这里,根据会看地址的范围来添加,有几个地址就添加几个,也可以像这里一样添加大段地址。
2.防火墙配置 网络—> 接口—>TV口,编辑—> 防火墙设置
将TV口的防火墙区域指向WAN口
本地播放器配置
路由器配置完成之后,就可以在播放器上配置了。这里需要选择支持回看的播放器,这里选择DIYP。 配置主要有两个地方,一个是节目列表,一个是EGP电子节目单。 DIYP需要是txt格式的节目列表,格式如下:
所有频道,#genre#,
CCTV-1高清,rtsp://182.139.235.40/PLTV/88888895/224/3221228504/
[658582939.smil](http://658582939.smil)
CCTV-2高清,rtsp://182.139.235.40/PLTV/88888896/224/3221227983/
[10000100000000060000000003751359_0.smil](http://10000100000000060000000003751359_0.smil)
CCTV-3高清,rtsp://182.139.235.40/PLTV/88888895/224/3221228508/
[666944883.smil](http://666944883.smil)
...
这里成都电信直接把老张的地址列表复制下来即可。将地址准备好之后,托管到路由器上即可。
DIYP设置—>接口设置—>节目地址:
同样的方式设置EGP的电子界面的:
DIYP设置—>接口设置—>EPG接口
epg接口这里直接用老张的,也可以选择其他的。当然也可以选择自建,看自己的情况吧。
效果展示
配置完成就可以顺利的观看会看信息了。这里我在21点40回看了7点的新闻联播。
总结
采用回看的地址,来改进组播转单播,实现IPTV的融合,在支持看直播的同时,也可以同时观看回看,该方案还跳过了运营商组播客户端数量的限制,真正实现了丢掉运营商的机顶盒,在任何设备上观看IPTV了。
这个也是其中一个朋友留言的问题,查了下资料,也折腾了几天,在帮朋友解决问题的同时,也改进自己的融合方案。
关于播放器的问题,困扰了很久,最开始在电脑上尝试,我用VLC的播放器,用rtsp格式死活播放不了,一直以为是网络的原因。后面问了论坛大佬,才知道是VLC不支持,在手机上换成DIYP就可以了。
另外,关于网络的打通。加路由是最简单的, 其实还可以做MWAN,将iptv单独做一个上行的wan口。过程中也尝试过了,其实都可以。不过iptv的鉴权信息这些,还是需要根据本地的情况,自己构建了。
以上就是改进的IPTV融合方案了,过程中参考借阅了很多大佬的经验,但是过程中的图以及配置细节都是自己在实际环境中仔细研究的,希望看到这篇文章的朋友,不仅能配置,也知道其中为啥要这么配。
本文转自: MUM笔记