搭建家用的媒体服务器,用来在不同的设备上面方便得看电影,听音乐,甚至阅读电子书。

可以选择使用 Plex, Emby, 或者 Jellyfin。 Plex 是商业软件,付费版本的功能更强大,免费版本也能用。 Emby 的早先版本是免费版本,后来商业化之后开源版本不再有更新。 Jellyfin 是基于 Emby 的后续社区开源版本,有持续的更新,且支持硬件解码。 对于我来说, Jellyfin 更重要的功能是除了电影和音乐的支持,还支持电子书。 支持 PDF,EPUB 格式的电子书。

早先用的 Emby,在部署电子图书馆的时候,发现 Jellyfin 支持电子图书的。 媒体服务器用一个系统,电子图书馆再用一个系统维护起来比较麻烦。 这里有几个应用的功能对比: 

Compare Media Servers · Protektor-Desura/Archon Wiki · GitHub

对比几个媒体服务器方案之后, 决定使用 Jellyfin 来搭建家用的媒体服务。 以下是使用 docker 来搭建 Jellyfin 的过程。

安装 jellyfin:

用的这个版本的 Docker 镜像.  你也可以使用 linuxserver/jellyfin,或者 jellyfin/jellyfin 的 docker镜像。

Docker Hub: https://hub.docker.com/r/nyanmisaka/jellyfin

我用的 docker-compose 的方式启动应用。 部署于在家里的 Linux 小主机上。

vim docker-compose.xml

version: "3.5"
services:
  jellyfin:
    image: nyanmisaka/jellyfin
    container_name: jellyfin
    user: nobody
    network_mode: "host"
    volumes:
      - //data/docker-app/jellyfin/config:/config
      - //data/docker-app/jellyfin/cache:/cache
      - /data/baidu:/media
      - /data/books:/books
      - /data/movie:/movie
      - /data/music:/music
    restart: "unless-stopped"
    # Optional - alternative address used for autodiscovery
    environment:
      - JELLYFIN_PublishedServerUrl=http://example.com

启动应用: docker-compose up -d

Linux 服务器的地址是 192.168.1.19

之后通过 http://192.168.1.19:8090 来访问 Jellyfin, 第一次访问的时候,设置一个用户名和密码即可。 导入电影,音乐之后界面如下:

如果你在运行 docker-compose 的时候下载不下来 docker 镜像,可以先 docker pull 下载下来镜像。 如果 pull 不下来, 多半是因为网络的缘由,需要设置代理服务器。 如何设置代理服务器,参考我另外的文章设置 Docker 服务器。

以下几个需要注意的地方

1.图书的支持
Mobi, azw3 之类的文件, 可以先转换成 epub 文件,就可以在浏览器上阅读浏览。安装 calibre 之后,找到 calibre 安装目录下面的 ebook-convert  命令:
ebook-convert  input output.epub
在 Mac 下面运行这个命令,可以批量将当前目录下面的所有 azw3 文件转码为 epub:
ls *.azw3 |xargs -n1 -I {} ebook-convert {} {}.epub
2.播放音乐出现这个错误
This client isn't compatible with the media and the server isn't sending a compatible media format.
可能的原因是 Jellyfin 在更新的时候,连接不到网络引起的, 设置 docker 容器的代理之后。 可以正常播放 wma 的音乐。
3.硬件加速解码
Intel Quick Sync Video 选项只对 Windows 的版本有用。 Linux 都是统一用 VA API 这个选项,实际起硬件加速作用的主要是 /dev/dri(需要根权限)。操作步骤如下:
查看系统是否支持显卡硬解转码
使用 SSH 登录群晖系统(以 root 账号登录),运行命令 ls /dev/dri

若输出 card0renderD128,则说明支持显卡硬解。

搭建之后,就可以在笔记本上,手机上,或者小米投影仪上看电影了。 也可以导入电子图书,通过浏览器阅读图书。

4.电影的图片、标题元数据不正确

单个电影库处理:

在添加电影目录到 资料库的时候,可以选择不下载 Metadata, 不从 MovieDB 获取数据。

对于已经添加的资料库, 可以 Rescan 重新扫描生成 Metadata。 更新电影库的时候, 把 “TheMovieDB“, “The Open Movie Database” 禁掉,保留 “embedded Image Extractor”,“Screen Grabber” 的选项, 使得可以自动从电影的内容里面提取图片。

对所有电影库默认不从 MovieDB, Open Movie Database 下载 Metadata:

查遍了 Google ,没有发现可以禁用这两个库的方法。 试着改代码,因为网络的原因构建及其麻烦。 最终查代码和配置文件, 发现 config/system.xml 里面有配置 MetadataFetchers, ImageFetchers。

如果希望所有的电影库,默认都不选择 “TheMovieDB“, “The Open Movie Database” 的选项。 则可以更新 config/config/system.xml 的内容,在 Movie 的 MetadataOptions 里面禁用掉这两个数据库,把这两个库添加到 DisabledMetadataFetchers,  DisabledImageFetchers 里面。 如下:

    <MetadataOptions>
      <ItemType>Movie</ItemType>
      <DisabledMetadataSavers />
      <LocalMetadataReaderOrder />
      <DisabledMetadataFetchers>
        <string>The Open Movie Database</string>
        <string>TheMovieDb</string>
      </DisabledMetadataFetchers>
      <MetadataFetcherOrder />
      <DisabledImageFetchers>
        <string>The Open Movie Database</string>
        <string>TheMovieDb</string>
      </DisabledImageFetchers>
      <ImageFetcherOrder />
    </MetadataOptions>
    <MetadataOptions>

设置之后, 添加新的电影库时,页面如下:

Jellyfin 比较傻的地方是没有全局的设置,可以在 UI 上禁用 TheMovieDb 和 The Open Movie Database,而且默认在匹配的时候还会匹配错内容。所以通过在添加库时,禁用掉这两个选项。或者更改 config/config/system.xml 来默认禁用掉这两个选项。

另外,我出门在外的时候,也可以访问家里的服务器。这个是通过把家里的机器,跟云端的一台Linux 服务器通过 Open VPN 连接起来实现的。 就是说在云端 Linux 服务器上安装 Open VPN 的 Server,然后家里的 媒体服务器(Linux)上安装 Open VPN,配置客户端。 然后在我的 Mac 笔记本上也安装 Open VPN,用的 Tunnelblick ,这样家用的 媒体服务器、云端 Linux 服务器、Mac 笔记本组成一个网络,实现了从公网到家里内网的互联互通。 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐