当前位置:
文章详情

秒开路由+IPTV、群晖+TVheadend、PVE+Kodi,移动电视再折腾

2022-09-11 23:06:54 215点赞 1164收藏 28评论

追加修改(2022-10-06 13:35:07):
TVHeadend节目单:漏了重要的一步,要给xmltv.sock文件及所在文件夹赋予可读写权限,root用户下输入:chmod -cR 777 /volume1/@appstore/tvheadend/var/epggrab,否则socat命令执行后没有结果。

一、折腾理由

前面有篇文章已经详细介绍了我观看老家电视的需求和实现方法,就是采用秒开iRouter开启IGMP组播代理和UDPXY转发,然后Socat实现IPv4-IPv6-IPv4的转换,远端秒开IPTV缓存电视节目,确实做到秒换台。具体可见我的第十一篇文,当时本想着终结篇了,后来贝锐官方做活动,69元买了个蒲公英x1,假期回老家的时候把x1给安装上作个旁路由

百科蒲公英路由 X1 旁路组网盒子 黑色 0 点评152 原创214 好价109去购买查看详情

结合第八篇文,解决了导地组网问题。(其中群晖的docker守护脚本有更新,文后介绍)

记得我某篇文章有大神评论说试下tvheadend,之前小试牛刀,刚好这几天疫情爆发居家健康监测,于是又来折腾了。

刚开始记错了软件的名称,记成xteve了,于是就利用蒲公英X1异地组网,往老家的秒开路由上用docker安装xteve服务,过程不难,就是要研究下秒开路由docker的使用。

装好了以后,结合本地的Jellyfin服务器添加电视调谐器,基本能看电视了。由于是淘汰的方案,具体过程就不细写了,在大妈网上找了一篇相似的文章,供各位参考。

说下淘汰xteve的原因:恩山有网友说xteve用处不大,其实Jellyfin直接调用m3u文件就行了。我觉得这话有点道理,我的J1900蜗牛开启了硬解,刚开始用Jellyfin看电视时一直在转圈圈,关掉硬解以后可以看老家的专属电视频道了,但是再打开央视一套,却一顿一顿的,查看群晖资源监控,发现CPU直接飙红,看来是设备老了,此方案不适合我。

后来想起了网友评论说的是tvheadend服务,于是重新扒网,找到了这个视频:《让你的NAS变成IPTV服务器。Docker容器推荐第二期:TVheadend》


按照视频一步一步的操作,tvh服务正常运行,本地电脑、电视装上kodi,打开央视一套,这回播放流畅极了,频道切换比秒开IPTV仅差那么一丢丢,真的接近“秒开”。查看服务器路由的资源状态,CPU不到50%,O啦……啦,一百多个频道随便看哈。

看了几天电视节目,又在网上查找了一些关于tvheadend的资料,希望可以更完美地体验。主要解决电子节目单加载问题,参考的有关资料如下:

1.1 南风VDR论坛——介绍TVH很详细,只不过到投稿为止我都还没有阅读权限。

http://bbs.nfvdr.com/forum.php

1.2 TVheadend.CN 中文网——能下载各种版本的tvheadend汉化版,可惜没找到docker版的。

1.3 恩山论坛的两篇文章

(1)《[原创]openwrt路由器使用tvheadend设置iptv直播源输入串流教程》

https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=556517&tdsourcetag=s_pcqq_aiomsg

(2)《[原创] tvheadend 设置 iptv 源的 EPG 教程》

https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=1191330&page=1#pid4987541

上面这两篇文章给我很大的启示,是我搞定TVH节目单的金钥匙。不过对于我这个大白来说,论坛式的教程确实不易学,格老子英文又菜,为了这个EPG节目单,这几天居家办公老走神,经过一翻折腾,终于在这个美丽宁静居家隔离的周末把EPG关卡给打通了。下文当作记录,以防忘记。

二、秒开路由+IPTV

这个方案就是我前面第十一篇文章提到的,最多只能推流5个频道,刚刚够用来看老家的5个台,电脑再用其他播放软件打开电视直播就开始转圈。没办法,此前我一直用电脑安装央视频观看电视,还有安卓电视机安装麒麟看电视,刚开始还好,后来卡顿得厉害。所以这个方案不推荐,主要讲下我选择秒开iRouter软路由的原因吧。

本来我是想用爱快软路由的,因为爱快教程资料多,同样也有IGMP代理和UDPXY转发功能,但是要作为旁路由却不太好设置,而我又不想去改变老家的网络方案即在主路由X-WRT上做文章,稳定第一嘛。秒开软路由的旁路由设置很简单,只需打开一个选项即可。

2.1 秒开旁路由设置

此线路的网关作为默认路由:是此线路的网关作为默认路由:是

2.2 秒开IGMP及UDPXY设置

转播代理设置转播代理设置

2.3 在主路由x-wrt上设置socat端口转发

把TVH服务的端口转发到IPv6域名把TVH服务的端口转发到IPv6域名

其他没有什么可说的啦,NEXT

三、秒开Docker安装TVheadend

iRouter的使用跟iKuai差不多,docker模块需要单独安装,而且内存不少于4G才可。

3.1 参数设置

参数设置——IP按默认填参数设置——IP按默认填

3.2 镜像管理(摘取镜像)

新建thv镜像新建thv镜像

镜像名:随便取,就tvheadend吧

镜像获取URL:linuxserver/tvheadend

3.3 容器列表(新建容器)

参考我建好的专家模式填就行参考我建好的专家模式填就行

按照专家模式这个填写

  • [tvheadend]

  • active = yes

  • data_dir = /disk/data/docker/tvheadend/config/:/config,/disk/data/docker/tvheadend/recordings/:/recordings,/disk/data/ftp_root/ftp/gpfile/:/file

  • env = [ PUID=1000,PGID=1000,TZ=Asia/Shanghai ]

  • hostname = tvheadend

  • image = linuxserver/tvheadend

  • name = tvheadend

  • onboot = yes

  • overwrite_entrypoint = no

  • portmap = 9981:9981,9982:9982

3.4 设置tvheadend

初次打开http://宿主机IP:9981 首先进入向导模式,头两个都选择CN语言,然而并没有卵用,界面还是英文。

选择语文选择语文

用户名密码留空即可。

设置帐户密码设置帐户密码

IPTV 1# 、2#都选默认

Tuner and NetworkTuner and Network

填写节目源url,我是用秒开软路由的http服务器存放以前抓取的节目源m3u文件的,抓取过程另见我的篇十:

下面填m3u文件地址

秒开路由+IPTV、群晖+TVheadend、PVE+Kodi,移动电视再折腾

为了让节目源与节目单更匹配,我在 http://epg.51zmt.top:8000/ 先对m3u文件进行了相应处理,这样识别的频道更多些。

51zmt频道处理51zmt频道处理

然后下一步,经过漫长的等待,175个单播地址适配到了162个有效的,之后下一步三个选项都勾选。完成后如下

修改序号、台标和分组修改序号、台标和分组

修改的方法有个小窍门,就是双击进行修改,之后点保存就行,不用一个一个频道打开来改,各栏列表还有过滤选项,方便编辑。

(1)先整理分类标签

对于分类标签也有个窍门:进入频道标签菜单,将软件默认的乱七八糟的标签都删除,只留下从m3u文件导入进来的,我的清理后如下图

无用的Tags清理掉无用的Tags清理掉

切换到频道列表,将缺失标签的源打上标签(双击Tags栏即可选择标签)

修改频道标签修改频道标签

之后点击Save保存,标签左上角的红三角消失就表示改好了

修改后记得保存修改后记得保存

(2)各分类节目排序

先在标签栏里把你要排序的频道分类过滤出来,然后先按Name排下序,在Crtl+A全选所有列表频道,点击Number Operations ——>Assign Number

频道自动排序频道自动排序

排好序后保存排好序后保存

按此方法把所有分类都排好序,可以分别从1开始编号。

(3)映射M3U列表

映射节目列表,到电脑上测试播放一下

映射节目列表映射节目列表

使用M3U列表必需映射你所需的频道,否则M3U节目表为空。地址:http://IP:9981/playlist

然后在电脑上用Potplayer打开链接地址测试一下能否正常播放电视节目。

四、群晖安装TVheadend

4.1 (题外话)选择群晖安装基于以下几点:

  1. 可以设置定时开机和关机(特别是开机,须洗半白)。

  2. 群晖系统可以SSH,可以安装Socat,能够实现恩山的帖子中增加EPG的方法。

  3. 可以虚拟机安装秒开iRouter作为旁路由,开启IGMP+UDPXY。

  4. 可以安装Surveillance Station 插件,在老家兼作视频监控主机。(这个是我的另一个需求,参考下文,为了能够打开多路监控,我还淘了个40路许可的插件)

基于以上考量,我准备利用手上一台闲置的J1900小主机安装群晖,再安装TVH、iRouter、Surveillance,下次带回老家替换现状的物理机秒开软路由。

言归正传,群晖安装TVH有两个途径:

A、到 Tvheadend.CN 中文网下载插件,注意下载与自己群晖一致的版本,我的DS918+就选择

下载链接:tvheadend_apollolake-6.2_4.3-1804.spk

然后在群晖上手动安装即可。

B、第三方插件库,插件设置里的来源增加第三方插件库,如矿神SPK

https://spk.imnks.comhttps://spk.imnks.com

找到TVheadend并安装找到TVheadend并安装

安装时要求输入admin用户的密码,就按默认的输入admin,以免出现无法登陆的情况。完后输入 http://IP:9981,这次需要输入用户名和密码,按前面的admin@admin输入,顺利登入,一样的向导,不一样的界面语言。

中文界面看得就是顺眼中文界面看得就是顺眼

4.2 设置IPTV源的EPG节目单

(1)首先调出EPG采集器模块(此步重中之重,这个菜单项潜伏得很深,花费了我九牛二虎之力才发现,可能也是我急于求成之故吧,一直还以为是TVH版本的问题,没留意恩山的帖子早有提到过)!!!

设置里切换到专家模式,开启EPG采集模块设置里切换到专家模式,开启EPG采集模块

把Kodi标签也打勾(不知道是否必须,管它呢,先勾选吧,图就不上了),为了方便没有汉化版本的同志,我已把语言切换回英文了。

点Save保存,在返回界面可看到 EPG Grabber Modules 已出现了,点进去选External:XMLTV =》 Enabled勾上 =》 记下Path

EPG采集模块激活外部采集器EPG采集模块激活外部采集器

将OTA采集器关闭

关闭OTA关闭OTA

(2)"SSH 到群晖,sudo -i 进入 root 权限,给 socket 文件及相应上级目录 777/755 权限。"(摘抄内容)

socat的安装可参见我的文章篇十二:

上面(1)的操作其实也可以在SSH中一并完成,如下:

  • sudo -i

  • cd /volume1/@appstore/tvheadend/var/epggrab/

  • ls

  • config

  • vim config

  • "ota_initial": false, # 把默认的true改为false

  • "modules": {

  • "xmltv": {

  • "class": "epggrab_mod_ext_xmltv",

  • "dn_chnum": false,

  • "scrape_extra": false,

  • "scrape_onto_desc": false,

  • "use_category_not_genre": false,

  • "name": "XMLTV",

  • "type": "External",

  • "enabled": true, # 把默认的false改为true

  • "priority": 3

  • },

  • cd /volume1

  • mkdir tvheadend #新建tvheadend目录

  • cd tvheadend

  • vim epg.xmltv # 新建epg.xmltv文件

  • ls

  • epg.xmltv

  • chmod -c 777 epg.xmltv #赋予权限(给 socket 文件 777 权限)

  • wget -O /volume1/tvheadend/epg.xmltv http://epg.51zmt.top:8000/e.xml

  • vim epg.xmltv #查看epg.xmltv是否已同步51zmt节目单内容

  • socat open:/volume1/tvheadend/epg.xmltv UNIX-CONNECT:/volume1/@appstore/tvheadend/var/epggrab/xmltv.sock

#socat命令导入epg.xmltv到TVH的xmltv.sock

再更新下TVheadend,发现已经有节目单内容了。

EPG他来了EPG他来了

(3)接下来用脚本实现EPG定时更新

cd /volume1/tvheadend

vim epg.sh

    • #!/bin/sh

    • wget -O /volume1/tvheadend/epg.xmltv http://epg.51zmt.top:8000/e.xml

    • opt/bin/socat open:/volume1/tvheadend/epg.xmltv UNIX-CONNECT:/volume1/@appstore/tvheadend/var/epggrab/xmltv.sock

输入 :wq 存盘退出

chmod -c 777 epg.sh 赋予执行权限

回到群晖控制面板,在计划任务里面增加定时执行脚本

群晖定时计划群晖定时计划

点击运行测试一下,ok,EPG节目单搞定。

五、PVE .&. Kodi

本来想着小主机安装LibreELEC直接作为kodi播放器,装好以后发现没有PVR插件,而且也没有root权限,无法自行安装其他插件,果断放弃。

这时想起老早以前写过一篇PVE安装kodi的文章,赶紧翻开来看看。

现在的PVE7已经自带Kodi19.1版本了,安装过程也遇到了一些小坑。

5.1 装好PVE后别急于修改为国内源

PVE安装完别急着修改源,把企业源去掉就行,只需把源内的.us.去掉。虽然这样安装时间长,但能正常安装kodi,可参照我上面的文章。

5.2 安装tvheadend htsp cliend插件

将原文中安装IPTV客户端改为安装TVH插件,经查询插件名为 kodi-pvr-hts

apt-get install kodi-pvr-hts

5.3 给PVE加上IPv6

参考:《ProxmoxVE(pve)里设置阿里云DDNS动态ipv6,互联网访问家庭pve》

https://blog.csdn.net/shyshyshy33/article/details/104440242/

(1)安装curl

apt-get install curl dnsutils -y

(2)安装ifconfig

apt-get install net-tools

然后用ifconfig命令查看自己的ipv6地址:

(3)解决兼容性问题

dpkg-reconfigure dash

选择no后回车。

(4)修改sysctl.conf

vim /etc/sysctl.conf

在末尾加上下面几行(如果没有下面几行的话):

#开启bbr,内核需要是 4.9 以上,可以使用 uname -r 命令查看

  • net.core.default_qdisc=fq

  • net.ipv4.tcp_congestion_control=bbr

  • # 开启 ipv4 路由转发

  • net.ipv4.ip_forward=1

  • # 开启 ipv6 相关参数,其中 vmbr0 改成对应的主网口名称

  • net.ipv6.conf.vmbr0.accept_ra=2

  • # IPv6 Packet Forwarding and Proxy NDP

  • net.ipv6.conf.default.forwarding = 1

  • net.ipv6.conf.all.forwarding = 1

  • net.ipv6.conf.default.proxy_ndp = 1

  • net.ipv6.conf.all.proxy_ndp = 1

保存后,执行以下命令使设置生效 :

sysctl -p

重新启动电脑后,PVE可以访问IPv6的域名了。

5.4 Kodi调用TVH客户端插件

在Kodi插件/PVR客户端中找到TVH插件,进行相应的设置,可以用IP地址或域名,当然域名需要在相应网络的主路由上设置端口转发,我用的还是socat转发。

这个域名我是乱写的,写你自己的域名这个域名我是乱写的,写你自己的域名

5.4 调出HDMI音频输出

选择正确的音频输出设备选择正确的音频输出设备

进入Kodi设置/系统/音频,选择正确的音频输出设备。

5.5 可能会遇到没有中文插件的坑,刚好审校退回来了,就一块填上吧

PVE安装完Kodi后如果遇到没有中文语言可选,解决的办法是:

1、先切换字体为Arial,以免出现乱码;

2、打开 Add-ons —> 点左上角的帽子按键 —> Install from repository —> Look and feel —> Languages—> China(Simple) —> Install;

3、装好让你选择是否切换为中文,选是就行。

六、客户端展示

6.1 安卓电视机装上Kodi,测试下效果

安卓电视Kodi软件播放效果,换台速度秒单位

6.2 安卓手机客户端

手机端参考以下文章:

https://www.hkepc.com/forum/viewthread.php?fid=116&tid=2455515&page=1

我用上文提供的tvhclient-2.0.0播放不成功,后来发现我原来已下载有 TVHClient_v2.4.7.apk,不用安装VLC也能正常播放。

手机客户端播放效果手机客户端播放效果

七、docker下设置EPG的尝试(留坑待填)

偶然发现秒开软路由有NFS服务器模块,可以利用X-Wrt或群晖端挂载NFS共享TVH中xmltv.sock文件所在位置,这样就可以采用前述方法在两个机器间传递EPG节目单了。

7.1 秒开iRouter建立NFS共享

参数设置:要填上允许访问的IP或IP段

参数设置参数设置

资源管理:将TVH的epggrab目录共享出去

共享在tvh上看到的epggrab目录共享在tvh上看到的epggrab目录

7.2 wrt挂载NFS共享文件夹

新建 /mnt/tvheadend/epggrab 目录,并赋予tvheadend目录及子目录777权限

  • cd /mnt

  • mkdir tvheadend

  • cd tvheadend

  • mkdir epggrab

  • cd /mnt

  • chmod -R 777 tvheadend

linux挂载NFS命令:

mount -t nfs -o nolock 192.168.15.253:/ /mnt/tvheadend/epggrab

mount -t nfs #挂载命令,表示挂载NFS共享的文件夹,如果出现错误,再按提示加上 -o nolock

192.168.15.253:/ #服务器端共享的文件夹路径,格式为 IP:/共享文件夹路径(由于iRouter已指定路径,所以直接输入:/)

/mnt/tvheadend/epggrab #映射到本地的文件夹,即X-Wrt路由器上的文件夹

挂载成功没有任何提示,此时输入命令:

ls /mnt/tvheadend/epggrab

可见tvh服务器epggrab目录下的config、xmltv.sock文件

然后参照4.2(2)介绍的方法将epg.xlmtv文件内容同步给tvheadend服务器的socket文件xmltv.sock

  • cd /tmp

  • mkdir tvheadend

  • cd tvheadend

  • vim epg.xmltv

  • :wq

  • chmod -R 777 epg.xmltv (此处为-R)

  • wget -O /tmp/tvheadend/epg.xmltv http://epg.51zmt.top:8000/e.xml

  • cd /

  • socat open:/tmp/tvheadend/epg.xmltv UNIX-CONNECT:/mnt/tvheadend/epggrab/xmltv.sock

  • socat[7709] E connect(6, AF=1 "/mnt/tvheadend/epggrab/xmltv.sock", 35): Permission denied

因权限不够,出现xmltv.sock文件拒绝访问的问题,也无法给socket文件赋权限,目前无解,期待有大神给我指点迷津,在此谢过秒开路由+IPTV、群晖+TVheadend、PVE+Kodi,移动电视再折腾

八、群晖pgyvpn守护程序更新

差点忘记前面说要填掉之前文章的大坑了,前段时间蒲公英异地组网时群晖经常玩失踪,发现群晖的docker容器虽正常运行,但里面的pgyvpn并没有随开机启动,每次都要手动开启。查看以前的守护脚本是用命令重启蒲公英docker,现在找到更优的方法,就是不用重启docker,直接采用后台启动pgyvpn的命令方式。按此方法更新守护程序。

8.1 在群晖里修改蒲公英vpn容器名称为best_pgyvpn

docker命令格式如下:

docker exec -d -it xxx pgyvpn /bin/bash

其中:xxx为蒲公英容器名称,可在群晖查看,我的已改为best-pgyvpn。

8.2 check_pgyvpn-ds.sh脚本更新如下:

  1. cd /usr/local/

  2. mkdir pgyvpn

  3. cat > /usr/local/pgyvpn/check_pgyvpn-ds.sh <<EOF

  • #!/bin/bash if [ $(ping -c 1 -W 1 10.168.1.1 | grep time | grep -v grep | wc -l) -eq 1 ];then

  • #检测x1链接畅通性

  • echo "PGYVPN network off"

  • #蒲公英VPN网络不通

  • #docker restart best_pgyvpn (原方案作为备选)#重启 pgyvpn

  • docker exec -d -it best_pgyvpn pgyvpn /bin/bash

  • #进入蒲公英docker容器里面 -d(后台运行)

  • #启动pgyvpn

  • #/sbin/service pgyvpn start(备注:容器里面可运行此命令)

  • #/bin/bash #保留一个终端,防止容器自动退出

  • else echo "PGYVPN network on"

  • fi

  • exit 0

  • EOF

4.chmod +x /usr/local/pgyvpn/check_pgyvpn-ds.sh

群晖计划任务群晖计划任务

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
28评论

  • 精彩
  • 最新
  • 虽然我在用爱快全屋组播电信iptv,手机电脑iPad都能看,但楼主在干什么我真的不懂

    校验提示文案

    提交
    你的是全屋组播,我玩的是全国单播而已。

    校验提示文案

    提交
    组播转单播用udpxy代理就可以了。没必要搞怎么麻烦吧。jellyfin卡顿和CPU占用大是因为在服务器上进行了转码。

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 电视上有类似TIVIMATE之类app可以直接调用m3u播放啊 为啥要多这个步骤呢? 不明白意义何在?快那么几秒么

    校验提示文案

    提交
    有安装TIVIMATE和PERFECTPLAYER,大概快了7~8秒,我觉得值得折腾

    校验提示文案

    提交
    什么快了7秒?tivimate开iptv基本秒开啊

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 每一次看到关于IPTV的,我都很认真地看看,也很想认真地折腾一翻,但是,想想我不是缺少10元的人,也不是经常看TV的人,也错过了折腾的年龄了,所以我还是放弃了……

    校验提示文案

    提交
  • 虽然点赞,无心再看!

    校验提示文案

    提交
    已点赞,同上。

    校验提示文案

    提交
    收起所有回复
  • 看起来太难了 收藏备用················ [狂汗]

    校验提示文案

    提交
  • 有什么问题先提出,再解决这个问题的技术手段

    校验提示文案

    提交
  • 感谢楼主分享

    校验提示文案

    提交
  • 有点复杂。bd

    校验提示文案

    提交
  • 很厉害的样子。 [赞一个]

    校验提示文案

    提交
  • 没有公网ip真的走很多弯路,我用组播代理+jellyfin就解决所有内外网需求了…

    校验提示文案

    提交
  • 为作者的折腾精神点个赞,虽然看得我一头雾水 [狂汗]

    校验提示文案

    提交
  • 步骤太多很繁琐,楼主辛苦了

    校验提示文案

    提交
  • 看不懂,但很震撼

    校验提示文案

    提交
  • 我只喜欢直连,信息同步,又可以全功能,回放,点播,通通有

    校验提示文案

    提交
  • 虽然我很想理解,但是实在是看不懂,先收藏

    校验提示文案

    提交
  • gunpen

    作者
    更正个BUG——群晖定时更新脚本在最前面要加上“/”即:/opt/bin/socat ;
    另外也试过在安卓电视上安装Tivimate,出现闪退,因此无法测试Tivimate的换台速度;本学期大娃上高中了,因此也给家里装了移动的电视,发现家乡的频道在深圳没告诉不能能打开,这就省事多了,这套方案至少可以享用一年时间。

    校验提示文案

    提交
  • 马克一下

    校验提示文案

    提交
  • 一直有个问题不明白,IPTV是啥,移动联通送的IPTV机顶盒,不是广告就是收费,自己买了个机顶盒装个电视家看卫视,装jellyfin看电影,为啥还要用IPTV

    校验提示文案

    提交
    iptv是直播 家里你有老人的话 喜欢看cctv。

    校验提示文案

    提交
    收起所有回复
  • 感谢大佬的分享

    校验提示文案

    提交
提示信息

取消
确认
评论举报

最新文章 热门文章
1.1K
扫一下,分享更方便,购买更轻松