编注:本文入选「自力更生」征文活动。本次征文选题灵活,只要围绕「自托管」展开即可,软件推荐、经验分享、技术科普、观点评论均可投稿,6 月 23 日前发布投稿文章即可。入围作品均可获得稿酬、Zearbur 订阅、少数派 PRIME 会员等奖励。了解详情


相信在你的日常生活中,电影、电视剧、动画等等已经成为你不可或缺的娱乐活动。你现在可能会选择打开某一个流媒体服务(Bilibili、爱奇艺、腾讯视频、网飞等等),但是你可能面临着平台没有你想看的那一部电影、电视剧、动画,也可能是你追求更高质量的影片,或者你觉得这些平台或者应用过于臃肿,铺天盖地的广告等等没法给你一个纯净的观看体验。

那么,我推荐你搭建一个专属于你自己的影音服务器吧!

影音服务器 是一种专门用于存储、管理和播放视频内容的软件系统。你可以将自己的影音内容集中存储在某处,然后通过搭建一个影音服务器,将这些影片统一管理,并且允许你在各种设备上访问和播放这些影片。

声明

本文仅讨论不同的影音服务器部署方案,不讨论具体的影视资源应该如何获取,我鼓励使用正版资源

Jellyfin 海报墙

在传统的认知中,影音服务器往往和 NAS 绑定。然而,购买一个 NAS 服务器和一堆硬盘,需要花费几千元,又潜在地需要花费大量时间精力来部署和维护。得益于现在各种方便的云服务,实际上部署自己专属的媒体服务器,操作并不麻烦,效果也不差,成本也不高。

本文会首先讨论影响影音服务器部署的几个关键要素,帮助你挑选更适合自己需求的方案。

当然,如果你懒得研究各种乱七八糟的方案,你也可以直接跳转到文章最后的方案 4,抄我目前在用的、成本很低的、用的最舒服的一套方案。

影音服务器部署的关键要素

影音服务器的运行方式,如下图所示,有 5 个关键要素:影音资源存储影音服务器服务器访问存储的方式播放客户端网络访问影音服务器的方式。

image.png
影音服务器的运行方式

影音资源存储:你的视频文件存储在什么地方。

例如,你自建的 NAS 服务器里、直接存在本地电脑里、存在某个网盘里。

影音服务器:你使用了什么软件系统作为影音服务器。

这里你可以选择使用 JellyfinEmbyPlexKodi 等专门的媒体服务器系统,这类系统往往功能强大,能够管理视频资源,刮削视频资源的元数据,生成海报墙(如前文图示),提供相应的播放器客户端,服务端视频解码,保存观看记录,多用户管理等等各种丰富的功能。

JellyfinEmbyPlexKodi 这几个专门的媒体服务器系统软件中,我推荐的是 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 种方案,如果你只想抄作业的话,你可以直接跳到这一节中。

  1. 数据存在自己的 PC(NAS)里,内网访问,本地部署 Jellyfin 服务器,使用 Jellyfin 自带的客户端 / Infuse / VidHub / 弹弹 Play / 播放器:
    • 成本:只有电费,可选的内网穿透成本;
    • 优点:操作极其简单,几乎无需进行任何网络配置;
    • 缺点:如果是个人 PC,那么存储容量可能受限,公网访问基本需要内网穿透,带宽和个人 PC 的电费是问题。
  2. 数据存在网盘里,公网服务器部署 AList,服务器部署 Jellyfin 服务器,使用 Jellyfin 自带的客户端 / Infuse / VidHub:
    • 成本:网盘会员,公网服务器等云服务;
    • 优点:AList 支持挂载非常多种网盘,另外使用了 Jellyfin,能够直接通过 Web UI 提供丰富的功能,PC、安卓、苹果等各个平台都能直接用;
    • 缺点:整个视频播放链路比较长,相应的配置比较麻烦,可能会出现速度、稳定性不太行的情况。
  3. 数据存在网盘里,公网服务器部署 AList,不用影音服务器软件,使用 Infuse / VidHub / 支持访问 WebDAV 的播放器:
    • 成本:网盘会员,公网服务器等云服务;
    • 优点:AList 支持挂载非常多种网盘;
    • 缺点:Infuse / VidHub 只在苹果有。
  4. 数据存在阿里云盘或 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 的部署结构如下图所示:

image.png
本地 PC 部署 Jellyfin

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 | JellyfinShows | Jellyfin

因此,Jellyfin 等软件可以从你的视频资源目录中,「刮削」(识别)出有哪些影片或剧集,获取剧集的信息(元数据),并进行相应的整理,生成前文出现过的「海报墙」。

内网中的 Infuse / VidHub

数据存在自己的 PC 里,内网访问,本地部署 Jellyfin 服务器,使用 Jellyfin 移动端 APP / Infuse / VidHub。

如果使用 Jellyfin 移动端 APP / Infuse / VidHub,方案 1 的部署结构如下图所示:

image.png
内网使用 Jellyfin

你可以在手机上使用 Jellyfin 的 APP 以及 Infuse / VidHub 来连接你的 PC 上的 Jellyfin 服务器。

简单来说,你需要知道本机在局域网的 IP,在终端运行 ipconfig 命令,得到我这里的局域网 IP 是 192.168.18.209

image.png
ipconfig

然后,保证你的手机和 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 进行部署。

image.png
在服务器用 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,它的部署结构如下图所示:

image.png
云服务器部署 AList

实际上,这个话题已经有非常多的博客介绍,在此我只做简要介绍,你可以搜索相关的教程进行操作。

在 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 也是类似的:

image.png
VidHub 添加远程 AList 参考配置

别忘了,你需要添加的文件源中选出你的「资源根目录」,它们应该满足类似的文件夹和文件名要求。

对于 Infuse,可以参考官方目录结构和文件名的指南:Metadata 101 – Firecore Support

对于 VidHub,可以参考官方目录结构和文件名的指南:VidHub视频文件命名规范 (okaapps.com)

Infuse / VidHub 直接连接到云盘

对应方案 4,它的部署结构如下图所示:

image.png
Infuse / VidHub 直接连接到云盘

这个方案播放链路是最短的,相应的配置操作也是最简单的。

你只需要在 Infuse / VidHub 上添加文件源时,选择阿里云盘,根据提示登录,最后选择「资源根目录」即可。选出的「资源根目录」应该满足与前文介绍类似的文件夹和文件名要求。

对于 PikPak,可以点击其 Web 页面的右上角设置按钮,打开「设置 > 实验室功能 > WebDAV」,获取到生成的 WebDAV 配置信息,填入 Infuse / VidHub 的文件源配置中即可。

> 下载少数派 客户端、关注 少数派小红书,感受精彩数字生活 🍃

> 实用、好用的 正版软件,少数派为你呈现 🚀