基于 Jellyfin 和 aliyundrive-fuse 打造家庭媒体库

基于 Jellyfin 和 aliyundrive-fuse 打造家庭媒体库

💡 原文中文,约2000字,阅读约需5分钟。
📝

内容提要

作者开发了 aliyundrive-fuse,通过 FUSE 将阿里云盘挂载为本地只读文件系统,省去 rclone 中间层,使 Jellyfin 等媒体软件可直接读取云盘。由于 FUSE 单次读请求较小,采用约 10MB 缓存以避免频繁网络请求,播放基本流畅。文中还介绍了用 pip 安装、获取 refresh token 并挂载,以及将挂载目录映射进 Docker 版 Jellyfin 容器并添加媒体库的步骤。

🔎

延伸解读

为何选择 FUSE 而非 WebDAV 插件

作者曾考虑为 Jellyfin 编写 WebDAV 插件,但需要学习 C# 和 Jellyfin 插件接口,成本较高。相比之下,利用 Linux/macOS 的 FUSE 机制和 Rust 的 fuser 库,直接实现只读文件系统,省去了 rclone 中间层,让 Jellyfin 像访问本地磁盘一样读取云盘。这种方案对不熟悉 Jellyfin 插件开发的用户更直接,但前提是系统支持 FUSE。

10MB 缓存带来的流畅与卡顿权衡

FUSE 单次读请求较小(Linux 最大 128KB),若每次读取都发起网络请求会严重影响性能。作者采用约 10MB 的缓存来减少请求次数,从而保障读取速度。但缓存未命中时需等待 10MB 数据下载完成,可能导致视频串流偶尔卡顿。实际体验中,播放器预读后续内容可缓解此问题,配合 Jellyfin 使用基本流畅。

部署要点:挂载与容器映射

使用前需通过阿里云盘网页版获取 refresh token,并用 pip 安装 aliyundrive-fuse。挂载时指定 refresh token 和挂载点(如 /mnt/aliyundrive)。对于 Docker 版 Jellyfin,需将挂载目录通过 -v 参数映射到容器内(如 /media),再在 Jellyfin 控制台添加媒体库并指向该路径。扫描完成后即可使用。

❓

Q&A

aliyundrive-fuse 是什么?它和之前的 aliyundrive-webdav 方案有什么区别?

aliyundrive-fuse 是一个通过 FUSE 将阿里云盘挂载为本地只读文件系统的工具,使 Jellyfin 等媒体软件能直接读取云盘内容。相比之前 aliyundrive-webdav 配合 rclone 的方案,它省去了 rclone 中间层,简化了架构。

为什么 aliyundrive-fuse 需要设置约 10MB 的缓存?

因为 FUSE 文件系统单次读请求较小(Linux 上最大 128KB),对于需要网络请求下载数据的场景会导致频繁请求,所以缓存约 10MB 数据来避免每次读取都发起网络请求,保障读取速度。

使用 aliyundrive-fuse 播放视频时会出现卡顿吗?

可能会偶尔出现卡顿,因为缓存一次要下载 10MB 数据,读取未缓存位置时需要等待网络传输完成。但只要播放器提前下载后续内容,配合 Jellyfin 使用整体还是挺流畅的,没有明显问题。

如何安装和挂载 aliyundrive-fuse?

可以通过 pip 安装:pip install aliyundrive-fuse。安装后从阿里云盘网页版获取 refresh token,然后执行挂载命令,例如:aliyundrive-fuse -r your-refresh-token -w /etc/aliyundrive-fuse /mnt/aliyundrive(需提前创建目录)。

怎样将阿里云盘挂载目录映射到 Docker 版 Jellyfin 容器中?

在运行 Jellyfin 容器时,添加 -v /mnt/aliyundrive:/media 参数,将宿主机的挂载目录映射到容器的 /media 路径。例如:docker run -d --name jellyfin ... -v /mnt/aliyundrive:/media ... jellyfin/jellyfin。

在 Jellyfin 中如何添加阿里云盘上的媒体库?

访问 Jellyfin 容器的 8096 端口进入控制台,在媒体库设置中将文件夹位置选择为挂载好的阿里云盘目录(容器内的 /media),等待扫描完成即可使用。

🏷️

标签

➡️

继续阅读