NAS上存的电影、电视剧、纪录片等资料以海报墙的形式展示,这个很容易实现,并且功能与PLEX、Emby类似。Jellyfin的优点是可以(白嫖)硬件转码。如果是PLEX需要PLEX PASS会员,Emby需要Emby Premiere会员。而Jellyfin完全免费。
通过与xteve的搭配,完美实现局域网内IPTV播放(这里指的是与jellyfin配合,当然也可直接使用openwrt的udpxy实现)。
环境方面我们选择debian10(PVE模板),之所以使用lxc,一是因为cpu不支持vt-d(穷),二是pve可以把显卡映射到lxc容器中,lxc容器拥有着和宿主机差不多的性能(?未实际测试)。

在PVE上咱不止跑一个debian,咱还想打点零工,跑跑CDN。当然这样的结果就是IO爆炸,yysy,我觉得体验还行,除了扫描媒体库卡点。一天两块,交个电费够了。
1. 配置CT渲染设备节点,开启硬件加速
默认情况下.LXC并不会自动映射dev目录下的设备节点文件.所以我们首先需要修改配置文件,使LXC自动映射dev下的设备文件.
首先我们需要在host(pve) shell中确认一下host设备文件的情况,标红的参数我们需要用到:
ls -l /dev/dri/

修改LXC的配置文件,路径为/etc/pve/lxc/{你的CT ID}.conf.
将以下内容添加到文件末尾(将对应的设备id,容器id替换成自己的,设备id就是上方划线部分):
lxc.cgroup.devices.allow = c 226:0 rwm
lxc.cgroup.devices.allow = c 226:128 rwm
lxc.autodev: 1
lxc.hook.autodev:/var/lib/lxc/容器ID/render_device_hook.sh
CT启动的时候,会执行lxc.hook.autodev里的内容,我们需要手动创建对应的节点文件
还是一样,使用编辑器创建并打开脚本文件:
vim /var/lib/lxc/容器ID/render_device_hook.sh
将以下内容添加到文件中(一样,还是要替换成自己的设备id):
mkdir -p ${LXC_ROOTFS_MOUNT}/dev/dri
mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/dri/card0 c 226 0
mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/dri/renderD128 c 226 128
设置文件权限
chmod 755 /var/lib/lxc/容器ID/render_device_hook.sh
现在可以启动CT, 启动后,我们还需要在CT里安装VA的驱动文件,以下命令均在CT内执行:
apt-get install i965-va-driver
apt-get install vainfo
安装完成后执行vainfo命令,如果打印如下类似信息就表明硬件转码已经可用了:

2.在debian中安装docker compose
curl -sSL https://get.daocloud.io/docker | sh
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
3.编写docker-compose.yml
version: "3"
services:
filebrowser:
image: wahyd4/aria2-ui:latest
container_name: filebrowser
ports:
- "端口:80"
- "端口:443"
volumes:
- 目录:/data
environment:
- PUID=1000
- PGID=1000
restart: unless-stopped
xteve:
image: alturismo/xteve
container_name: xteve
environment:
- PUID=1000
- PGID=1000
volumes:
- 目录:/config
- 目录:/guide2go
- 目录:/root/.xteve
ports:
- 端口:34400
restart: unless-stopped
ftp:
image: stilliard/pure-ftpd
container_name: ftp
environment:
- PUID=1000
- PGID=1000
- PASV_ADDRESS=IP地址
- FTP_USER_NAME=用户名
- FTP_USER_PASS=密码
- FTP_USER_UID=1000
- FTP_USER_GID=1000
- FTP_USER_HOME=目录
- FTP_MAX_CONNECTIONS=100
volumes:
- 目录:/home/jay
ports:
- "端口:21"
- "30000-30009:30000-30009"
restart: unless-stopped
jellyfin:
image: linuxserver/jellyfin
container_name: jellyfin
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- UMASK_SET=022 #optional
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
volumes:
- 目录:/config
- 目录:/data/tvshows
- 目录:/data/movies
- 目录:/transcode
ports:
- 8096:8096
devices:
- /dev/dri:/dev/dri
restart: unless-stopped
transmisson:
image: linuxserver/transmission
container_name: tr
environment:
- PUID=1000
- PGID=1000
- TRANSMISSION_WEB_HOME=/combustion-release/
volumes:
- 目录:/config
- 目录:/downloads
- 目录:/watch
ports:
- 端口:9091
- 51413:51413
- 51413:51413/udp
restart: unless-stopped
这里使用中科大镜像源加速下载, https://mirrors.ustc.edu.cn/help/dockerhub.html
另外需要在选项中打开嵌套,才能正常启动docker

4.配置Jellyfin
参考 https://post.smzdm.com/p/adwlg0pz/ ,不多说。地区中华人民共和国的英文是People’s Republic of China,找不到China的话找找这个
5.配置Xteve
这里你需要一份m3u节目单,我抓包本地电信IPTV得到一份地址(已经过udpxy转换):
台州一套测试
http://192.168.2.1:4022/udp/233.50.201.157:5140
...............
宁波综合高清
http://192.168.2.1:4022/udp/233.50.201.168:5140
当然这里需要使用内网观看,关于如何破解DHCP鉴权,参考:
https://koolshare.cn/thread-149406-1-1.html
对IPTV抓包以及VLAN设置,参考:
https://github.com/luckyyyyy/blog/issues/44
节目单这里推荐 http://epg.51zmt.top:8000/ ,将上面的文件上传到这个网站就能自动生成一份带台标的标准m3u文件。
导入完节目和节目单,大概是这样:

点击Fillters,新建分组


点击保存

点击Mapping,将频道和节目单映射好,绿色就可以播放了。
红色的需要自己选择默认的节目单填充(或者你自己找到别的源
就像这样

处理完没红得就可以了,进入Jellyfin添加

扫描完成后就有频道了

再添加指南:

效果:

开启硬件加速:

关于其他电影资源。。上面安装了Aria2和Tr,自行下载并添加到媒体库即可。
附录:
1.解决PVE apt update报错
vim
/etc/apt/sources.list.d/pve-enterprise.list
注释掉
#deb
https://enterprise.proxmox.com/debian/pve stretch pve-enterprise
新建 /etc/apt/sources.list.d/pve-no-subscription.list,内容为:(需要根据你的Debian版本选择
deb
https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian buster pve-no-subscription