搭建家用的媒体服务器,用来在不同的设备上面方便得看电影,听音乐,甚至阅读电子书。
可以选择使用 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 服务器。
以下几个需要注意的地方
搭建之后,就可以在笔记本上,手机上,或者小米投影仪上看电影了。 也可以导入电子图书,通过浏览器阅读图书。
单个电影库处理:
在添加电影目录到 资料库的时候,可以选择不下载 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 笔记本组成一个网络,实现了从公网到家里内网的互联互通。