家庭服务器搭建完全指南第5篇:媒体服务器搭建
Home Server Complete Guide Part 5: Building a Media Server
前言:打造属于自己的流媒体服务
Netflix、Disney+、爱奇艺……如今的流媒体服务真的很多。但各个服务的内容分散在不同平台,而自己拥有的电影或电视剧文件播放起来也很不方便。在家庭服务器上搭建媒体服务器就能解决所有这些问题。
搭建媒体服务器后,家中的所有视频、音乐、照片都可以在智能电视、手机、平板等任何设备上轻松观看。即使在外面,只要有网络连接,就能像使用自己的Netflix一样使用。本篇将从媒体服务器软件对比开始,详细介绍安装、配置到外部访问的全部过程。
1. 什么是媒体服务器?
1.1 媒体服务器的概念
媒体服务器是一种服务器软件,用于存储视频、音乐、照片等媒体文件,并使其能够在各种设备上进行流媒体播放。与简单的文件共享不同,媒体服务器提供以下功能:
- 自动获取媒体信息:自动获取电影标题、剧情简介、演员信息、海报图片等。
- 媒体库整理:按类型、年份、导演等自动分类,整齐排列。
- 转码:实时转换播放设备不支持格式的文件进行播放。
- 观看进度同步:在任何设备上停止观看后,都可以在其他设备上继续观看。
- 用户管理:可以为家庭成员创建账户,管理个性化推荐和观看记录。
1.2 媒体服务器的优势
运营媒体服务器可以享受多种好处:
- 集中管理:可以在一个地方管理分散的媒体文件。
- 无设备限制:可以从智能电视、手机、平板、电脑等任何设备访问。
- 外部访问:即使在家外也可以访问自己的媒体库。
- 便于分享:可以轻松与家人或朋友分享媒体。
- 节省订阅费:利用已有的内容,减少对流媒体服务的依赖。
2. 媒体服务器软件对比:Plex vs Jellyfin vs Emby
我们来比较一下最常用的三种媒体服务器软件。了解各自的特点后,选择适合自己的就可以了。
2.1 Plex
Plex是媒体服务器领域历史最悠久、知名度最高的软件。
- 优点:精致的UI、稳定的服务、丰富的客户端应用、简单的外部访问设置
- 缺点:部分核心功能付费(Plex Pass)、必须使用Plex账户、封闭的生态系统
- 费用:基础免费,Plex Pass月费$4.99或终身许可$119.99
- 推荐对象:不想花时间在设置上的用户、重视稳定性的用户
2.2 Jellyfin
Jellyfin是完全免费的开源媒体服务器。最初是Emby的开源分支。
- 优点:100%免费、开源、无需强制账户、社区活跃、插件扩展性强
- 缺点:UI比Plex略显简陋、官方客户端应用较少、初始设置可能较复杂
- 费用:完全免费
- 推荐对象:不想花钱的用户、喜欢开源的用户、喜欢自定义的用户
2.3 Emby
Emby是介于Plex和Jellyfin之间的媒体服务器。
- 优点:简洁的UI、稳定的服务、DVR和直播电视功能
- 缺点:大部分核心功能付费(Emby Premiere)、曾经是开源但现在已闭源
- 费用:基础免费,Emby Premiere月费$4.99或终身许可$119
- 推荐对象:需要DVR/直播电视功能的用户、想在Plex和Jellyfin之间取得平衡的用户
2.4 对比表
| 项目 | Plex | Jellyfin | Emby |
|---|---|---|---|
| 价格 | 部分付费 | 完全免费 | 部分付费 |
| 开源 | X | O | X |
| 必须账户 | O (Plex账户) | X | X |
| UI完成度 | 最高 | 良好 | 好 |
| 客户端应用 | 非常丰富 | 一般 | 丰富 |
| 硬件加速 | O (付费) | O (免费) | O (付费) |
| 社区 | 大规模 | 活跃 | 中等 |
本指南将以Jellyfin为基准进行说明。因为它完全免费,功能也足够,而且硬件加速转码也是免费提供的。
3. 安装Jellyfin
3.1 使用Docker安装Jellyfin(推荐)
使用Docker可以简化安装和更新。以下是使用docker-compose的安装方法。
首先创建Jellyfin专用目录:
mkdir -p /opt/jellyfin/{config,cache}
mkdir -p /media/{movies,tvshows,music}
编写docker-compose.yml文件:
version: "3.8"
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
user: 1000:1000
network_mode: host
volumes:
- /opt/jellyfin/config:/config
- /opt/jellyfin/cache:/cache
- /media:/media:ro
restart: unless-stopped
environment:
- JELLYFIN_PublishedServerUrl=http://your-server-ip:8096
运行容器:
cd /opt/jellyfin
docker-compose up -d
3.2 直接安装(Ubuntu/Debian)
如果不使用Docker,可以直接安装。
# 添加Jellyfin仓库
sudo apt install apt-transport-https gnupg
wget -O - https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo apt-key add -
echo "deb [arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/$( awk -F'=' '/^ID=/{ print $NF }' /etc/os-release ) $( awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release ) main" | sudo tee /etc/apt/sources.list.d/jellyfin.list
# 安装
sudo apt update
sudo apt install jellyfin
# 启动服务
sudo systemctl start jellyfin
sudo systemctl enable jellyfin
3.3 初始设置向导
安装完成后,在Web浏览器中访问http://服务器IP:8096。当初始设置向导出现时,按照以下步骤操作:
- 选择语言:选择中文。
- 创建管理员账户:设置用户名和密码。
- 添加媒体库:可以先跳过,稍后再设置。
- 元数据语言:设置为中文。
- 远程访问:设置是否允许外部访问。
4. 配置媒体库
4.1 整理文件夹结构
系统地整理媒体文件,Jellyfin就能准确获取元数据。推荐的文件夹结构如下:
/media/
├── movies/
│ ├── 寄生虫 (2019)/
│ │ └── 寄生虫 (2019).mkv
│ ├── Inception (2010)/
│ │ └── Inception (2010).mkv
│ └── ...
├── tvshows/
│ ├── 鱿鱼游戏 (2021)/
│ │ ├── Season 01/
│ │ │ ├── 鱿鱼游戏 - S01E01 - 木槿花开了.mkv
│ │ │ ├── 鱿鱼游戏 - S01E02 - 地狱.mkv
│ │ │ └── ...
│ │ └── Season 02/
│ │ └── ...
│ └── ...
└── music/
├── Artist Name/
│ ├── Album Name (Year)/
│ │ ├── 01 - Track Name.flac
│ │ └── ...
│ └── ...
└── ...
4.2 添加媒体库
在Jellyfin管理员页面添加媒体库:
- 仪表板 > 媒体库 > 添加媒体库
- 选择内容类型:电影、电视节目、音乐中选择
- 添加文件夹:输入存储该媒体的路径
- 元数据语言:选择中文
- 国家:选择中国
4.3 元数据设置
要正确获取中国内容的元数据,需要进行额外设置。
- 电影:使用TheMovieDB作为元数据来源。中文元数据支持良好。
- 电视节目:使用TheMovieDB或TheTVDB。
- 音乐:使用MusicBrainz。
在媒体库设置中启用"获取图片"选项,就会自动下载海报、背景图片等。
5. 转码设置
5.1 什么是转码?
转码是实时转换播放设备不支持的编解码器或分辨率的文件的功能。例如,要在旧款智能电视上播放HEVC(H.265)编码的4K视频,服务器需要将其转换为H.264后传输。
5.2 硬件加速设置
转码对CPU负担很大。使用硬件加速可以让GPU代替这项工作,大大减少CPU负载。
Intel Quick Sync(集成显卡)
如果使用Intel CPU的集成显卡,在Docker容器中添加以下设备:
devices:
- /dev/dri:/dev/dri
在Jellyfin设置中进入仪表板 > 播放 > 转码,将"硬件加速"设置为"VAAPI"或"QSV"。
NVIDIA GPU
如果使用NVIDIA GPU,安装nvidia-docker并在docker-compose中添加以下内容:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
在Jellyfin中将硬件加速设置为"NVENC"。
5.3 转码优化技巧
- 优先Direct Play:尽可能让客户端直接播放原始文件。不进行转码播放可以消除服务器负载。
- 使用高兼容性格式:保存视频时使用H.264 + AAC组合编码,大多数设备都可以Direct Play。
- 带宽设置:在客户端应用中将最大流媒体质量设置为"原始",可以避免不必要的转码。
6. 外部访问设置
6.1 端口转发
要从外部访问Jellyfin,需要在路由器上设置端口转发。
- 访问路由器管理页面(通常是192.168.0.1或192.168.1.1)
- 找到端口转发或虚拟服务器设置菜单
- 设置将外部端口8096转发到内部服务器IP的8096端口
6.2 HTTPS设置(推荐)
为了外部访问的安全性,建议设置HTTPS。推荐使用Nginx反向代理和Let's Encrypt。
server {
listen 443 ssl http2;
server_name jellyfin.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/jellyfin.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jellyfin.yourdomain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8096;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
6.3 DDNS设置
在没有固定IP的家庭中使用DDNS会很方便。免费DDNS服务有DuckDNS、No-IP、Dynu等。
7. 使用Bazarr自动下载字幕
7.1 Bazarr介绍
Bazarr是一个自动下载电影和电视节目字幕的程序。与Jellyfin联动后,每当添加新媒体时,它会自动查找中文字幕。
7.2 安装Bazarr
version: "3.8"
services:
bazarr:
image: lscr.io/linuxserver/bazarr:latest
container_name: bazarr
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- /opt/bazarr/config:/config
- /media/movies:/movies
- /media/tvshows:/tv
ports:
- 6767:6767
restart: unless-stopped
7.3 配置Bazarr
- 字幕提供者设置:在Settings > Providers中添加OpenSubtitles、Subscene等。
- 语言设置:在Settings > Languages中添加中文。
- 媒体服务器联动:在Settings > Sonarr/Radarr中联动,或直接指定路径。
设置完成后,Bazarr会定期搜索并下载字幕。下载的字幕会保存在与视频文件相同的文件夹中,Jellyfin会自动识别。
8. 客户端应用设置
8.1 智能电视
可以在各电视制造商的应用商店中安装Jellyfin应用。
- 三星电视(Tizen):在三星应用商店搜索"Jellyfin"安装
- LG电视(webOS):在LG Content Store安装"Jellyfin"
- Android TV:在Google Play商店安装"Jellyfin"
- Apple TV:在App Store安装"Jellyfin"
- Fire TV:在Amazon Appstore安装"Jellyfin"
如果没有官方应用,可以通过Web浏览器访问Jellyfin服务器地址使用Web客户端。
8.2 移动应用
在智能手机和平板电脑上也可以使用Jellyfin应用。
- Android:在Google Play安装"Jellyfin"
- iOS:在App Store安装"Jellyfin Mobile"或第三方应用"Swiftfin"
安装应用后输入服务器地址并使用账户登录即可使用。从外部访问时输入DDNS地址或公网IP。
8.3 桌面端
- Web浏览器:任何操作系统都可以通过Web浏览器访问
- Jellyfin Media Player:官方桌面应用(Windows、macOS、Linux)
- Kodi插件:如果使用Kodi,可以安装Jellyfin插件
9. 故障排除
9.1 常见问题及解决方法
元数据匹配错误的情况
将文件名准确改为"电影名称 (年份).扩展名"格式。如果还是不行,选择该媒体使用"识别元数据"功能手动匹配。
播放卡顿或缓冲严重的情况
很可能正在进行转码。在客户端设置中将质量设置为"原始",或检查服务器的硬件加速是否正常工作。
无法从外部访问的情况
检查端口转发设置,确认防火墙中该端口是否已打开。ISP可能会阻止端口,可以尝试使用其他端口(如443)。
结语
本篇介绍了如何在家庭服务器上搭建媒体服务器。Jellyfin完全免费,功能却不逊于商业服务,强烈推荐给初次搭建媒体服务器的用户。
媒体服务器可以说是家庭服务器的精华所在。一旦搭建好,全家人都可以方便地使用,即使在外面也能享受自己的流媒体服务。下一篇我们将学习如何使用Docker轻松部署和管理各种服务。