折腾了这么多年Plex,从最开始对着进度条干瞪眼,到现在1080P几乎秒开,不得不感叹Plex是真的强大,也是真的复杂,其间踩过不少坑,也学了不少东西,中文圈子里对这些内容讨论非常少,所以分享一些观点和技巧出来,希望能让后人少走点弯路。
声明:读懂本文需要有一定VPS和PMS相关经验,本文不面向小白,不做科普,以思路讨论为主,不回答XX按钮在哪之类问题;所有内容基于个人理解,可能有错误或过时的地方,欢迎指出。
声明2:使用PMS代表你默认接受需要花费一定的毛爷爷,包括但不限于服务器、云储存、流量中转、硬件设备、客户端授权、Plex Pass等,这个钱可多可少,但是一定是要付出的,白嫖党可以散了。
声明3:以下内容基于VPS中无图形界面的Ubuntu 20.04运行的snap版PMS,且服务器不运行其他服务,请根据实际情况调整硬件和设置。
Plex从视频文件到你的屏幕,中间经历了很多环节,我将尝试从全新的角度入手,分析各个环节的影响因素以及优化方法。
储存和读取
没错,我打算从最最最基础的文件存取说起,首先你得有视频文件才可以看对吧。存取是很多人会忽略的,确实一般情况下这个不会成问题,但是也有坑的时候。
首先,你运行PMS的服务器(VPS/独服)需要有一定的硬盘容量(废话),具体需要多少视你的需求而定,如果你没有大盘鸡,可以考虑用plexdrive或者rclone挂载网盘(方法请善用搜索并多测试,挂载用的参数非常重要),如果这么做,我也建议你的小鸡最少要有50G的硬盘,因为rclone是需要本地缓存的,至少给它个20G吧。
另外一个非常重要的因素是硬盘IO,如果读取文件就很慢,整体自然不可能快,虽然PMS读文件一般是顺序读取,不太吃IO,但是也不排除有坑,比如我遇到过Average I/O speed = 31.8 kB/s的钻石盘= =需要注意的是,如果你在同一个小鸡上跑BT下载或者Resilio Sync之类的,硬盘性能需要更高一些才能同时满足两者,在选择时请务必充分测试。
服务端运行
PMS没有特别硬性的硬件要求,官网有一个参考。我实际跑下来感觉个人使用1G内存保底,对于刚好1G内存的小鸡,强烈建议加swap,否则扫描的时候内存可能会炸,进而导致IO占用大量CPU,整个服务器会卡死(如果你的PMS卡死了,先SSH过去top一下)。CPU官方建议是i3,我这里给一个不负责任的参考,想解1080P至少需要LemonBench跑分2000以上,还有不建议用arm。另外请避免资源限制严格的供应商,即使它跑分高,长时间占用资源可能会导致小鸡被suspend甚至封号,如果你多人/长时间使用或者经常解4K,建议上独服。
转码
这是一个值得大书特书的环节,我尽量讲简单点,毕竟我也很业余。如果你储存的视频文件不能直接串流,那么PMS会在服务端转码然后再串流,这个过程需要占用大量的CPU,所以我们的原则是,在网速允许的情况下应该尽量避免转码(高端独服玩家当我没说)。至于能不能直接串流,不止要看文件扩展名,还要看编码方式以及客户端种类,具体规则我没有研究清楚,但是Plex客户端(至少Windows和Android)比网页版支持的格式多,也就是说有些文件在网页版中必须转码,但是在客户端中可以直接串流;如果客户端也必须转码,可以试一试kodi+Plex插件,或许有奇效。
另外转码的设置也非常重要,如果你播放的分辨率和视频文件不一致,那么无论什么格式都是要转码的。如果网速允许,请在客户端的设置-质量中把视频质量设为最高,如果播放流畅,其他设置保持默认即可。如果你的小鸡转码性能有一点捉急(太捉急的就算了,应该直接扔掉),可以试试改一下设置-转码器中的Transcoder quality以及打开硬件转码,至于效果如何我就不知道了。如果你的小鸡性能很捉急(但是不知道为什么就是不想扔),但是老板心大不限制,那可以在闲置的时候把需要转码的视频转成指定的编码和分辨率,这样下次播放这个文件就可以不用转码了,具体方法在视频的菜单里有一个“优化”,优化后的文件在设置-视频优化版本中管理。
另外还有音频转码和字幕的问题……实在懒得研究,等搞清楚再补。
传输
就是视频流从服务器到你设备的过程。除了转码以外,传输是最容易成为瓶颈的环节,网络环境特别差时,并不是“多等一会”这么简单,可能根本无法加载。
如果你的服务器在本地,可以跳过这一节。
首先,请保证你的客户端和服务器是直连的,就是说设置里服务器名字显示“远程”状态。间接连接需要通过官方服务器中转,绕路严重,而且带宽有限制(详见官方文档),勉强可以管理,但是观看就别想了。直连需要保证端口没有占用且暴露在公网(可能需要设置VPS防火墙或者路由器端口转发),并且远程访问在开启状态。
在此前提之下,选择一台带宽充足、线路优秀的小鸡非常重要,关于线路以及TCP加速我不在这里科普了。如果你的小鸡线路不是非常优秀(但是带宽一定要够,1MB小水管就别想了),可以挂个高质量的代理。网上也有走Cloudflare CDN的教程,具体自己搜,效果是加速还是减速必须实测才知道,但是个人不太建议,好像Cloudflare的TOS禁止传输视频。
另外就是本地的网络环境,包括入户带宽、路由器/网线以及终端设备。对于非发烧友,这些现在不太可能成为瓶颈啦,不过遇到问题时先测个速是好习惯,公共WIFI可能有限速或者负载过高的问题,路由器故障或者信号干扰也挺常见的。哦还有DNS可能会影响速度(普遍情况来说是,具体到Plex我没测过),建议用国内较著名的公共DNS而非运营商分配的地址。
解码和播放
文件串流到你的终端设备后还需要解码才能变成图像和声音。现代的设备解码成为瓶颈的情况比较少见(智能电视除外),不过有些问题也应该注意一下,例如设备发烫、没有声音等,如果遇到这些问题,可以尝试从以下角度解决。
如果处理器性能不足导致卡顿、发烫等,可以考虑把视频转码成更低的分辨率播放(虽然我更建议扔了);如果是内存不足自己想办法(同上依然建议扔了);另外还可能是解码问题,可以尝试使用外部播放器,(Android客户端)在设置-高级-播放器中勾选“使用外部播放器”即可,然后外部播放器可能支持多种解码器(硬解、软解之类),可以都尝试一下看看哪个效果好。
哦还有一些少见的例外情况,比如小米家的某投影仪,Plex客户端卡成翔,用Kodi+Plex插件如丝般顺滑。
目前就想到这些,日后有新内容会再补充,如果有错误或者(非小白的)疑问也可以评论告诉我,就酱~
文章评论
现在 Plex 挂树莓派上,平时用着没什么问题,但是有时候运营商抽抽就访问不了有点烦。转码倒是不多,偶尔遇到一些设备强制会要转码。
最近打算找个小鸡挂 Plex,感觉需要各方面都均衡点挺难的。线路大部分其实 VPS 跑几路 1080p 都没问题,倒是这偶尔的转码有点愁,不知道怎么来衡量。杜甫肯定是消费不起,毕竟就自己和朋友用用。
哎,要是这些个还算便宜的机房的 u 能支持硬解就好了,这样就算要转码也不会有多少资源占用了。
@xsnaruto 我有一个PMS跑在VPS上,个人感觉双核锐龙够转码1080p了,但是要挑超售不多的商家,还有注意条款有没有限制,至于硬盘自然是不便宜,还是用挂载网盘吧,欧美的小鸡网盘到本地的速度并不是瓶颈