UNRAID NAS搭建Jellyfin家庭媒体中心

提到电影媒体库就不得不提一下电影媒体库三剑客的故事,他们是Plex,Emby和今天的主角Jellyfin。Plex和Emby都是正经八百的媒体库商业软件,支持硬解,能调用核显或独显进行实时解码转码,功能齐全,海报墙效果也很漂亮,大家按需要购买就可以了。

Jellyfin的来历更具有故事性。根据官方说法,Jellyfin脱胎自Emby,原因是Emby3.6版本闭源商业化之后,引起了一些核心开发人员的不满,这帮爱电影的技术大佬出走创立了Jellyfin。Jellyfin的创立初衷就是提供免费的、自由的媒体管理和流媒体服务,致力于让所有人都能访问最好的媒体系统。

因为Jellyfin脱胎自Emby,所以很多Emby早期的功能都得到了继承,Jellyfin到现在都可以复用Emby早期版本的APP和软件。正是因为Jellyfin先天不错的底子,再加上自由、免费和极致的精神内涵,在电影爱好者圈儿也越来越火,很多大佬和团队加入一起搞建设,出各种安装使用教程、各种docker镜像。老鱼也是冲着Jellyfin这种极致精神(就是穷😅)义无反顾的投身到Jellyfin媒体库的折腾当中,虽然有些坑,但Jellyfin终究是没让人失望。

关于Jellyfin的安装折腾网上已经有很多优质的内容,比如什么值得买的阿文菌大佬《UNRAID教程:3分钟 用安装Jellyfin 开启硬件加速转码 解码4K 打造最强家庭影院》(https://post.smzdm.com/p/a25gpmpn/),还有亡命之图司波图大佬的催眠视频《免费开源影音服务器Jellyfin部署全攻略,含群晖,OMV系统下Docker安装并启动硬件转码》(https://www.bilibili.com/video/BV1ME411o7H2)。核心思路就是基于Jellyfin的docker镜像在各平台安装,所以安装方法我就不再重复了,本文主要是分享一些Jellyfin的运作原理和老鱼贴身肉搏过程当中所踩过的坑,各位一定要先看完!先看完!先看完!,再开始安装,能帮你避开很多坑。

老鱼的安装环境是UNRAID6.8.2平台,使用dcoker方式安装Jellyfin,通过NFS/SMB共享群晖的电影文件库,其它PVE、ESXi平台大同小异。

系统平台怎么选?

老鱼折腾过在群晖系统和UNRAID系统上安装Jellyfin,我更推荐在UNRAID系统或者其它底层虚拟系统上安装Jellyfin。

这里不得不先吹一下UNRAID,UNRAID逻辑简单,功能强大,自由度比较高,可折腾性很强,大家如果想要进一步了解我们可以开个坑,再讲一讲UNRAID上踩过的那些坑。

为啥不推荐在群晖系统中安装Jellyfin呢?,一是因为效率和安全性。大家可以上油管看看eSir大佬做的主流虚拟平台的性能测试《什么?性能相差近10倍?!到底虚拟机平台哪家强,应该如何选择?ESXi,PVE,unRaid,Synology 群晖,iKuai 爱快》,这里直接引用大佬的结论

图片[1]-UNRAID NAS搭建Jellyfin家庭媒体中心-那啥资源

第二个原因是数据迁移成本。群晖的数据存储格式是自家弄的,能配合群晖系统实现很多功能,但相应的限制也增加了,其它系统并不能方便的读取数据,所以这里建议大家从一开始就选择好一个通用的数据存储格式,比如xfs、ext4以保证各系统的兼容性,同时减少后期的数据迁移成本 。

所以如果你还没有NAS系统,又喜欢折腾,建议你直接上UNRAID或其它底层虚拟平台,使用虚拟平台的文件存储共享功能,或者在虚拟平台上安装群晖直通硬盘网卡,让群晖专门负责数据存储和分享。

选哪个docker镜像?

通常docker方式安装Jellyfin大家使用的镜像是linuxserver/jellyfin,不过根据老鱼踩过的坑,在UNRAID上使用linuxserver/jellyfin镜像,中文字幕是方框乱码,所以在选择安装镜像的时候要使用sonataa/jellyfin镜像

关于硬解

硬解的原理是开放显卡设备给docker容器使用,所以除了Jellyfin,其它需要硬解的容器,比如荒野无灯版的FIleBrowser,都是通过这种方法实现硬解。

以J3455/J4205这种大家用得非常多的NAS主板为例,由于没有外置显卡,需要将CPU的核显提供给容器使用。开启核显的方法各路大神都有写,非常简单:

  1. 终端或者SHH输入命令modprobe i915没有任何错误提示就成功开启核显了,可以通过命令ls /dev/dri再次确认,如果显示card0 renderD128就可以确认核显是开启成功的

  2. 由于UNRAID不会每次启动都加载核显驱动,需要在开机启动项添加开启加载核显驱动的命令,有两个方法都可以实现:

  • 命令法。通过命令cd /boot/config进入config目录,使用命令vi go编辑UNRAID的启动配置文件,按下键盘上的i键进入编辑模式,在最后一行输入modprobe i915,按键盘的esc键后按住shift键再按冒号键,输入wq保存退出即可

  • 直接修改go文件。在UNRAID中进入MAIN页,进入Flash,确认已经开启Flash的SMB共享,并且是Public权限。在同一局域网下的另一台电脑进入UNRAID的Flash共享目录,在config文件夹下找到go文件右键使用Notepad++(没有装的话就装一个)打开,直接输入modprobe i915保存退出即可

  • 在创建Jellyfin容器的时候添加核显设备:

  1. 点击最下方“Add another Path, Port, Variable, Label or Device”,

  2. Config type选择“Device”,Name随便取,Value下拉选择/dev/dri/renderD128,保存即可。

    图片[2]-UNRAID NAS搭建Jellyfin家庭媒体中心-那啥资源

  • 容器创建成功后,进入Jellyfin,进入控制台,在播放页中,按如下图配置保存就可以开启核显硬解了。图片[3]-UNRAID NAS搭建Jellyfin家庭媒体中心-那啥资源

  • 极限测试硬解效果。老鱼找了一部原始文件大小36G的2160P Atoms音效片源,

    图片[4]-UNRAID NAS搭建Jellyfin家庭媒体中心-那啥资源

    外网Chrome浏览器播放,选择质量1080p-8 Mbps,因为与原始分辨率不一致会启动转码,通过实时转码我们在外网就可以不受网络带宽的影响,流畅观看媒体库的影片。登录Jellyfin控制台可以看到后台已经启动了实时转码:

图片[5]-UNRAID NAS搭建Jellyfin家庭媒体中心-那啥资源

因为是4K片源,同时又需要上传到外网,CPU压力肯定很大!在DASHBOARD页能看到虽然CPU四核全线飘红,但J4205这样的小U在核显的帮助下还是完成了极限4K实时转码测试🤣鼓励鼓励👏。如果是十多G的1080P片源,转码的压力会小很多,同时支持多人转码观看也没有问题

图片[6]-UNRAID NAS搭建Jellyfin家庭媒体中心-那啥资源

关于媒体库目录

网上有教程说在创建Jellyfin的docker容器时,要配置Movies,TV和Music目录,这是因为使用了docker模板,实际上是完全不需要完全按照模板配置。比如你的电影,记录片还有美剧都放在Media文件夹下,只需要配置Media一个文件夹就可以了,在Jellyfin里添加媒体库的时候选择Media文件夹,Jellyfin会帮你列出下面的子文件夹,这样就省去了要配置多个文件夹的麻烦。

图片[7]-UNRAID NAS搭建Jellyfin家庭媒体中心-那啥资源

如果你的媒体库文件不是直接存储在虚拟平台上,而是放在NAS设备中,Jellyfin无法读取到NAS设备上的媒体文件,这时候需要通过挂载NAS媒体库目录解决。

比如老鱼是基于UNRAID的docker安装的Jellyfin,但我的媒体库文件是放在NAS上,而NAS是跑在UNRAID上的虚拟机,通过挂载插件Unassigned Devices可以方便的将NAS的媒体库目录挂载到UNRAID上,在Jellyfin的虚拟机上只需要配置挂载路径,需要注意的是UNRAID上所有挂载点都在/mnt/remotes/下:

图片[8]-UNRAID NAS搭建Jellyfin家庭媒体中心-那啥资源

但这里有一个隐藏大坑!即使我们设置了Unassigned Devices自动挂载NAS的共享媒体库,但在UNRAID重启时,因为docker容器更轻量,肯定是Jellyfin先启动成功,虚拟机群晖后启动,这就会导致Unassigned Devices挂载群晖共享目录失败,Jellyfin读不到媒体库文件就不能正常播放。

有小伙伴说docker高级视图下可以为每个容器配置wait时间,但老鱼在6.8.2版本的UNRAID上配置了并没有用。即使这个wait参数生效,Unassigned Devices在打开自动挂载配置时只要第一次没挂载上后面就不再自动挂载了。

要解决这个问题,肯定是需要在成功挂载媒体库目录之后才启动Jellyfin,有两个方法:

  • 手动法,操作简单,缺点就是每次重启都要操作一次,所以宿主机不能经常重启和关机。当NAS启动成功之后,你访问一下NAS确认已经启动成功了,在UNRAID的MAIN页面,点击一下媒体库的MOUNT按钮就可以了,挂载成功之后按钮会显示为UNMOUNT。如果MOUNT按钮是灰色,那就意味着NAS还没有启动成功。挂载好媒体库目录之后,需要重启一下Jellyfin容器。

    图片[9]-UNRAID NAS搭建Jellyfin家庭媒体中心-那啥资源

  • 脚本法,有一点点麻烦,但一劳永逸。思路就是UNRAID启动成功之后,延迟几分钟(等待NAS启动)通过脚本挂载NAS的媒体库目录,然后重启Jellyfin容器。

  1. 在UNRAID的APPS中搜索安装User Scripts插件;
  2. Jellyfin容器启动成功之后,在UNRAID终端里输入命令docker ps查看Jellyfin的容器ID,记下来等会儿要用;

    图片[10]-UNRAID NAS搭建Jellyfin家庭媒体中心-那啥资源

  3. 在User Scripts插件中增加一个脚本,名字随便取,自己能理解就行,输入以下内容:

    #!/bin/bash
    sleep 5m
    mount -t nfs 192.168.1.100:/volume4/Media /mnt/remotes/192.168.1.100_Media
    docker restart 8d24824fdac3
  • sleep 5m是说等待5分钟再执行后面的脚本内容,给NAS足够时间完成启动

  • mount -t nfs 192.168.1.100:/volume4/Media /mnt/remotes/192.168.1.100_Media是挂载NAS媒体库的命令,nfs是指定共享方式,通常共享方式有smb或者nfs,老鱼用的nfs方式,如果是smb方式的话命令要换成mount -t cifs -o guest username=xxx,password=xxx,vers=x [远程路径] [目标挂载路径]这个大家自行百度一下,如果不明白的话也可以留言

    192.168.1.100:/volume4/Media就是NAS的共享目录路径,这个要换成你NAS的IP和媒体库目录的路径。/mnt/remotes/192.168.1.100_Media就是指定UNRAID上的挂载点,这个必须和配置给Jellyfin容器的媒体库参数一致

  • docker restart 8d24824fdac3就是重启Jellyfin的容器,这个容器ID要换成上面第2步查到的容器ID。如果修改了容器配置,这个ID是会变的,需要重新获取

  • 保存脚本,设置计划为At Startup of Array,点击APPLY,大功告成!这样UNRAID重启之后就会等待5分钟挂载好NAS的媒体库目录再重启一次Jellyfin容器,就能确保Jellyfin能顺利读取到媒体库文件图片[11]-UNRAID NAS搭建Jellyfin家庭媒体中心-那啥资源

  • 在Jellyfin控制台-高级-计划任务-Scan Media Library任务中,添加两个定时扫描媒体库的任务,分别在Jellyfin启动的时候和每隔一段时间扫描一次媒体库图片[12]-UNRAID NAS搭建Jellyfin家庭媒体中心-那啥资源

关于刮削

不少教程里都是把影片刮削任务交给Jellyfin来做,然后安装字幕插件自动下载字幕,老鱼其实不是太赞同这种做法。下载回来的影片质量、命名格式千奇百怪,再加上国内连接影片数据库TheMovieDb并不稳定,所以很大概率会刮销失败,或者刮销错误让你哭笑不得。

老鱼还是建议影片刮销和字幕下载自己手动来,因为目前除了手动还真的没有特别精准有效的刮销方法和完美的字幕匹配方法。手动刮削确保媒体文件命名规范,影片海报、nfo、字幕信息完整。有了命名规范、信息完整的媒体文件库,无论是用Jellyfin来做媒体库系统,还是Emby或者Plex,都可以不需要刮削立即呈现最完美的效果。

所以在Jellyfin新建媒体库的时候,如果你的媒体文件都是手工刮销过的,就不要勾选元数据下载器

图片[13]-UNRAID NAS搭建Jellyfin家庭媒体中心-那啥资源


© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容