好不容易搭建的Nas如果只是同步个文件,似乎真的有点浪费,至少没有nas的话,也有阿里云,甚至直接ssh传个文件也很方便。家庭Nas另一个主要的应用就是媒体服务器,在知乎上看到有人分享,主要通过plex/sonarr/radarr/sabnzbd/transmission来实现,实践下来,sabnzbd需要付费获取provider,sonarr和radarr需要indexer实现,于是最后去除sabnzbd,加入jackett这个indexer实现工具。

docker

全部软件使用docker安装,所以先安装docker,参照官网安装。

sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - # 添加官方GPG密钥
sudo apt-key fingerprint 0EBFCD88 # 验证密钥
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" # 设置镜像仓库
sudo apt-get update
sudo apt-get install docker-ce
sudo systemctl enable docker

媒体服务器

安装

sudo docker pull linuxserver/plex
sudo docker pull linuxserver/sonarr
sudo docker pull linuxserver/radarr
sudo docker pull linuxserver/sabnzbd
sudo docker pull linuxserver/transmission
sudo docker pull linuxserver/jackett

可以使用 docker create 构建container并运行,或者采用 docker-compose 方式运行,本来想采用后者,但是似乎docker-compose配置文件对于版本的要求特别严格,还是采用docker create的方式,这里主要参考 https://github.com/420m/dockyard

docker create --name=plex --net=host -e PUID=1000 -e PGID=1000 -e VERSION=docker -v /mnt/storage/share/Media/plex/config:/config -v /mnt/storage/share/Media/sonarr/series:/data/tvshows -v /mnt/storage/share/Media/radarr/movies:/data/movies -v /tmp/transcode:/transcode --restart unless-stopped linuxserver/plex
docker create --name=sonarr -e PUID=1000 -e PGID=1000 -e TZ=Europe/London -p 8989:8989 -v /mnt/storage/share/Media/sonarr/config:/config -v /mnt/storage/share/Media/sonarr/series:/tv -v /mnt/storage/share/Media/transmission/downloads:/downloads --restart unless-stopped linuxserver/sonarr
docker create --name=radarr -e PUID=1000 -e PGID=1000 -e TZ=Europe/London -p 7878:7878 -v /mnt/storage/share/Media/radarr/config:/config -v /mnt/storage/share/Media/radarr/movies:/movies -v /mnt/storage/share/Media/transmission/downloads:/downloads --restart unless-stopped linuxserver/radarr
docker create --name=transmission -e PUID=1000 -e PGID=1000 -e TZ=Europe/London -e TRANSMISSION_WEB_HOME=/combustion-release/ -p 9091:9091 -p 51413:51413 -p 51413:51413/udp -v /mnt/storage/share/Media/transmission/config:/config -v /mnt/storage/share/Media/transmission/downloads:/downloads -v /mnt/storage/share/Media/transmission/watch:/watch --restart unless-stopped linuxserver/transmission
docker create --name=jackett -e PUID=1000 -e PGID=1000 -p 9117:9117 -v /mnt/storage/share/Media/jackett/config:/config -v /mnt/storage/share/Media/transmission/downloads:/downloads --restart unless-stopped linuxserver/jackett

运行上述命令,生成相应container。因为container生成中加了--restart unless-stopped,所以只要docker访问开启,所有container都会自动启动。采用下列命令运行:

sudo docker start xxx # 加-a -i前台运行

配置

安装过程还算简单,配置过程虽然也是鼠标点点,但是反而更麻烦。主要参考 http://tricksty.com/tricks/sonarr-how-to-add-good-public-indexers 这篇文章。这里面说一点,jackett里面添加indexer时,本来中文的就不多,而且几乎都是private的,打开之后,全部都是关闭注册的,只能邀请进入。估计这也是没有办法,太多自私的人,使用吸血的下载工具或者只要自己下载完马上就关闭种子,没有任何分享精神。最后没办法加了一些国外的public的indexer,实测下载美剧速度很好,下载中文内容很慢,至少我在sonarr里面加了武林外传,到现在还没有种子。

更新

上面的配置尝试了一段时间,慢慢也发现了一些问题。

  1. 首先是plex,先是字幕的问题,默认的字幕很少,而且几乎没有中文的。尽管有自带的OpenSubtitles,还有Sub-Zero这样的插件,但试了下,更新字幕的时候,几乎都会卡死。然而这不是主要的问题,相信折腾一下,都是能够解决的。我更在意的问题是,plex的商业色彩太浓厚了,在一堆的开源软件里面,显得有点格格不入。从top里看,plex会驻留多个进程,而且时不时的占用cpu。尤其是plex的解码工作在服务器端,每当看视频的时候,cpu占用都很高。plex甚至给我的邮箱发推广邮件,这些商业行为和特点,让我决定寻找plex的替代。

  2. 其次是音频播放的问题,只要在家,基本都会打开《雍正剑侠图》,不知不觉这部书已经讲了五六年了,也不知道王胖子打算讲到什么时候。之前花了点时间在树莓派上面配置了mpd,可以利用串流在手机上面播放。问题出在手机客户端,更流行的MPDroid、M.A.L.P都没法实现手机端的串流,估计是MIUI系统的问题,尽管后来找到了MPD Remote,可以利用vlc串流,但是总是掉线,即使网速很好的情况下。这样,也需要寻找mpd的替代。

服务端 minidlna

plex自带dlna服务,偶尔尝试用vlc播放dlna分享的视频,发现plex几乎没有任何cpu占用,对dlna有很好的印象。所以干脆停用了plex服务,安装dlna服务器。

sudo apt install minidlna # 会自动新建用户minidlna
sudo usermod -a -G homeshare minidlna # 使minidlna有读写权限

修改配置文件 /etc/minidlna.conf

user=minidlna
media_dir=A,/mnt/storage/share/Music
media_dir=P,/mnt/storage/share/DCIM
media_dir=V,/mnt/storage/share/Media/sonarr/series
media_dir=V,/mnt/storage/share/Media/radarr/movies
# friendly_name=Nas_dlna
inotify=yes

minidlna使用内核中的inotify功能更新文件,但需要内核开启该功能,同时需要文件系统支持,NFS似乎并不支持,使用下句更新:

sudo minidlnad -R # 强制更新

客户端

vlc

vlc里面可以直接使用本地网络中的dlna协议播放视频,当然直接走samba协议也行,效果很好,速度很快,拖动进度条几乎跟本地播放一样。问题在于,没法实现字幕。

kodi

后来看到kodi,也是很受欢迎的htpc软件,由之前的xbmc发展而来。与plex不同的是,kodi是一个客户端向的软件,plex在配置完服务端之后,在任何地方打开浏览器都是一样的,而在kodi中所有的解码工作都是在客户端进行的,服务端可以用dlna或者samba协议提供资源,服务端消耗资源很少,同时kodi完全开源。在电视上面安装了kodi,结果找了好多个版本居然都闪退,花了好多时间终于找到可以正常运行的版本,不得不说国内的android生态呀,即使是小米。网上有很多kodi配置的文章可以参考,也有一个chinese addon的库可以使用。可以看到,这个东西虽然小众,但是还是有一些拥趸。其实主要就是添加 信息提供者 (刮削器)和 字幕 的插件。为了下载合适的字幕,首先需要准确的多媒体信息,刮削器就是完成这样的工作,有douban、mtime等选择,但是无论那种选择都是直接根据视频文件的名字进行搜索。结果就是,效果很差,尤其是一些文件命名不规范的资源。看来这条路行不通,突然想到,在sonarr/radarr里添加任务的时候,已经获取了很完善的信息,为什么kodi里面还要重新获取呢,能不能直接利用sonarr/radarr的信息呢。查到kodi里面有一个sonarr/radarr的插件,但是死活连不上,于是只能从sonarr/radarr端入手。

  • 在sonarr/radarr设置选项里面可以添加kodi的Metadata,这样当sonarr/radarr更新时会在多媒体文件相同路径下生成nfo文件,

  • 在kodi中添加smb中movies/series文件夹(dlna无法读取多媒体信息),信息提供者选择local information only。

  • 插件中添加opensubtitles,注册并填入用户名密码,当然也可以选择国内的一些字幕源。

这样kodi更新时会直接读取sonarr/radarr生成的nfo文件,kodi里面显示的多媒体信息跟sonarr/radarr里面的完全一致,字幕也完全没有问题。

音频

之前已经配置了minidlna服务,可以直接使用vlc播放,问题是无法保存播放列表和进度。于是寻找dlna客户端,酷安里面基本没有,F-Droid里面几乎没有,Google商店里面倒是有不少,也下载几个尝试了下,印象最深刻的是,商业氛围。Android虽然基于linux内核,但特点完全不同于linux。linux有各种基石般的开源软件,而Android里面似乎不那么友好,算了,没有资格抱怨,只能说自己适应了开源环境之后,很难接收各种商业行为。找来找去,居然让我找到了一个叫UPnPlay的软件,完全满足我的要求。而这个软件,居然在各种Google商店里面都找不到,连github上面都没有踪影,似乎linuxtoy上面有文章介绍过。

0 Comments.

Please log in to leave a comment.