Plex
Plex 是一个媒体播放器系统和软件套件,包含许多用于10英尺用户界面的播放器应用程序,以及一个相关的媒体服务器,用于整理存储在本地设备上的个人媒体。集成的 Plex Channels 为用户提供了访问日益增长的在线内容提供商的途径,例如 YouTube、Vimeo、TEDTalks 和 CNN 等。Plex 还提供与云服务的集成,包括 Dropbox、Box、Google Drive 或 Copy。
Linux 版 Plex 分为闭源服务器 Plex Media Server,以及开源客户端 Plex Home Theater,后者是流行的Kodi项目的一个分支。
Plex Media Server (PMS)
安装
安装 plex-media-serverAUR(稳定更新频道)或 plex-media-server-plexpassAUR(Beta 更新频道)。后者仅供 Plex Pass 订阅者使用,可以提前获得改进和/或新功能,但也可能提前遇到潜在的 Bug。尽管 Beta 更新频道通常相当稳定,但建议安装稳定版本,除非您需要特定的早期访问内容(发布说明)。
配置
启动/启用 plexmediaserver.service systemd 单元。
要开始配置 Plex Media Server,请浏览至 https://:32400/web/。
要远程配置 Plex Media Server,您可以先创建一个 SSH 隧道(设置只能从 localhost 进行)
$ ssh ip.address.of.server -L 8888:localhost:32400
然后浏览至 https://:8888/web/。
或者,如果您正在运行 Apache 并使用反向代理,请在 httpd-vhosts.conf 中添加以下配置
<VirtualHost *:80> ServerName ip.address.of.server ProxyPass / https://:32400/ ProxyPassReverse / https://:32400/ </VirtualHost>
自定义域名
Nginx 反向代理
下面提供了一个使用 Nginx 进行反向代理的服务器配置示例,包括证书配置。
/etc/nginx/sites-available/domain.com.conf
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name media.domain.com;
# SSL
ssl_certificate /etc/letsencrypt/live/media.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/media.domain.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/media.domain.com/chain.pem;
# logging
access_log /var/log/nginx/media.domain.com.access.log;
error_log /var/log/nginx/media.domain.com.error.log warn;
# reverse proxy
location / {
proxy_pass https://:32400;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# HTTP redirect
server {
listen 80;
listen [::]:80;
server_name media.domain.com;
include nginxconfig.io/letsencrypt.conf;
location / {
return 301 https://media.domain.com$request_uri;
}
}
插件
PMS 可以通过额外的插件进行扩展。例如,PMS 可以作为 IPTV 客户端使用 IPTV 插件。
插件可以安装在 /var/lib/plex/Plex Media Server/Plug-ins 目录中。
Plex 直播电视与 DVR
Plex 直播电视需要 plexpass。
要启用 Plex 的直播电视观看和 DVR 支持,您必须拥有支持的调谐器之一,这些调谐器列在 支持页面上。PMS 将自动识别任何连接的调谐器。
Plex 用户需要属于 video 组才能访问本地调谐器。可以通过运行 usermod -a -G video plex 来完成此操作。
要通过 m3u 播放列表启用 IPTV 支持,请安装 xTeVeAUR。
Hauppauge
所有 Hauppauge 调谐器的驱动程序已包含在 Linux 内核中一段时间(例如,WinTV-DualHD 的 ~v4.7),但固件默认不会加载。通过例如使用 dmesg -w 启动 tail 来查找内核消息:firmware file ‘dvb-demod-siXXXX-YY.fw’ not found,并启用/插入(USB)调谐器设备。如果缺失,下载相应的 固件文件并将其复制到 /lib/firmware/。
安全
建议将媒体文件存储在主目录之外,因为让 PMS 访问它们意味着降低其安全性。拥有一个单独的 /media 或 /mnt/media 分区是与 PMS 配合使用的良好设置。
您可以通过 systemd 进一步提高安全性,方法是 编辑 plexmediaserver.service 如下:
/etc/systemd/system/plexmediaserver.service.d/restrict.conf
[Service] ReadOnlyPaths=/ ReadWritePaths=/var/lib/plex /tmp
ReadOnlyDirectories 不适用于任何子挂载,您必须将它们也列出来。资源管理
最初,PMS 使用 ulimit 来限制其分配的资源,但这与作为普通用户运行不兼容。取而代之的是,您现在可以通过 systemd 设置最大内存量。例如,您可以添加
MemoryMax=4G
到上述文件。
网络
PMS 及其 DLNA 服务器需要打开几个端口
- Plex Media Server: TCP 32400
- Plex DLNA Server: TCP 32469, UDP 1900
- 网络发现: UDP 32410, 32412, 32413, 32414
- Bonjour/Avahi 网络发现(旧版): UDP 5353
iptables 的一个简短示例
# iptables -A INPUT -p tcp -m multiport --dports 32400,32469 -j ACCEPT # iptables -A INPUT -p udp -m multiport --dports 1900,32410,32412,32413,32414 -j ACCEPT
为了通过标准 http 端口连接到 Plex,可以使用此命令(用于端口 8080)
# iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 32400
然后您就可以直接连接到 http://yourplexaddress:8080 上的这个端口。
UFW 规则
如果您使用 UFW 并想为 Plex 创建一个应用程序列表条目,请创建/编辑 /etc/ufw/applications.d/plexmediaserver 并确保它包含以下内容
[plexmediaserver] title=Plex Media Server (Standard) description=The Plex Media Server ports=32400/tcp|3005/tcp|5353/udp|8324/tcp|32410:32414/udp [plexmediaserver-dlna] title=Plex Media Server (DLNA) description=The Plex Media Server (additional DLNA capability only) ports=1900/udp|32469/tcp [plexmediaserver-all] title=Plex Media Server (Standard + DLNA) description=The Plex Media Server (with additional DLNA capability) ports=32400/tcp|3005/tcp|5353/udp|8324/tcp|32410:32414/udp|1900/udp|32469/tcp
保存文件后,使用以下命令重新加载 UFW 应用程序定义:
# ufw app update plexmediaserver
然后最后允许 Plex 应用程序:
# ufw allow plexmediaserver-all
库更新
Plex Media Server 有一个“自动更新我的库”的设置,可以检测到您下载到库中的新媒体文件。但随着库的增长,这些更新可能不再可靠工作。要解决此问题,您需要增加非 root 用户可以通过 inotify 订阅的文件数量。创建文件 /etc/sysctl.d/40-max-user-watches.conf
/etc/sysctl.d/40-max-user-watches.conf
fs.inotify.max_user_watches=524288
并运行
# sysctl --system
以在不重启的情况下应用。现在 Plex 应该能看到任何新文件。
故障排除
日志位于 /var/lib/plex/Plex Media Server/Logs。
如果日志不存在或无用,您可能需要手动启动 PMS 以获取终端输出。
[plex]$ source /etc/conf.d/plexmediaserver [plex]$ export LD_LIBRARY_PATH=/usr/lib/plexmediaserver [plex]$ /usr/lib/plexmediaserver/Plex\ Media\ Server
Plex 的 WebUI 返回 404
有时在更新 Plex 的 WebUI 时可能会出现 404 Not Found 错误。要解决此问题,只需重启 plexmediaserver.service 即可。
长时间运行的停止作业
在注销、关机或手动停止 plexmediaserver.service 时,systemd 停止作业可能需要很长时间才能完成。这可能是由于 Plex Tuner Service 中的一个 Bug。[1]
如果您不使用 Plex 的 DVR 功能,可以阻止 Plex Tuner Service 运行。首先,停止 plexmediaserver.service,然后重命名相关的可执行文件。
# mv '/usr/lib/plexmediaserver/Plex Tuner Service' '/usr/lib/plexmediaserver/Plex Tuner Service.disabled'
最后,再次启动 plexmediaserver.service。
为了避免在每次更新后手动重复这些步骤,请在 /etc/pacman.conf 中使用 NoExtract 数组来阻止安装此文件。
Plex 未检测到文件夹或外部驱动器
为了让 Plex 看到文件夹,需要授予其读和执行权限。这是因为 Plex 以用户 "plex" 而非您的用户身份运行。因此,默认情况下它无法访问您的 /home/ 文件夹。最佳实践是将媒体放在根文件夹中的一个文件夹中(例如 /PlexMedia/)或放在外部驱动器上。然后,您需要通过下面的代码授予其读和执行权限,或者通过文件管理器进行设置。
# chmod -R 775 path/to/media/folder
如果尚未设置,请将所有者/组设置为您的用户名。
# chown yourusername:yourusername /mediafolder
外部驱动器
如果您没有为您的驱动器显式设置挂载配置,当您尝试通过桌面环境(例如 GNOME 或 KDE)的文件浏览器访问它们时,它们可能会被自动挂载。Plex 将无法访问驱动器。这是因为桌面环境通过 FUSE 将其挂载到您的用户,而 Plex 默认使用 "plex" 用户。
您需要手动挂载驱动器才能让 Plex 看到它们,方法是设置挂载点。有关更多详细信息,请参阅 Fstab。您也可以使用 KDE Partition Manager 或 GNOME Disks 等程序来设置分区的挂载点。请确保为外部驱动器设置正确的用户权限。
Plex for Desktop
Plex Desktop 是 Plex 桌面媒体客户端的当前版本。它已正式取代 Plex Home Theater (PHT) 和 Plex Media Player (PMP),并包含 Plex Pass 用户的下载。PMP 已于 2020 年 EOL,尽管它仍然保留了“电视模式”(已被 Plex HTPC 取代)。请注意,Plex 的桌面应用程序是闭源的。
安装
Snap 或 plex-desktopAUR 包可以从 Snap 安装。
Kodi 和 PleXBMC
使用 PleXBMC 插件,Kodi 可以作为 PHT 的替代品。
安装
安装 kodi 包,然后按照 https://kodi.wiki/view/Add-on:PleXBMC 上的说明进行操作。