Administrator
发布于 2026-05-01 / 1 阅读
0

在UNRAID上部署RPlay直播自动录制

RPlay这个平台没有直播回放功能,错过想看的主播就只能等下次开播。有录播需求的话要么手动守着录,要么找个工具自动化。我搜了一圈发现有个叫rplay-live-dl的Docker项目,专门做这件事,就在UNRAID上部署了一套。

这个工具做什么

rplay-live-dl是个Python写的Docker工具,核心逻辑很简单:

  • 配置你要监控的创作者列表

  • 每60秒轮询一次这些创作者在没在播

  • 直播一开始就自动调用yt-dlp下载.ts流

  • 直播结束后用FFmpeg把.ts合并成mp4

  • 同名标题自动加_1​、_2​后缀,不会覆盖

  • 合并失败的保留原始流文件,方便手动补救

整个过程全自动,部署完就不用管了。

UNRAID部署

UNRAID的Docker GUI部署这种纯后台服务特别顺手,不需要打命令。我用的配置命令如下(token和用户ID已隐去):

docker run \
 -d \
 --name='rplay-live-dl' \
 --net='bridge' \
 --pids-limit 2048 \
 -e TZ="Asia/Shanghai" \
 -e HOST_OS="Unraid" \
 -e HOST_HOSTNAME="Tower" \
 -e HOST_CONTAINERNAME="rplay-live-dl" \
 -e 'AUTH_TOKEN'='你的JWT_Token' \
 -e 'USER_OID'='你的用户OID' \
 -e 'INTERVAL'='60' \
 -e 'LOG_LEVEL'='INFO' \
 -e 'PYTHONUNBUFFERED'='1' \
 -l net.unraid.docker.managed=dockerman \
 -l net.unraid.docker.icon='https://rplay.live/favicon-32x32.png' \
 -v '/mnt/disk1/appdata/rplay-live-dl/config':'/app/config':'rw' \
 -v '/mnt/disk1/rplayvideo/archive':'/app/archive':'rw' \
 -v '/mnt/disk1/appdata/rplay-live-dl/logs':'/app/logs':'rw' \
 'paverz/rplay-live-dl:latest'

几个关键的配置点:

网络选bridge就行,纯后台服务不需要端口映射,没有Web界面。

存储分了三个卷。config放appdata里,archive放磁盘阵列的大空间目录(一场直播几个GB很正常),logs随便放。

环境变量全用Docker模板的变量区填,不需要挂.env文件。这个项目用pydantic-settings读配置,环境变量优先级比.env文件高,所以直接塞环境变量最省事。

时区设Asia/Shanghai​,录制文件名带的时间戳会跟着这个时区走。

获取RPlay凭证

过程稍微折腾了一点,因为要在浏览器开发者工具里找:

  1. 登录rplay.live

  2. F12开DevTools → Console → 输入localStorage.getItem('_AUTHORIZATION_')​回车,拿到一串JWT token

  3. 访问https://rplay.live/myinfo/ → 页面上的User Number就是USER_OID

创作者ID的获取也类似——进创作者主页,F12 → Network → 刷新页面 → 搜CreatorOid​ → 复制那串ID。

AUTH_TOKEN是JWT格式,会过期。过期了按上面的步骤重新拿一次,在UNRAID模板里更新环境变量然后重启容器就行。

config.yaml只放创作者列表

这个项目分了两套配置:运行时参数走环境变量(凭证、轮询间隔、日志级别),创作者列表和API地址走config/config.yaml​。

config.yaml很简单:

apiBaseUrl: https://api.rplay.live

creators:
  - name: "创作者A"
    id: "拿到的CreatorOid"
  - name: "创作者B"
    id: "另一个CreatorOid"

只要这一个文件放在挂载的config目录里就行。程序每次轮询都会重新读取,加新创作者不用重启容器。

我本来的想法是全部用环境变量,连config.yaml都不要。查了源码发现creators列表只支持YAML读取,没有环境变量映射。想过用Post Arguments在启动时从环境变量动态生成config.yaml,但这样做容器入口点和Python环境绑得太死,镜像更新可能挂。最后老老实实挂了一个config目录,创作者列表本来也不常改,多这一个文件不算什么负担。

怎么确认它在工作

进UNRAID终端:

# 看实时日志
docker logs -f rplay-live-dl

# 看录制产出
ls -la /mnt/disk1/rplayvideo/archive/

正常跑起来的日志大致是这个画风——每次轮询会报当前状态,检测到直播就开始下载,结束时触发合并。

日志默认有轮转(5MB×5份+30天清理),不会把盘撑爆。

一些实际情况

这个项目目前挂的版本标签是v2.0.0-vibe,带了-vibe​后缀的版本是AI辅助开发的,作者自己在README里写了"Vibe Coding Notice"。用下来稳定性还行,至少我部署完几个小时内日志都正常。

还有一点:付费/私密直播会自动跳过(API返回403直接阻塞),这点挺合理,不会反复重试浪费流量。网络断了重连有3次指数退避重试,但长时间断网还是会丢那场直播。家庭宽带的稳定性下不是什么大问题。

总结

对于RPlay上的直播自动录制需求,rplay-live-dl是目前最轻量的方案。不需要装浏览器、不需要模拟操作、不需要处理任何验证码,直接调API+yt-dlp,干净利落。UNRAID上部署也就是填个Docker模板的事,5分钟搞定。

唯一的不足是没有Web管理界面,但一个自动录制工具其实也不需要——部署完忘了它,哪天想回看直接去archive目录翻就行了。