编注:本文入选「自力更生」征文活动。本次征文选题灵活,只要围绕「自托管」展开即可,软件推荐、经验分享、技术科普、观点评论均可投稿,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 + 网盘,同样我用下来没有感觉有任何问题。
资源访问:你的影音服务器如何从资源存储中读取视频,是连接两者的桥梁,往往根据服务器和存储所处的位置,选择对应的访问方式。
例如,可能有几种组合方式:
- 你有公网的云服务器,视频存在服务器本地,服务器启动 Jellyfin:于是 Jellyfin 就是简单的通过读取本地目录,实现资源访问。
- 你有公网的云服务器,视频存在某个云盘中,服务器启动 Jellyfin:由于Jellyfin 只支持读取本地目录,因此你需要将这个云盘,通过 AList / rclone 等软件,将网络目录挂载成「真实」的本地目录(下文介绍)。
- 你的视频存在本地电脑,在本地启动 Jellyfin:同上,Jellyfin 读取本地目录。
- 你的视频存在某个网盘中,在本地启动 Jellyfin:同上,你需要将网盘挂载到本地,在 Windows 中,你可以使用 Windows 原生的 WebDAV 功能、rclone、Rai Drive 来实现本地目录的挂载。
- 你的视频存在 NAS 里,在公网的云服务器上启动 Jellyfin:那么你可能需要先本地起一个 WebDAV 或者其它什么服务器,内网穿透到公网或者你直接有公网 IP,然后在把暴露在公网的 WebDAV 挂载的云服务器本地,供 Jellyfin 使用。
- 你的视频存在阿里云盘里,你直接通过阿里云盘的开放能力连接播放器使用:那么资源访问由阿里云内部掌控,与我们无关。
- ……
你可以发现,根据你的视频存储位置不同、运行影音服务器和播放器客户端不同,资源访问方式也是千奇百怪,在实现上都是理论可行的。但是,我们需要强调的是,整个从用户到访问视频资源的完整链路,拖得越长,例如你要把 NAS 中的视频给公网云服务器使用,就经过 3 层软件,因此,整个访问的稳定性、速度等体验都可能会打折扣。正如短板效应,中间任何一个环节有差错,整个观看链路就有问题。对于长链路的部署方案,你可能需要实际尝试,慎重选择,但是本着折腾着玩的精神,后文其实也演示了这样的一种方案。
网络访问:你的播放客户端如何访问到你的影音服务器。
如果你只在内网使用,即只在自己家里用,那么你几乎不需要考虑这个问题,你只需要保证服务器和你的电脑、手机等客户端,在同一个 Wi-Fi 下就行了(或者服务器在公网)。
如果你需要公网访问,有 2 种可能:
- 你的影音服务器跑在你的 NAS 上:那么你需要有一个公网 IP 或者使用内网穿透,来将影音服务器暴露在公网。这个方案可能需要注意的是,你的网络上传带宽怎么样,内网穿透需要有云服务器或者购买内网穿透服务或者薅 Cloudflare 的羊毛,这些会无形中增加你的部署成本。
- 你的影音服务器跑在云服务上:那么其本身就是在公网上的,有 IP 或者域名就能公网访问。
播放客户端:你如何点播影音服务器上的视频。
如果你使用 Jellyfin 等某种影音服务器软件,一般它们都会提供 Web UI 或者相应的应用,来访问服务器上视频。
如果你在影音服务器部署时,没有使用的专门的软件,而是采用暴露 WebDAV 接口等形式,那么你就需要挑选一款合适的播放客户端:
- 对于苹果用户,目前最流行的是 Infuse,以及国人开发的 VidHub正在追赶 Infuse,也达到了相当高的完成度。
- 由于我不是安卓用户,也没有安卓设备,没有实际使用过,只列举一个 Infuse 的可能替代品,AfuseKt;另外,由网易开发的 Fimly,还处于非常早期的状态,不知道有没有安卓的版本。
- PC 端还有一个方案是使用弹弹 Play,它是一个有弹幕的播放器,放动画的时候能够从各个平台获取弹幕显示。它支持与 Jellyfin类似的读取本地目录的方式,得到一个媒体库。如果使用此方案,需要使用 rclone / Rai Drive等将 WebDAV 挂载到本地目录。
- 除此以外,还有部分返璞归真的方案,这些方案真的只有单纯的文件目录功能,没有上述软件中的海报墙生成等等高级功能,例如:
- 你的媒体服务器使用了 AList 云盘的话,可以直接在它提供的 Web UI 里播放,也可以结合 Pot Player 等本地播放器使用。
- 对于苹果用户,你也可以使用 nPlayer 连接某个云盘,以此播放云盘中的视频资源。
灵活的部署方案※
在上述的这 5 个影响影音服务器部署的要素中,主要需要考虑的因素是:影音资源存储方式,使用了何种影音服务器,使用了何种播放客户端。另外的 2 个要素并不是主要选择考虑的点:服务器访问资源的方式,由存储和影音服务器决定;客户端网络访问方式,主要取决于你的是否有公网访问的需求。
前 3 种主要因素几乎可以任意排列组合,形成多种不一样的方案,各个方案各有自己满足的需求和优劣,可能需要你自己根据需求抉择。
下面列举了我使用过的几套无需 NAS 的影音服务器方案。我目前正在使用的是第 4 种方案,如果你只想抄作业的话,你可以直接跳到这一节中。
- 数据存在自己的 PC(NAS)里,内网访问,本地部署 Jellyfin 服务器,使用 Jellyfin 自带的客户端 / Infuse /
VidHub / 弹弹 Play / 播放器:
- 成本:只有电费,可选的内网穿透成本;
- 优点:操作极其简单,几乎无需进行任何网络配置;
- 缺点:如果是个人 PC,那么存储容量可能受限,公网访问基本需要内网穿透,带宽和个人 PC 的电费是问题。
- 数据存在网盘里,公网服务器部署 AList,服务器部署 Jellyfin 服务器,使用 Jellyfin 自带的客户端 / Infuse /
VidHub:
- 成本:网盘会员,公网服务器等云服务;
- 优点:AList 支持挂载非常多种网盘,另外使用了 Jellyfin,能够直接通过 Web UI 提供丰富的功能,PC、安卓、苹果等各个平台都能直接用;
- 缺点:整个视频播放链路比较长,相应的配置比较麻烦,可能会出现速度、稳定性不太行的情况。
- 数据存在网盘里,公网服务器部署 AList,不用影音服务器软件,使用 Infuse / VidHub / 支持访问 WebDAV 的播放器:
- 成本:网盘会员,公网服务器等云服务;
- 优点:AList 支持挂载非常多种网盘;
- 缺点:Infuse / VidHub 只在苹果有。
- 数据存在阿里云盘或 PikPak 里,直接使用它提供的 WebDAV 访问,不使用影音服务器软件,使用 Infuse / VidHub:
- 成本:网盘会员;
- 优点:便宜,配置方便,直接连到存储的阿里云盘,速度和稳定性有保障;
- 缺点:Infuse / VidHub 只在苹果有。
后文将会对这几种方案给一些部署教程。正如上面所说,这些方案中的组件可以互相组合,如果你需要部署上述之外的方案,希望通过上文的分要素分析,你能够触类旁通。
另外,单独将这些无需 NAS 的方案,与 NAS 做一个简单的对比:
- 无需 NAS 的方案,在前期(可能是前几年时间),相对于 NAS 成本更低。
- 使用云盘存储的方案,涉及到一些数据隐私的问题,也容易出现存的东西被审核拿下的情况,而 NAS 隐私性更高。
- 无需 NAS 的方案自带了公网访问能力,而自建 NAS 如果需要公网访问,可能会比较麻烦(没有实际用过,感觉),诸如配置内网穿透等等,考虑自家的网络情况等等。
- 各类无需 NAS 或者需要 NAS 的方案,有操作麻烦的,需要具备一定计算机知识和实操能力,也有简单无脑的。比如,直接用阿里云盘 + Infuse / VidHub 弄起来起来非常简单,而涉及服务器就比较麻烦。对于 NAS 也是类似的,你可以用小成本 DIY 一套东西,但是需要各种软硬件知识和技能,也可以无脑加钱买一套群晖,相对操作起来更容易,遇到问题也更容易求助解决。
- 组一套 NAS 不仅能搭建影音服务器,还能更方便的解锁更多玩法。
因此,没有最完美的方案,一切都是 trade-offs(权衡利弊),只有最适合你自己需求的方案。
如果你不知道自己是否真的需要 NAS,那么你可以试试后文的教程,感受一下。
方案 1:本地 PC 部署 Jellyfin※
数据存在自己的 PC 里,内网访问,本地部署 Jellyfin 服务器,使用 Jellyfin Web UI / 弹弹 Play / 播放器。
如果使用 Jellyfin Web UI / 弹弹 Play / 播放器,方案 1 的部署结构如下图所示:
Jellyfin※
从官网 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 等软件可以从你的视频资源目录中,「刮削」(识别)出有哪些影片或剧集,获取剧集的信息(元数据),并进行相应的整理,生成前文出现过的「海报墙」。
内网中的 Infuse / VidHub※
数据存在自己的 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 上的视频资源了。
方案 2:在服务器用 WebDAV 部署 Jellyfin※
数据存在网盘里,公网服务器部署 AList,服务器部署 Jellyfin 服务器,使用 Jellyfin 自带的客户端 / Infuse / VidHub。
方案 2 的部署结构如下图所示,由于过程比较复杂,可以参考我之前的博客 在服务器用 WebDAV 部署 Jellyfin 进行部署。
在上面的这篇博客中,涉及在 Linux 环境中挂载 WebDAV 目录。如果你有其它需求要在 Windows 上挂载 WebDAV 目录,可以参考我之前的另外一篇博客 Windows 上挂载 WebDAV。
方案 3 / 4:阿里云盘 / PikPak + AList? + Infuse / VidHub※
数据存在网盘里,公网服务器部署 AList,不用影音服务器软件,使用 Infuse / VidHub / 支持访问 WebDAV 的播放器。
数据存在阿里云盘或 PikPak 里,直接使用它提供的 WebDAV 访问,不使用影音服务器软件,使用 Infuse / VidHub。
这 2 个方案是我目前正在使用的,总体体验还行,成本不高,配置简单。个人比较推荐给,想从 Infuse / VidHub 开始简单尝试影音服务器的朋友。
云服务器部署 AList※
对应方案 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)。
Infuse / VidHub 直接连接到云盘※
对应方案 4,它的部署结构如下图所示:
这个方案播放链路是最短的,相应的配置操作也是最简单的。
你只需要在 Infuse / VidHub上添加文件源时,选择阿里云盘,根据提示登录,最后选择「资源根目录」即可。选出的「资源根目录」应该满足与前文介绍类似的文件夹和文件名要求。
对于 PikPak,可以点击其 Web 页面的右上角设置按钮,打开「设置 > 实验室功能 > WebDAV」,获取到生成的 WebDAV 配置信息,填入 Infuse / VidHub 的文件源配置中即可。
> 下载少数派 客户端、关注 少数派小红书,感受精彩数字生活 🍃
> 实用、好用的 正版软件,少数派为你呈现 🚀