存储与媒体分发
本地存储、外部存储服务器(S3、FTP、WebDAV)以及安全媒体代理。
TubePress 将每个上传的视频、其转码版本及预览资源保存在磁盘上,并可透明地将它们转移到一个或多个外部存储服务器。本页说明文件的存储位置、媒体存储系统如何在各后端之间分配文件,以及媒体如何在不暴露原始文件的情况下传递给观看者。
存储在 /admin/settings?tab=storage 下进行配置。您可以完全使用本地磁盘运行,或添加 FTP、S3 兼容和 WebDAV 后端,让 TubePress 依次填充它们。
TubePress 如何存储媒体
上传文件存储在 public/uploads/ 下。每个视频都有自己的文件夹 — 即视频的 video_folder — 其中包含原始源文件、转码器生成的每个版本以及播放器所需的小型资源:
public/uploads/
videos/
a1b2c3d4.../ one folder per video (video_folder)
video.mp4 original upload (source)
video_1080p.mp4 processed source rendition
video_720p.mp4 transcoded rendition
video_480p.mp4 transcoded rendition
timeline.vtt scrub-preview sprite map
preview.mp4 hover-preview clip
thumbnails/ poster images
watermark/ watermark PNG
intros/ pre-roll / post-roll clips
branding/ logo, favicon, background转码器通过扫描最高的 video_<height>p.mp4 文件来发现源文件,回退到原始 video.mp4、.webm 或 .ogg。较低版本写入同一文件夹,因此单个目录即可满足视频的所有需求。有关这些版本的生成方式,请参阅转码。
videos/ 目录只保存仍在上传或转码中的项目。外部存储服务器
媒体存储系统允许您注册任意数量的后端。新视频始终存储到默认存储;当某个存储超过磁盘阈值时,TubePress 自动将新上传切换到下一个可用存储。现有视频从其写入位置继续提供服务,因为每个视频记录了自己的 storage_id。
支持四种后端类型 — 仅此而已:
| 类型 | 用途 | 连接字段 |
|---|---|---|
| 本地 | 单台服务器,或入门使用 | 无 — 从 public/uploads 提供 |
| FTP | 低成本存储 VPS 或种子箱 | 主机、端口 (21)、用户名、密码、远程路径、SSL/TLS、被动模式 |
| S3 | AWS S3、DigitalOcean Spaces、Backblaze、MinIO | 访问密钥、密钥、存储桶、区域、端点、前缀 |
| WebDAV | Nextcloud 及其他 WebDAV 主机 | WebDAV URL、用户名、密码 |
每个远程存储还包含一些操作设置:
添加存储后端
- 打开存储编辑器。前往
/admin/settings?tab=storage,点击添加存储。 - 选择类型并命名。选择本地、FTP、S3 或 WebDAV。表单将切换为仅显示该类型所需的字段。
- 输入媒体 URL 和凭据。设置公共媒体 URL,然后设置后端的主机/密钥/路径。编辑时将密码留空以保留已存储的密码。
- 设置操作选项。选择状态、最大磁盘使用阈值以及是否签署 URL。
- 测试并保存。保存时首先运行连接测试(如果提供了监控脚本还会进行脚本检查)。修复所有失败的检查,然后保存。可选择将其标记为默认存储,使新上传自动存入该位置。
https://cdn.example.com)。它不是 FTP/S3 端点 — 将两者混淆是切换后播放中断最常见的原因。存储监控器
对于远程后端,TubePress 可以使用您在存储服务器上安装的一个小型 PHP 脚本来跟踪磁盘空间和健康状态。在存储编辑器的磁盘监控面板中,点击下载监控脚本(从 /api/storage-monitor-download 提供),将其上传到远程服务器,然后将公共 URL 粘贴回监控脚本 URL字段。
连接后,编辑器将显示实时磁盘使用情况和上次检查时间,自动切换阈值使用这些读数来判断后端何时已满。脚本已设置密钥,因此只有您的 CMS 才能查询它。
安全媒体传递
当存储启用安全 URL 时,TubePress 不会直接提供文件路径。它会签署一个通过 /media/ 路由的短时有效链接:
/media/{token}/{expires}/{path}403。默认有效期为六小时。uploads/videos/… 下的文件。令牌在每次请求时都会在服务器端重新计算和验证。对于本地存储,TubePress 直接流式传输文件并支持 HTTP range(因此可以随机定位);对于远程存储,它验证令牌后向 CDN 上的文件发出 302 重定向。原始视频在 Web 服务器层面也受到速率限制:存储编辑器会生成可直接粘贴的 nginx 片段,在前几兆字节后限制流速,同时允许转码工作进程使用密钥以全速拉取。
CDN & Cloudflare
TubePress 专为在 Cloudflare 后方运行而设计。有两点值得注意:
- 分块上传绕过 100 MB 限制。转码结果通过
/api/transcode-upload-chunk分块流式传输回 CMS,因此无论版本文件有多大,单个请求都保持在 Cloudflare 免费套餐 100 MB 上限以内。 - 长缓存、缓存破坏资源。静态资源以长期不可变缓存头提供,并在每次发布时通过版本查询参数破坏缓存,使代理可以积极缓存而不会提供过时文件。
每个存储对应的 nginx 片段为视频添加合理的 expires 标头,以及用于安全本地传递的可选 /media/ 内部位置,您可以直接将其加入站点配置。