Contents

降低CPU使用率 让Plex客户端解码

1. 硬件介绍

Plex给人的印象是需要服务器端转码,这给很多人造成了错误的印象,前几天入手了终身Plex Pass,随即折腾起来,发现Plex完全可以像Kodi一样使用客户端解码,降低服务器端的CPU占用率,加上Plex本身漂亮的UI界面和强大的数据刮削能力,Plex在Emby(收费), Jellyfin(全免费), 和Kodi(全免费,太丑,弃)的竞争中,完全不落下风。

我的硬件:一台小的Home Box,配置是i3-7100u(Intel Kaby Lake), 8G内存。一台家用NAS,QNAP NAS 453B mini一台,10G内存, 处理器是J3455(Intel Apollo Lake), 8G内存。

处理器是i3-7100的Home Box安装了Esxi,上面安装了Openwrt和Ubuntu server(ubuntu里又装了Plex服务器端)以及其它系统。也就是所说的软路由中安装Plex服务器。

Ubuntu server和QNAP上都安装了Plex server,这里使用Ubuntu中的Plex server来测试,NAS仅仅作为一个存储设备。

i3-7100U的核显是HD 620, 而QNAP NAS的处理器是J3455,核显HD 500。两款核显均支持4K分辨率下H.264的转码transcoding(包括解码decoding编码encoding),而对于, H.265(HEVC)编码,只有HD620的也就是7100u支持转码,J3455仅仅支持解码(支持播放)。具体核显的性能区别可以看这里以及这里。所以不论是自己组件NAS还是购买现成的NAS,CPU是非常关键的,CPU越新,核显越新,才能更大幅度的降低CPU的使用率。

/%E9%99%8D%E4%BD%8Ecpu%E4%BD%BF%E7%94%A8%E7%8E%87-%E8%AE%A9plex%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%A7%A3%E7%A0%81/images/chrome_1oeP3adGZQ.jpg

2.开始

2.1 软路由Ubuntu系统挂载NAS硬盘

首先在Ubuntu中挂载NAS中共享的电影文件夹:

1
2
3
4
5
apt install nfs-common #安装nfs
showmount -e 192.168.1.99 #看下nas哪些目录是共享可挂载的。
mkdir /mnt/qnap #在ubuntu中创建文件夹qnap,用来挂在qnap的共享文件夹
mount 192.168.1.99:/电影共享 /mnt/qnap #将nas共享的电影共享目录挂在到linux的qnap目录上。
apt install ffmpeg intel-gpu-tools #安装解码器和查看intel显卡占用率程序

2.2 显卡直通设置

/%E9%99%8D%E4%BD%8Ecpu%E4%BD%BF%E7%94%A8%E7%8E%87-%E8%AE%A9plex%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%A7%A3%E7%A0%81/images/esxi%E6%98%BE%E5%8D%A1%E7%9B%B4%E9%80%9A1.jpg
ESXI中先允许核显直通
/%E9%99%8D%E4%BD%8Ecpu%E4%BD%BF%E7%94%A8%E7%8E%87-%E8%AE%A9plex%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%A7%A3%E7%A0%81/images/esxi%E6%98%BE%E5%8D%A1%E7%9B%B4%E9%80%9A2.jpg

/%E9%99%8D%E4%BD%8Ecpu%E4%BD%BF%E7%94%A8%E7%8E%87-%E8%AE%A9plex%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%A7%A3%E7%A0%81/images/esxi%E6%98%BE%E5%8D%A1%E7%9B%B4%E9%80%9A3.jpg
修改Ubuntu server的显卡信息,将默认的修改为FALSE
/%E9%99%8D%E4%BD%8Ecpu%E4%BD%BF%E7%94%A8%E7%8E%87-%E8%AE%A9plex%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%A7%A3%E7%A0%81/images/esxi%E6%98%BE%E5%8D%A1%E7%9B%B4%E9%80%9A5.jpg
修改Ubuntu配置,添加PCI设备,然后选择刚才直通的显卡即可
/%E9%99%8D%E4%BD%8Ecpu%E4%BD%BF%E7%94%A8%E7%8E%87-%E8%AE%A9plex%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%A7%A3%E7%A0%81/images/esxi%E6%98%BE%E5%8D%A1%E7%9B%B4%E9%80%9A4.jpg
进入Ubuntu后,运行lspci | grep -i vga,发现核显直通成功

随后安装Plex的Ubuntu服务器端和手机或者PC的客户端,此处略过…,需要注意的是,媒体文件夹选择刚才挂载的NAS文件夹即可。

3. 开始测试

/%E9%99%8D%E4%BD%8Ecpu%E4%BD%BF%E7%94%A8%E7%8E%87-%E8%AE%A9plex%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%A7%A3%E7%A0%81/images/t.jpg

首先进入Plex服务器后台(我这里的地址http://192.168.1.237:32400/),点击transcoder,确保下面两个选择框都勾选

3.1 ass字幕

播放H.265的影片,默认使用ass字幕,服务器端资源占用率如下:

/%E9%99%8D%E4%BD%8Ecpu%E4%BD%BF%E7%94%A8%E7%8E%87-%E8%AE%A9plex%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%A7%A3%E7%A0%81/images/ass%E5%AD%97%E5%B9%95%E5%BC%80%E5%90%AF%E5%90%8ECPU%E5%8D%A0%E7%94%A8%E7%8E%87.jpg

运行htop,cpu占用率情况,可以看到plex的transcoder在工作

/%E9%99%8D%E4%BD%8Ecpu%E4%BD%BF%E7%94%A8%E7%8E%87-%E8%AE%A9plex%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%A7%A3%E7%A0%81/images/ass%E5%AD%97%E5%B9%95%E5%BC%80%E5%90%AF%E5%90%8EGPU%E5%8D%A0%E7%94%A8%E7%8E%87.jpg

运行intel_gpu_top,可以看到核显也在工作

/%E9%99%8D%E4%BD%8Ecpu%E4%BD%BF%E7%94%A8%E7%8E%87-%E8%AE%A9plex%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%A7%A3%E7%A0%81/images/ass%E5%AD%97%E5%B9%95%E5%BC%80%E5%90%AF%E5%90%8EPlex%E5%90%8E%E5%8F%B0%E6%98%BE%E7%A4%BA%E5%9C%A8%E8%BD%AC%E7%A0%81.jpg

Plex后台也可以看到Plex在硬件转码(HW),字幕显示ASS格式

3.2 更换为srt字幕

我下载的影片内嵌了srt的字幕,在播放终端手动将字幕设为srt字幕后的情况:

/%E9%99%8D%E4%BD%8Ecpu%E4%BD%BF%E7%94%A8%E7%8E%87-%E8%AE%A9plex%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%A7%A3%E7%A0%81/images/srt%E5%AD%97%E5%B9%95%E5%BC%80%E5%90%AF%E5%90%8Eplex%E8%BF%9B%E7%A8%8B%E6%B6%88%E8%80%97%E8%B5%84%E6%BA%90.jpg

CPU占用率明显下降,并且plex的transcoder没有工作

/%E9%99%8D%E4%BD%8Ecpu%E4%BD%BF%E7%94%A8%E7%8E%87-%E8%AE%A9plex%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%A7%A3%E7%A0%81/images/srt%E5%AD%97%E5%B9%95%E5%BC%80%E5%90%AF%E5%90%8EGPU%E5%8D%A0%E7%94%A8%E7%8E%87.jpg

核显没有任何负载

/%E9%99%8D%E4%BD%8Ecpu%E4%BD%BF%E7%94%A8%E7%8E%87-%E8%AE%A9plex%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%A7%A3%E7%A0%81/images/srt%E5%AD%97%E5%B9%95%E5%BC%80%E5%90%AF%E5%90%8EPlex%E5%90%8E%E5%8F%B0%E6%98%BE%E7%A4%BA%E6%B2%A1%E6%9C%89%E8%BD%AC%E7%A0%81.jpg

Plex后台显示Direct Play,意思就是后台没有进行任何的转码,字幕是SRT

4. 总结

所以以我目前的播放终端来看,能更进一步降低CPU占用率的很简单的办法就是更换字幕格式,实际测试发现SRT和**PGS(pgs字幕还带有各种特效和字体,居然不转码?!很奇怪)**以及SSA格式的字幕均不会转码,很不起眼的原因。如果必须服务器端解码的时候,这就考验服务器端CPU的核显了,牙膏厂的7系列及以后的cpu的核显(620及以后的可以)可以承担很多工作,这样CPU使用率会低很多。

音频有时候也会转码,但是cpu的使用率却非常低,所以不考虑了。

下一步研究下免费的Jellyfin,毕竟是免费的,并且是从收费的Emby脱离出来的。