电脑数码 篇十三:秒开路由+IPTV、群晖+TVheadend、PVE+Kodi,移动电视再折腾
追加修改(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给安装上作个旁路由
结合第八篇文,解决了导地组网问题。(其中群晖的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端口转发
其他没有什么可说的啦,NEXT
三、秒开Docker安装TVheadend
iRouter的使用跟iKuai差不多,docker模块需要单独安装,而且内存不少于4G才可。
3.1 参数设置
3.2 镜像管理(摘取镜像)
镜像名:随便取,就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#都选默认
填写节目源url,我是用秒开软路由的http服务器存放以前抓取的节目源m3u文件的,抓取过程另见我的篇十:
下面填m3u文件地址
为了让节目源与节目单更匹配,我在 http://epg.51zmt.top:8000/ 先对m3u文件进行了相应处理,这样识别的频道更多些。
然后下一步,经过漫长的等待,175个单播地址适配到了162个有效的,之后下一步三个选项都勾选。完成后如下
修改的方法有个小窍门,就是双击进行修改,之后点保存就行,不用一个一个频道打开来改,各栏列表还有过滤选项,方便编辑。
(1)先整理分类标签
对于分类标签也有个窍门:进入频道标签菜单,将软件默认的乱七八糟的标签都删除,只留下从m3u文件导入进来的,我的清理后如下图
切换到频道列表,将缺失标签的源打上标签(双击Tags栏即可选择标签)
之后点击Save保存,标签左上角的红三角消失就表示改好了
(2)各分类节目排序
先在标签栏里把你要排序的频道分类过滤出来,然后先按Name排下序,在Crtl+A全选所有列表频道,点击Number Operations ——>Assign Number
按此方法把所有分类都排好序,可以分别从1开始编号。
(3)映射M3U列表
映射节目列表,到电脑上测试播放一下
使用M3U列表必需映射你所需的频道,否则M3U节目表为空。地址:http://IP:9981/playlist
然后在电脑上用Potplayer打开链接地址测试一下能否正常播放电视节目。
四、群晖安装TVheadend
4.1 (题外话)选择群晖安装基于以下几点:
可以设置定时开机和关机(特别是开机,须洗半白)。
群晖系统可以SSH,可以安装Socat,能够实现恩山的帖子中增加EPG的方法。
可以虚拟机安装秒开iRouter作为旁路由,开启IGMP+UDPXY。
可以安装Surveillance Station 插件,在老家兼作视频监控主机。(这个是我的另一个需求,参考下文,为了能够打开多路监控,我还淘了个40路许可的插件)
基于以上考量,我准备利用手上一台闲置的J1900小主机安装群晖,再安装TVH、iRouter、Surveillance,下次带回老家替换现状的物理机秒开软路由。
言归正传,群晖安装TVH有两个途径:
A、到 Tvheadend.CN 中文网下载插件,注意下载与自己群晖一致的版本,我的DS918+就选择
下载链接:tvheadend_apollolake-6.2_4.3-1804.spk
然后在群晖上手动安装即可。
B、第三方插件库,插件设置里的来源增加第三方插件库,如矿神SPK
安装时要求输入admin用户的密码,就按默认的输入admin,以免出现无法登陆的情况。完后输入 http://IP:9981,这次需要输入用户名和密码,按前面的admin@admin输入,顺利登入,一样的向导,不一样的界面语言。
4.2 设置IPTV源的EPG节目单
(1)首先调出EPG采集器模块(此步重中之重,这个菜单项潜伏得很深,花费了我九牛二虎之力才发现,可能也是我急于求成之故吧,一直还以为是TVH版本的问题,没留意恩山的帖子早有提到过)!!!
把Kodi标签也打勾(不知道是否必须,管它呢,先勾选吧,图就不上了),为了方便没有汉化版本的同志,我已把语言切换回英文了。
点Save保存,在返回界面可看到 EPG Grabber Modules 已出现了,点进去选External:XMLTV =》 Enabled勾上 =》 记下Path
将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,发现已经有节目单内容了。
(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目录共享出去
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文件赋权限,目前无解,期待有大神给我指点迷津,在此谢过 。
八、群晖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脚本更新如下:
cd /usr/local/
mkdir pgyvpn
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
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
maxbbs
校验提示文案
值友5783594851
校验提示文案
小站果
校验提示文案
喜欢宁静
校验提示文案
值友3110595379
校验提示文案
zggdhmzws
校验提示文案
psikyo
校验提示文案
yinhao
校验提示文案
值友7736933919
校验提示文案
祖传贴膜
校验提示文案
happylee
校验提示文案
英文字母
校验提示文案
龙马伝
校验提示文案
灵KOYB
校验提示文案
nieping1129
校验提示文案
gunpen
另外也试过在安卓电视上安装Tivimate,出现闪退,因此无法测试Tivimate的换台速度;本学期大娃上高中了,因此也给家里装了移动的电视,发现家乡的频道在深圳没告诉不能能打开,这就省事多了,这套方案至少可以享用一年时间。
校验提示文案
夏沫浅殇
校验提示文案
依然的狗头军师
校验提示文案
值友9637905745
校验提示文案
值友9637905745
校验提示文案
依然的狗头军师
校验提示文案
夏沫浅殇
校验提示文案
gunpen
另外也试过在安卓电视上安装Tivimate,出现闪退,因此无法测试Tivimate的换台速度;本学期大娃上高中了,因此也给家里装了移动的电视,发现家乡的频道在深圳没告诉不能能打开,这就省事多了,这套方案至少可以享用一年时间。
校验提示文案
小站果
校验提示文案
nieping1129
校验提示文案
值友5783594851
校验提示文案
灵KOYB
校验提示文案
龙马伝
校验提示文案
英文字母
校验提示文案
happylee
校验提示文案
喜欢宁静
校验提示文案
祖传贴膜
校验提示文案
值友7736933919
校验提示文案
yinhao
校验提示文案
psikyo
校验提示文案
zggdhmzws
校验提示文案
maxbbs
校验提示文案
值友3110595379
校验提示文案