很早之前就想把自己的家庭媒体库方案整理一下,技术变化太快了,快到每天都在折腾的路上,总想最完美的解决办法,到头来却失了最初的观影需求.到目前为止,我的家庭媒体库方案基本没啥问题了,后面会把部分工具打包出来,方便需要的朋友使用,尽量傻瓜式,方便小白使用.

image-20240523114721515

image-20240523114657914

0x00 前言

本文不是技术科普文章,我不会去一个个介绍每个工具/软件的详细配置和用法,我只会基于媒体库的使用逻辑,关注核心配置,因为本身是一个整合方案,我希望你能利用你现在已经部署好的各类程序,而不是一味的推倒重来,所以不管你是nas套件版,还是docker版本,我想你都能很快完成配置.如果你是从零开始的选手,我后续也会考虑给大家准备一个整合的docker-compose配置.

0x01 准备开始

开始折腾家里媒体库(或者说是进化)之前,我先梳理一下我手里已有的资源:

  • 威联通4盘位nas
  • emby授权(非必需)
  • plex授权(非必需)
  • 宽带公网IP(非必需,有了方便在外使用)
  • 部分PT站点账号(非必需)
  • 115会员
  • 阿里云盘会员

基于这些杂七杂八的东西,我希望自建媒体库,毕竟B爱优腾几个大会员一个月已经是100+开支了,而且随着使用AppleTV替代了安卓盒子,爱优腾官方基本上就没得玩了,所以我的想法是,利用nas(或者网盘)存储资源,然后用emby来刮削和整理媒体库,在AppleTV上用infuse、VidHub、Fileball等客户端观看.当然,安卓端也有一些可用的客户端.

0x02 媒体库1.0

如果NAS作为媒体库的存储介质,那么受限于nas硬盘的空间,这个需要经常清理,我是个懒人,直接pass;那么就需要利用我现有的网盘资源来完成操作了.如何把nas的资源像本地资源一样使用?我选择CloudDrive2,它可以支持把我网盘(115、阿里云盘、甚至是天翼云盘等)资源挂载到本地,我就可以在emby里面创建媒体库,并识别刮削这些资源.

这里的操作难度基本为零,不做介绍,大家只要注意,CloudDrive2的挂载需要有一些依赖,参考官方指南可以轻易拿捏.

0x03 媒体库2.0

媒体库1.0其实我用了一周左右,资源量小的时候其实没啥事,但是随着资源增多(仓鼠行为,懂得都懂),emby扫库刮削的时间越来越长,也经常触发网盘的风控,加上在外基本不能用(家庭宽带的上行实在一言难尽),所以我想优化emby的扫库效率.

搜寻结果是strm,简单来说,strm是一个文本文档,里面存储的是媒体真实的访问路径(可以是本地绝对路径,也可以是日常见到的http/https的网络资源路径),strm资源在emby扫库的过程中不会解析文件,扫库效率提升很明显,基本上以前6小时的扫库,现在只需要2分钟搞定.

那如何生成strm文件呢,工具其实很多,这里我推荐AutoSymlink,它可以支持你快速生成strm、同步元数据等,更重要的是,生成的云端strm(就是strm里面是网络地址)还可以支持Alist,后面会讲为什么Alist很重要.

部署AutoSymlink的docker镜像,要注意把CloudDrive2的挂载路径、strm的生成路径确认好,参考脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Auto_Symlink for QNAP
mkdir -p /share/Container/auto_symlink/config && \
docker stop auto_symlink && \
docker rm auto_symlink && \
docker pull shenxianmq/auto_symlink:latest && \
docker run -d \
--name auto_symlink \
-e TZ=Asia/Shanghai \
-v /share/NormData/CloudDrive:/mnt/CloudNAS:rslave \
-v /share/NormData:/Media:shared \
-v /share/NormData:/Users/cat:shared \
-v /share/Container/auto_symlink/config:/app/config \
-v /share/Container/auto_symlink/backup:/app/backup \
-p 8095:8095 \
--user 1000:100 \
-e UMASK=022 \
--restart unless-stopped \
--log-opt max-size=10m \
--log-opt max-file=3 \
shenxianmq/auto_symlink:latest

部署后通过访问8095端口,添加同步配置:

image-20240523112341940

image-20240523112438774

image-20240523112804907

image-20240523112904982

运行后会自动在我们设置的目录生成strm文件(会按照你网盘的目录结构生成),你可以用文本编辑器打开来看看strm文件里面的内容.为确保可用,可以把strm的内容,用浏览器或者视频播放器打开看看能不能播放,如果提示401等错误,可能是你的Alist开启了签名,可以在Alist里面的对应存储里面关闭.

strm文件都生成后,可以把你的emby媒体库的路径,指向strm的路径,其它不变,手动扫一下媒体库,是不是飞快?播放的时候,emby会解析并作为代理去获取strm里面的真实文件,所以对目前的使用来说,这部分是无感的.

当然,增加AutoSymlink还不止这个能力,我们可以把emby的媒体更新通知设置在AutoSymlink,实现生成strm后立即/延时通知emby更新局部媒体库,因为AutoSymlink是实时监控文件变化的,所以效率极高,可以把emby的实时监控和定时扫码都关了.

image-20240523113859851

完成这些,媒体库2.0也算是可用来,而且扫库和入库都很快,再也不用担心老婆催你怎么还看不到最新的剧集而烦恼了.

0x04 媒体库3.0 – to be continued

完成了2.0,在家日常观影已经没啥问题了,下一篇我会介绍网上很多人提到的302方案,我会介绍GitHub上大神整理的nginx配置,如何实现302,降低家里宽带上行的瓶颈,在外也能畅快观影,同时我还会提供我自己的302方案,更加简洁,已验证支持安卓下:emby客户端、Yamby客户端;iOS/AppleTV下:Infuse、VidHub、Fileball、官方客户端.(nginx方案通行高,稍微复杂一点).