前言:打造属于自己的流媒体服务

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。当初始设置向导出现时,按照以下步骤操作:

  1. 选择语言:选择中文。
  2. 创建管理员账户:设置用户名和密码。
  3. 添加媒体库:可以先跳过,稍后再设置。
  4. 元数据语言:设置为中文。
  5. 远程访问:设置是否允许外部访问。

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管理员页面添加媒体库:

  1. 仪表板 > 媒体库 > 添加媒体库
  2. 选择内容类型:电影、电视节目、音乐中选择
  3. 添加文件夹:输入存储该媒体的路径
  4. 元数据语言:选择中文
  5. 国家:选择中国

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,需要在路由器上设置端口转发。

  1. 访问路由器管理页面(通常是192.168.0.1或192.168.1.1)
  2. 找到端口转发或虚拟服务器设置菜单
  3. 设置将外部端口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

  1. 字幕提供者设置:在Settings > Providers中添加OpenSubtitles、Subscene等。
  2. 语言设置:在Settings > Languages中添加中文。
  3. 媒体服务器联动:在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轻松部署和管理各种服务。