Plex 作为一款相对来说已经很成熟的个人媒体资料库软件,在功能上已经可以满足大部分的人的需求了。电影、电视剧、个人视频、音乐、电视直播等等,现在都可以在 Plex 里面很轻松的进行管理。

另外,通过 Webhook 还可以扩展出很多有趣的功能,比如说利用 trakt.tv 官方提供的功能来同步 Plex 播放记录;还比如说可以和智能家居联动,实现 Plex 开始播放时自动调节家中智能设备到预设的「影院状态」……。

但是(凡事都有一个「但是」),功能的扩展是没有上限的。对于喜欢折腾的人来说,Plex 的控制面板虽然完整,但不够丰富的,用互联网用语来说就是「颗粒度不够细腻」。

既然如此,有没有什么办法能够丰富 Plex 的使用体验呢?当然有,我目前主要用的有两个第三方的工具,一个是 Trakter,另一个就是本章要介绍的 Tautulli 了。


Tautulli 是一个基于 Python 制作的第三方程序,主要作用是对 Plex Media Server 进行监测、分析和通知的分发。相关链接:官网 / Github

相较于 Plex 的后台面板来说,Tautulli 可以提供更多更细致的监控和分析,还有非常方便的通知功能(这个最后说)。对于爱折腾的人,尤其是数据控来说,Tautulli 可以说是 Plex 必不可少的一个软件了。


介绍完 Tautulli,下面开始来聊聊安装。

因为需要持续监控 Plex 的活动状态,所以它需要安装在一个能稳定运行的机器上,可以是通用的 VPS,也可以是自己的家庭服务器(比如 NAS)上,比较简单的当然就是直接安装在用来跑 Plex Media Server 的机器上。至于具体安装在哪里,全看个人意愿了,只要能保证稳定持久运行就可以,我自己的话是安装在 VPS 上的。

直接安装的话,需要本地有 Python 环境,最低版本要求 2.7.3。Windows 和 macOS 有直接的安装包,Ubuntu 可以使用 Snap 包管理器直接搜索安装,其他环境下安装的话步骤稍微多一点,方法可以参考官方的:安装指南

因为我的 VPS 是运行在 Debian 上的,再加上「系统洁癖」的缘故,最后我是选择通过 Docker 来安装的。使用 Docker 安装的相关指令是:

docker run -d \
  --name=tautulli \
  --restart=unless-stopped
  -v <path to data>:/config \
  -e PUID=<uid> \
  -e PGID=<gid> \
  -e TZ=Asia/Hong_Kong \
  -p 8181:8181 \
  tautulli/tautulli

<path to data> 是用来保存 Tautulli 相关数据文件的路径,运行指令前需要提前创建好路径位置;
<uid><gid> 填写自己用户编号和组编号,这两行是和用户权限相关的,删掉这两行不影响使用,权限默认使用的就是 root 了;

根据自己的情况适当修改一下指令,然后直接在命令行执行,Docker 会自动下载 Tautulli 镜像并安装运行。

等到指令走完后,就可以通过 http://ip:8181 来访问 Tautulli 的 Web 界面了。


Tautulli 安装好之后,需要做的有两件事情,一个是设置 Tautulli 的账户,另一个就是把自己的 Plex Media Server 和 Tautulli 关联起来。

1. 设置 Tautulli 用户和密码

点击 WebUI 的右上角的设置图标进入设置界面,然后在 Web Interface 下的 AUTHENTICATION 一项中设置用户名和密码。

Allow Plex Admin 是允许 Plex 的管理员直接通过 Plex 账户登录 Tautulli,一般是建议可以开启这项的,开启的同时可以删除上面的用户名和密码,仅通过 Plex 账户登录 Tautulli;
Allow Guest Access to Tautulli 是允许受分享资料库的用户通过他们的 Plex 账户登录 Tautulli,默认建议是不勾选的,或者根据自己的需求来做选择吧。

2. 关联 Plex Media Server 和 Tautulli

Web Interface 的下面一项就是 Plex Media Server,点击后进入相关的设置,先滑到最下面有一项 Plex.tv Account Token,点击输入框后面的 Fetch 按钮,验证 Plex 账户并获取到自己 Plex 的 Token,之后点击保存。

刷新一下当前页面,然后在顶部的 Plex IP Address or Hostname 下面那个输入框点一下,就会弹出下拉菜单让你选择自己 Plex Media Server 地址。

下拉框中会显示所有你的 Plex Meida Server 的地址,192.168 开头的就是本地的地址,Tautulli 如果是安装在本地环境下,选择这个;如果 Tautulli 不是在本地环境安装,就选择其他的选项。

根据自己的 Tautulli 安装的位置选择内网或者外网地址后,最后点击输入框后面的 Verify Server 验证服务器,验证成功后点击最下面的保存就行了。

关联 Plex Media Server 和 Tautulli

注:如果 Plex Meida Server 是安装在家庭环境下,并通过运营商提供的公网 IP 提供外网访问,而 Tautulli 是安装在外网环境,需要通过公网 IP 关联 Plex,这种场景下建议在家里的路由器上通过 DDNS 给 Plex Media Server 配置一个域名地址,防止因为路由器重启或者重新拨号之类的问题导致宽带的公网 IP 变动,影响 Tautulli 获取 Plex 信息。


自动化的通知也是 Tautulli 的一个很重要的功能,它可以通过自定义实现不错的通知效果,比如我配置了两个通过 Telegram 发送的通知,一个是新添加媒体资源的时候自动发送媒体相关信息的通知,另一个是媒体播放的时候发送的相关通知:

通知的效果,左边是新媒体通知,右边的是播放通知

通知的相关设置位置在 Tautulli 设置页面的 Notification Agents 中。进入设置界面后,点击 Add a new notification agent 添加新通知,然后根据提示操作就可以。

比如设置 Telegram 通知的步骤:

  1. 添加通知选择 Telegram
  2. 填入 Telegram Bot Token 和 用户/群组/频道 ID
  3. 点击 Test Notifications 选项,发送测试通知验证第 2 步设置是否有误
  4. 点击 Trigger 选项,勾选自己需要的触发器
  5. 点击 Text 选项,在对应的触发选项下填入想要发送的推送内容
  6. 保存

推送内容中的变量可以在 Text 选项里点击上面的几个 click me 查看,这边分享几个我自己用的推送内容,推送内容的效果就是像上面图片中的样子:

🍕 新增项目 🍕

-------------------------------

🍔 项目类型:<movie>电影/短片</movie><show>剧集/综艺</show><season>季度剧集/综艺</season><episode>单集剧集/综艺</episode>

📺 项目名称:{title}<season>

🧇 季度信息:{season_name}</season><episode>

ℹ️ 单集信息:S{season_num00}E{episode_num00> / }</episode>

🐢 额外信息:<movie>MOVIE / </movie><episode>SHOW / </episode>{air_date}

🐻 内容简介:

{summary}

--------------------------------

{⭐ 评分: <audience_rating>/100}

🍿 播放:<a href="{plex_url}">Plex Web Link</a>

🔗 外链:<a href="{themoviedb_url}">TMDB</a> / <a href="{imdb_url}">IMDB</a> / <a href="{trakt_url}">Trakt</a> / <a href="https://m.douban.com/search/?query=<movie>{title}</movie>{show_name}&type=movie">豆瓣</a>
添加新项目时发送的推送
▶️ 开始播放 ▶️ (#{transcode_decision!u})

-------------------------------

🍟 用户:{#<user> / }{stream_bandwidth>kbps}

🖥️ 设备:{player} ({platform})

🧇 项目:<movie>[MOVIE] </movie><episode>[SHOW] </episode>{title}

ℹ️ 详情:<episode>S{season_num00}E{episode_num00> / }</episode>{<air_date> / }{bitrate>kbps}

-------------------------------

💃 视频:{stream_video_resolution>P}{ / <stream_container!u}{ / <stream_video_codec!u}{ / <stream_video_bitrate>kbps}

🕺 音频:{stream_audio_language!u}{ / <stream_audio_codec!u}{ / <stream_audio_bitrate>kbps}

💬 字幕:{stream_subtitle_language!u}{ / <stream_subtitle_container!u}{ / #<subtitle_decision!u}
有项目开始播放时发送的推送
⏹ 停止播放 ⏹ {(<stream_duration>MIN)}

-------------------------------

🍟 用户:{#<user> / }{stream_bandwidth>kbps}

🖥️ 设备:{player} ({platform})

🧇 项目:<movie>[MOVIE] </movie><episode>[SHOW] </episode>{title}

ℹ️ 详情:<episode>S{season_num00}E{episode_num00> / }</episode>{<air_date> / }{bitrate>kbps}
项目停止播放时发送的推送

其中,开始播放的推送中,第一行最后面的标签是显示「是否是转码播放」,用户后面的 kbps 是用户的带宽,用来对比媒体详情后面的比特率,验证是否是因为带宽问题导致的转码播放;停止播放后面的那个标签是显示这次播放的时间长度。

通知相关设置的标签特别多,也很强大,所以还是需要自己摸索一下,我这边只是提供一个简单的配置方便小白快速上手。