跳转到内容
TubePress — 免费、自托管 & 持续维护
媒体与转码

存储与媒体分发

本地存储、外部存储服务器(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。较低版本写入同一文件夹,因此单个目录即可满足视频的所有需求。有关这些版本的生成方式,请参阅转码

设置 CDN 时,本地为临时工作区。使用外部默认存储时,每个上传文件在本地处理后,一旦安全存储到后端即从应用服务器删除 — 本地 videos/ 目录只保存仍在上传或转码中的项目。

外部存储服务器

媒体存储系统允许您注册任意数量的后端。新视频始终存储到默认存储;当某个存储超过磁盘阈值时,TubePress 自动将新上传切换到下一个可用存储。现有视频从其写入位置继续提供服务,因为每个视频记录了自己的 storage_id

支持四种后端类型 — 仅此而已:

类型用途连接字段
本地单台服务器,或入门使用无 — 从 public/uploads 提供
FTP低成本存储 VPS 或种子箱主机、端口 (21)、用户名、密码、远程路径、SSL/TLS、被动模式
S3AWS S3、DigitalOcean Spaces、Backblaze、MinIO访问密钥、密钥、存储桶、区域、端点、前缀
WebDAVNextcloud 及其他 WebDAV 主机WebDAV URL、用户名、密码

每个远程存储还包含一些操作设置:

媒体 URL
访客加载文件的公共 HTTP 地址 — 非 FTP/S3 控制地址。
状态
活跃(接收新视频)、只读(仅提供现有文件)或已禁用(离线)。
最大磁盘使用量
50–99%(默认 90)。达到此值时,新上传自动切换到下一个存储。
安全 URL
使用过期令牌签署媒体链接 — 请参阅下方安全媒体传递

添加存储后端

  1. 打开存储编辑器。前往 /admin/settings?tab=storage,点击添加存储
  2. 选择类型并命名。选择本地、FTP、S3 或 WebDAV。表单将切换为仅显示该类型所需的字段。
  3. 输入媒体 URL 和凭据。设置公共媒体 URL,然后设置后端的主机/密钥/路径。编辑时将密码留空以保留已存储的密码。
  4. 设置操作选项。选择状态、最大磁盘使用阈值以及是否签署 URL。
  5. 测试并保存。保存时首先运行连接测试(如果提供了监控脚本还会进行脚本检查)。修复所有失败的检查,然后保存。可选择将其标记为默认存储,使新上传自动存入该位置。
媒体 URL 与控制地址的区别。媒体 URL 是浏览器获取文件的地址(例如 https://cdn.example.com)。它不是 FTP/S3 端点 — 将两者混淆是切换后播放中断最常见的原因。

存储监控器

对于远程后端,TubePress 可以使用您在存储服务器上安装的一个小型 PHP 脚本来跟踪磁盘空间和健康状态。在存储编辑器的磁盘监控面板中,点击下载监控脚本(从 /api/storage-monitor-download 提供),将其上传到远程服务器,然后将公共 URL 粘贴回监控脚本 URL字段。

连接后,编辑器将显示实时磁盘使用情况和上次检查时间,自动切换阈值使用这些读数来判断后端何时已满。脚本已设置密钥,因此只有您的 CMS 才能查询它。

值得在每台 CDN 服务器上执行。没有监控器,TubePress 无法读取远程磁盘使用情况,因此最大使用量自动切换只能对其可以测量的存储起作用。

安全媒体传递

当存储启用安全 URL 时,TubePress 不会直接提供文件路径。它会签署一个通过 /media/ 路由的短时有效链接:

/media/{token}/{expires}/{path}
token
路径和过期时间的 16 字符 HMAC-SHA256,使用该存储的私密密钥签署。
expires
Unix 时间戳;过期后链接返回 403。默认有效期为六小时。
path
正在请求的 uploads/videos/… 下的文件。

令牌在每次请求时都会在服务器端重新计算和验证。对于本地存储,TubePress 直接流式传输文件并支持 HTTP range(因此可以随机定位);对于远程存储,它验证令牌后向 CDN 上的文件发出 302 重定向。原始视频在 Web 服务器层面也受到速率限制:存储编辑器会生成可直接粘贴的 nginx 片段,在前几兆字节后限制流速,同时允许转码工作进程使用密钥以全速拉取。

令牌与路径、过期时间和密钥绑定。轮换存储的密钥将使所有现有链接失效,过期链接自动停止工作。将安全 URL 与速率限制片段配合使用,可形成有效的反爬虫屏障。请参阅安全

CDN & Cloudflare

TubePress 专为在 Cloudflare 后方运行而设计。有两点值得注意:

  • 分块上传绕过 100 MB 限制。转码结果通过 /api/transcode-upload-chunk 分块流式传输回 CMS,因此无论版本文件有多大,单个请求都保持在 Cloudflare 免费套餐 100 MB 上限以内。
  • 长缓存、缓存破坏资源。静态资源以长期不可变缓存头提供,并在每次发布时通过版本查询参数破坏缓存,使代理可以积极缓存而不会提供过时文件。

每个存储对应的 nginx 片段为视频添加合理的 expires 标头,以及用于安全本地传递的可选 /media/ 内部位置,您可以直接将其加入站点配置。

后续步骤

还有疑问?

从您的控制面板提交工单,我们的团队将为您提供帮助。

体验在线演示 → 下载 TubePress →