自力更生 | 你可能不需要一个 NAS?从零开始搭建自托管的影音服务器
编注:本文入选「自力更生」征文活动。本次征文选题灵活,只要围绕「自托管」展开即可,软件推荐、经验分享、技术科普、观点评论均可投稿,6 月 23 日前发布投稿文章即可。入围作品均可获得稿酬、Zearbur 订阅、少数派 PRIME 会员等奖励。了解详情
相信在你的日常生活中,电影、电视剧、动画等等已经成为你不可或缺的娱乐活动。你现在可能会选择打开某一个流媒体服务(Bilibili、爱奇艺、腾讯视频、网飞等等),但是你可能面临着平台没有你想看的那一部电影、电视剧、动画,也可能是你追求更高质量的影片,或者你觉得这些平台或者应用过于臃肿,铺天盖地的广告等等没法给你一个纯净的观看体验。
那么,我推荐你搭建一个专属于你自己的影音服务器吧!
影音服务器 是一种专门用于存储、管理和播放视频内容的软件系统。你可以将自己的影音内容集中存储在某处,然后通过搭建一个影音服务器,将这些影片统一管理,并且允许你在各种设备上访问和播放这些影片。
声明
本文仅讨论不同的影音服务器部署方案,不讨论具体的影视资源应该如何获取,我鼓励使用正版资源。
在传统的认知中,影音服务器往往和 NAS 绑定。然而,购买一个 NAS 服务器和一堆硬盘,需要花费几千元,又潜在地需要花费大量时间精力来部署和维护。得益于现在各种方便的云服务,实际上部署自己专属的媒体服务器,操作并不麻烦,效果也不差,成本也不高。
本文会首先讨论影响影音服务器部署的几个关键要素,帮助你挑选更适合自己需求的方案。
当然,如果你懒得研究各种乱七八糟的方案,你也可以直接跳转到文章最后的方案 4,抄我目前在用的、成本很低的、用的最舒服的一套方案。
影音服务器的运行方式,如下图所示,有 5 个关键要素:影音资源存储,影音服务器,服务器访问存储的方式,播放客户端,网络访问影音服务器的方式。
影音资源存储:你的视频文件存储在什么地方。
例如,你自建的 NAS 服务器里、直接存在本地电脑里、存在某个网盘里。
影音服务器:你使用了什么软件系统作为影音服务器。
这里你可以选择使用 Jellyfin、Emby、Plex、Kodi 等专门的媒体服务器系统,这类系统往往功能强大,能够管理视频资源,刮削视频资源的元数据,生成海报墙(如前文图示),提供相应的播放器客户端,服务端视频解码,保存观看记录,多用户管理等等各种丰富的功能。
在 Jellyfin、Emby、Plex、Kodi 这几个专门的媒体服务器系统软件中,我推荐的是 Jellyfin,我用了它一年多的时间,它是 Emby 的开源版本。早期,Emby 也是开源的,后面转向了闭源的收费软件,Jellyfin 是原本 Emby 开源仓库 fork 下来继续维护的版本。Jellyfin 整体使用下来感觉 UI 比较清爽,符合直觉,对着点一点就能明白如何操作。Plex 下载过,但是安装完根本打不开,完全部署不起来,它本身也是收费软件,所以也 pass。Kodi 是老牌的经典媒体服务器软件,为整个社区生态发展做出了很多贡献,但是用下来感觉像是针对电视等产品形态设计使用的,不过功能看起来很强大,有很多可以配的东西。因此,综合下来,我觉得 Jellyfin 是影音服务器软件不错的一个选择。
除此以外,你也不一定需要选择一个专门的影音服务器系统软件,来管理视频资源。你可以直接搭建一个自托管的云盘服务,或者已经使用了某个云盘作为资源存储,并且这个云盘提供了某些开放能力供用户访问视频资源。目前,比较流行的方式是暴露 WebDAV 形式的接口,供客户端访问使用;也有某些云盘提供商给了特定的 SDK,供客户端访问使用。然后,使用特定播放客户端(Infuse / VidHub 等),读取服务器上的资源,以此在客户端上实现 Jellyfin 等影音服务器提供的能力。
具体来说,自托管网盘,只推荐目前比较流行的 AList,它提供了一个比较易用的 Web UI,支持挂载几十种网盘,并且提供了 WebDAV 接口供客户端访问。提供 WebDAV 开放能力的云盘,推荐两个,一个是阿里云盘,一个是 PikPak。其中,阿里云盘的价格大概 18 每月,给 8 TB 空间,不限速,但是目前似乎因为给大家薅了好几年了,疑似有开始噶韭菜的嫌疑,但反正我目前用的没有任何问题;PikPak,在打折时期大概 200 一年,平常比较贵,疑似是原迅雷的团队出海搞的产品,主要卖点其实是下 torrent + 网盘,同样我用下来没有感觉有任何问题。
资源访问:你的影音服务器如何从资源存储中读取视频,是连接两者的桥梁,往往根据服务器和存储所处的位置,选择对应的访问方式。
例如,可能有几种组合方式:
你可以发现,根据你的视频存储位置不同、运行影音服务器和播放器客户端不同,资源访问方式也是千奇百怪,在实现上都是理论可行的。但是,我们需要强调的是,整个从用户到访问视频资源的完整链路,拖得越长,例如你要把 NAS 中的视频给公网云服务器使用,就经过 3 层软件,因此,整个访问的稳定性、速度等体验都可能会打折扣。正如短板效应,中间任何一个环节有差错,整个观看链路就有问题。对于长链路的部署方案,你可能需要实际尝试,慎重选择,但是本着折腾着玩的精神,后文其实也演示了这样的一种方案。
网络访问:你的播放客户端如何访问到你的影音服务器。
如果你只在内网使用,即只在自己家里用,那么你几乎不需要考虑这个问题,你只需要保证服务器和你的电脑、手机等客户端,在同一个 Wi-Fi 下就行了(或者服务器在公网)。
如果你需要公网访问,有 2 种可能:
播放客户端:你如何点播影音服务器上的视频。
如果你使用 Jellyfin 等某种影音服务器软件,一般它们都会提供 Web UI 或者相应的应用,来访问服务器上视频。
如果你在影音服务器部署时,没有使用的专门的软件,而是采用暴露 WebDAV 接口等形式,那么你就需要挑选一款合适的播放客户端:
在上述的这 5 个影响影音服务器部署的要素中,主要需要考虑的因素是:影音资源存储方式,使用了何种影音服务器,使用了何种播放客户端。另外的 2 个要素并不是主要选择考虑的点:服务器访问资源的方式,由存储和影音服务器决定;客户端网络访问方式,主要取决于你的是否有公网访问的需求。
前 3 种主要因素几乎可以任意排列组合,形成多种不一样的方案,各个方案各有自己满足的需求和优劣,可能需要你自己根据需求抉择。
下面列举了我使用过的几套无需 NAS 的影音服务器方案。我目前正在使用的是第 4 种方案,如果你只想抄作业的话,你可以直接跳到这一节中。
后文将会对这几种方案给一些部署教程。正如上面所说,这些方案中的组件可以互相组合,如果你需要部署上述之外的方案,希望通过上文的分要素分析,你能够触类旁通。
另外,单独将这些无需 NAS 的方案,与 NAS 做一个简单的对比:
- 无需 NAS 的方案,在前期(可能是前几年时间),相对于 NAS 成本更低。
- 使用云盘存储的方案,涉及到一些数据隐私的问题,也容易出现存的东西被审核拿下的情况,而 NAS 隐私性更高。
- 无需 NAS 的方案自带了公网访问能力,而自建 NAS 如果需要公网访问,可能会比较麻烦(没有实际用过,感觉),诸如配置内网穿透等等,考虑自家的网络情况等等。
- 各类无需 NAS 或者需要 NAS 的方案,有操作麻烦的,需要具备一定计算机知识和实操能力,也有简单无脑的。比如,直接用阿里云盘 + Infuse / VidHub 弄起来起来非常简单,而涉及服务器就比较麻烦。对于 NAS 也是类似的,你可以用小成本 DIY 一套东西,但是需要各种软硬件知识和技能,也可以无脑加钱买一套群晖,相对操作起来更容易,遇到问题也更容易求助解决。
- 组一套 NAS 不仅能搭建影音服务器,还能更方便的解锁更多玩法。
因此,没有最完美的方案,一切都是 trade-offs(权衡利弊),只有最适合你自己需求的方案。
如果你不知道自己是否真的需要 NAS,那么你可以试试后文的教程,感受一下。
数据存在自己的 PC 里,内网访问,本地部署 Jellyfin 服务器,使用 Jellyfin Web UI / 弹弹 Play / 播放器。
如果使用 Jellyfin Web UI / 弹弹 Play / 播放器,方案 1 的部署结构如下图所示:
从官网 Downloads | Jellyfin 下载安装 Jellyfin 的 Windows 版本,安装完成后打开 http://localhost:8096
跟随指示进行配置。
在开始配置 Jellyfin 时,它会让你指定一个本地存放视频资源的目录。
Jellyfin 会扫描这个目录,自动分析出这之中包含哪些视频,并从 TMDB 等平台获取这些视频的元数据(影片名,海报,演职人员等)。
这就要求,你的视频资源目录结构以及视频文件名,需要符合一定的约定,才能让 Jellyfin 识别出来。这个要求对后文提到的其它影音服务器软件、弹弹 Play、Infuse 等客户端软件也同样适用,后文将不再赘述。
如下图所示,你需要在配置 Jellyfin,指定它从「资源根目录」中检索视频资源。根目录下需要包含一个个文件夹,每个文件夹表示一部电影 / 电视剧 / 动画,这个文件夹内存放着具体每一集的资源。
资源根目录/
├── 孤独摇滚/
│ ├─ 孤独摇滚.S01E01.mp4
│ ├─ 孤独摇滚.S01E02.mp4
│ ├─ 孤独摇滚.S01E03.mp4
│ ├─ ...
│ └─ 孤独摇滚.S01E12.mp4
├── 葬送的芙丽莲/
│ ├─ 葬送的芙丽莲.S01E01.mp4
│ ├─ ...
│ └─ 葬送的芙丽莲.S01E28.mp4
├── ...
在这个例子中,「资源根目录」(至少)有 2 部动画:「孤独摇滚」和「葬送的芙丽莲」。「资源根目录/孤独摇滚/」这一目录中,存放着所有孤独摇滚的视频资源,命名方式为 「孤独摇滚」+「 . 」+ 「S01」(表示第一季)+ 「Exx」(表示具体的集数)+ 「文件后缀」。对于「资源根目录/葬送的芙丽莲/」,也是类似的。
具体你可以参考 Jellyfin 提供的官方文档:Movies | Jellyfin,Shows | Jellyfin。
因此,Jellyfin 等软件可以从你的视频资源目录中,「刮削」(识别)出有哪些影片或剧集,获取剧集的信息(元数据),并进行相应的整理,生成前文出现过的「海报墙」。
数据存在自己的 PC 里,内网访问,本地部署 Jellyfin 服务器,使用 Jellyfin 移动端 APP / Infuse / VidHub。
如果使用 Jellyfin 移动端 APP / Infuse / VidHub,方案 1 的部署结构如下图所示:
你可以在手机上使用 Jellyfin 的 APP 以及 Infuse / VidHub 来连接你的 PC 上的 Jellyfin 服务器。
简单来说,你需要知道本机在局域网的 IP,在终端运行 ipconfig
命令,得到我这里的局域网 IP 是 192.168.18.209
。
然后,保证你的手机和 PC 处于同一网络下,使用 Jellyfin 的 APP 以及 Infuse / VidHub,配置它们连接到 http://192.168.18.209:8096
(Jellyfin 默认 8096 端口),就可以在手机上利用内网播放 PC 上的视频资源了。
数据存在网盘里,公网服务器部署 AList,服务器部署 Jellyfin 服务器,使用 Jellyfin 自带的客户端 / Infuse / VidHub。
方案 2 的部署结构如下图所示,由于过程比较复杂,可以参考我之前的博客 在服务器用 WebDAV 部署 Jellyfin 进行部署。
在上面的这篇博客中,涉及在 Linux 环境中挂载 WebDAV 目录。如果你有其它需求要在 Windows 上挂载 WebDAV 目录,可以参考我之前的另外一篇博客 Windows 上挂载 WebDAV。
数据存在网盘里,公网服务器部署 AList,不用影音服务器软件,使用 Infuse / VidHub / 支持访问 WebDAV 的播放器。
数据存在阿里云盘或 PikPak 里,直接使用它提供的 WebDAV 访问,不使用影音服务器软件,使用 Infuse / VidHub。
这 2 个方案是我目前正在使用的,总体体验还行,成本不高,配置简单。个人比较推荐给,想从 Infuse / VidHub 开始简单尝试影音服务器的朋友。
对应方案 3,它的部署结构如下图所示:
实际上,这个话题已经有非常多的博客介绍,在此我只做简要介绍,你可以搜索相关的教程进行操作。
在 Linux 服务器上,确保已经安装了 Docker,运行以下命令就可以启动一个 AList 服务:
docker run -d --name=alist --restart=always \
-v /etc/alist:/opt/alist/data -p 5244:5244 \
-e PUID=0 -e PGID=0 -e UMASK=022 xhofe/alist:latest
此时,AList 被启动了在了 5244 端口上。假设你知道后续应该如何操作,包括诸如打开云服务器上的 5244 端口,使用云服务器公网 IP + 端口 5244 访问到 AList 等等。
你可能会担忧在自己的服务器上,启动网盘播放视频,是否会消耗大量带宽和流量。实际上,基本无需担心这个。AList 对很多网盘,都能支持重定向的转发过程,实际上视频播放是直接从云盘到你播放器中,并不会经过 AList 服务器。因此,我们不会受到自己的服务器带宽限制,你完全可以使用非常低配的服务器来部署 AList,而 AList 起到的核心作用是作为中间层转发访问文件的请求。
之后,你需要参考 AList 的官方文档或者博客,将你的云盘挂载到 AList 中。
最后,你需要在 Infuse / VidHub 中添加一个 WebDAV 文件源(AList 文件源)。你需要指定自己的云服务器公网 IP 和端口,指定 AList 登录的用户名和密码,以及 AList 暴露的 WebDAV 的路径是 /dav
。VidHub可以参考下图进行配置,对于 Infuse 也是类似的:
别忘了,你需要添加的文件源中选出你的「资源根目录」,它们应该满足类似的文件夹和文件名要求。
对于 Infuse,可以参考官方目录结构和文件名的指南:Metadata 101 – Firecore Support。
对于 VidHub,可以参考官方目录结构和文件名的指南:VidHub视频文件命名规范 (okaapps.com)。
对应方案 4,它的部署结构如下图所示:
这个方案播放链路是最短的,相应的配置操作也是最简单的。
你只需要在 Infuse / VidHub 上添加文件源时,选择阿里云盘,根据提示登录,最后选择「资源根目录」即可。选出的「资源根目录」应该满足与前文介绍类似的文件夹和文件名要求。
对于 PikPak,可以点击其 Web 页面的右上角设置按钮,打开「设置 > 实验室功能 > WebDAV」,获取到生成的 WebDAV 配置信息,填入 Infuse / VidHub 的文件源配置中即可。
> 下载少数派 客户端、关注 少数派小红书,感受精彩数字生活 🍃
> 实用、好用的 正版软件,少数派为你呈现 🚀
© 本文著作权归作者所有,并授权少数派独家使用,未经少数派许可,不得转载使用。