Skip to content

媒体管理 ​

媒体管理把散落在多个存储节点、多个网盘挂载源上的目录聚合成统一的媒体库,面向需要集中维护片源、元数据与可见范围的管理员。

媒体管理页面:左侧媒体库侧边栏混排真实库与带「虚」角标的虚拟库,右侧是选中库的「来源目录」页签,每张来源卡片带访问范围一行、增量同步 / 全量 / 强制三个按钮与数据体检入口
媒体管理:左侧侧边栏混排真实库与虚拟库(带「虚」角标的是虚拟库),右侧「来源目录」页签上每张来源卡片都有「访问范围」一行、「增量同步 / 全量 / 强制」三个同步按钮,以及孤儿资源、类型异常、残留来源清理三项体检入口。

能做什么 ​

  • 一个库挂多个来源目录,跨节点、跨网盘聚合成同一个条目。
  • 三档手动同步,全量与强制先跑预览再落库。
  • 作品 / 季 / 集三级元数据覆盖,覆盖值优先于刮削结果。
  • 每个来源三项数据体检:孤儿资源、类型异常、残留来源。
  • 按挂载源设置访问范围,控制哪些用户看得到、播得了。

界面与操作 ​

库与来源目录 ​

中央媒体库不扫描磁盘,只聚合文件管理里已经整理好的来源目录:刮削在存储节点侧完成,媒体侧负责同步与聚合。

项说明
媒体类型只有三档:不限 / 电影 / 剧集。没有动漫、音乐、照片这类独立库类型
新建表单字段名称、类型、封面图 URL(选填,支持本地上传)、启用开关、来源目录数组
来源目录三要素文件节点(取在线或待注册的存储节点)、挂载源、目录路径(目录选择器逐级浏览)
来源的其他字段排序、同步模式、是否启用同步
库卡片显示标题数、来源数、上次同步时间、启用/停用开关、影/剧角标
封面缺省回退到该库首个媒体项的海报
侧边栏排序真实库与虚拟库可混合拖拽排序

条目列表 ​

「媒体项」页签只做浏览与检索,能力边界很明确:

有没有
关键词搜索排序控件
分页,每页 24 / 48 / 60 / 96 / 120,默认 60类型筛选器
网格 / 列表双视图、总数显示、刷新批量选择与批量操作
卡片显示 2:3 海报、影/剧角标、年份、同步时间评分、演员表

列表视图额外显示原始标题与挂载源名。条目数据结构里没有评分字段;后端库里有演职员数据,但后台 UI 不呈现。

条目详情 ​

区域内容
作品信息页签海报、标题、原始标题、类型标签、年份、时长、简介、TMDB 外链、逐字段的「覆盖」徽标
季与剧集页签(仅剧集)集列表按季号 + 集号分组去重;同一集有多个文件时标「N 个版本」,并列出版本的文件名、容器与大小
文件来源抽屉每个文件来源的挂载源 / 节点 / 库路径 / 父目录 / 文件名 / 大小 / 容器格式 / 同步时间;支持来源内搜索,也可删除单个文件来源(删除后重建聚合)
操作设置 / 修改 / 删除覆盖;重新刮削并修复同步(增量刮削 / 覆盖刮削,返回提交、跳过与失败的数量与任务号);从媒体库删除此项

三级元数据覆盖 ​

覆盖是人工改写刮削结果。优先级只有一条:覆盖值 > 原始刮削值,留空的字段不覆盖。

作用域可覆盖字段
作品标题、原始标题、上映/首播日期、时长(仅电影)、简介、类型标签、封面、扩展属性 JSON
季(需指定季号)季标题、季封面
集(需指定季号与集号)集标题、集封面(缩略图)、集简介
细节说明
类型标签预设18 个:动作 / 喜剧 / 剧情 / 爱情 / 科幻 / 动画 / 悬疑 / 惊悚 / 恐怖 / 犯罪 / 纪录片 / 历史 / 传记 / 音乐 / 奇幻 / 冒险 / 家庭 / 战争
扩展属性 JSON收在「高级设置」折叠区里
封面字段URL 输入 + 本地文件上传 + 实时缩略预览
封面地址形态兼容 http(s) 绝对地址、站内路径与 TMDB 相对路径(以 / 开头时自动拼成 TMDB 图片地址)

同步与预览 ​

三档手动同步的按钮就在每张来源卡片上。自动链路有两条:「中央媒体库同步」每 300 秒增量同步已启用的库;「同步队列处理」每 30 秒消费存储节点推来的变更队列。

模式行为用户编辑是否先预览
增量同步按游标只处理新增变更保留直接执行
全量同步全量比对,并删除存储侧已不存在的差集保留先预览
强制全量覆盖清空该来源数据后重插清除先预览

预览会算清:将新增与将更新的同步项、将删除的同步项与将消失的聚合项、以及因其他来源仍存在而保留下来的聚合项,另有预览告警。删除清单逐条列出,并标出该项是否含用户编辑、涉及哪些字段、是否只剩这一个来源;含用户编辑的项会显示「含用户编辑: 字段名」,可以逐条勾选「保留」。

执行同步另起一个后台任务,关闭弹窗不中断它,刷新页面后会恢复进度轮询。预览超时 10 分钟,同步超时 60 分钟。

数据体检 ​

每个来源有三项体检,换节点、换网盘之后特别有用:

体检项检测什么处理动作
孤儿资源媒体侧有记录但存储侧已无对应数据的同步项手动比对 → 计数 → 删除,连带清理明细、流、演职员、同步项与无引用聚合项
类型异常条目媒体类型与库设定类型不一致检测 → 修复,触发一次全量同步
残留来源已不属于任何来源配置的历史同步数据检测 → 清理,适合处理重新接入存储节点后留下的旧节点数据

媒体源访问控制 ​

访问控制挂在来源目录上,粒度是「存储节点 + 挂载源」。

维度说明
授权对象同一个「存储节点 + 挂载源」被多个媒体库引用时,一次配置作用于该挂载源下的全部目录
不是授权对象挂载源类型、库路径、单文件 / TMDB 条目 / 季 / 集
同名编码不同节点上的同名挂载编码是两个独立授权对象
公开任意有效用户可见可播
受限仅显式授权的用户可见可播
查不到策略记录按受限处理(fail-closed)
初始化升级时已被引用的来源批量设为公开,避免突然断播;新接入的默认受限
配置入口(来源侧)媒体管理 → 媒体库 → 来源目录页签 → 每张来源卡片的「访问范围」行,一键在「公开 · 点击设为受限 / 受限 · 点击设为公开」之间切换,并显示「N 人获授权」
配置入口(用户侧)用户管理 → 用户详情「媒体来源 (N)」页签,只列受限来源供勾选;用户列表的批量「来源授权」只对受限挂载源执行授权或撤销,不影响公开来源
软过滤(媒体查询层)媒体库、搜索、最新、继续观看、详情、版本、季 / 集 / NextUp / Upcoming、Similar、图片、字幕、虚拟库
硬拦截(播放节点输出层)视频、下载、字幕在输出任何字节前校验实际来源为公开,或该用户已获授权
聚合语义聚合项只要有一个可访问来源就显示,但只展示、只播放可访问版本;全部来源受限时整项隐藏
剧集判定按每一集各自判定,一部剧所有集都不可访问时整部剧不显示
拒绝响应用户态统一表现为不存在(404 或从集合省略),不泄露受限内容存在性
撤权边界保存后清理媒体侧与各播放节点的权限缓存,新建播放信息、视频、下载与后续 Range 请求立即拒绝;已开始传输的同一条 HTTP 响应不强制中断
管理员语义管理接口始终可查看与配置来源,但管理员走用户态播放器时不自动绕过来源权限

生产启用前先在测试环境跑通

媒体源访问控制已实现,但自动化测试、压测与端到端验证尚未完成,生产启用前建议先在测试环境验证一遍。

关键规则 ​

情况结果
想清空一个库的全部来源不允许,至少保留一个来源;要清空须删除整库
更改已同步来源的目录二次确认「原有同步数据将被清除」
节点失联来源卡片提供「恢复节点」
删掉条目最后一个文件来源条目消失
跑强制全量覆盖清除用户编辑;增量与全量保留
库级的描述、匹配模式、刮削模式、元数据来源与 ffmpeg 开关都没有 UI 可改
刮削发生在哪存储节点侧:刮削队列每 15 秒、文件变更增量刮削每 15 秒、剧集简介剧照补全每天 04:30(Asia/Shanghai)、媒体探测信息回填每 3600 秒(默认停用,需在调度中心手动启用);媒体侧只聚合。详见刮削与元数据
条目的容器格式与文件大小由播放节点内嵌 ffprobe 在播放时异步补全,不阻塞播放,也不替代存储侧的 TMDB / NFO 刮削

相关文档 ​

自托管媒体管理系统(单机版 / 分布式版) · 想先体验或有问题,加 Telegram 群:t.me/yiyi_media_group