简介
基于 CloudFlare R2 对象存储在 WordPress 中实现视频文件的管理和播放。
Cloudflare R2 是 CloudFlare 推出的对象存储服务,兼容 AWS S3 API,最大卖点是零出口流量费用。Mine CloudVod 集成了 R2 存储,让你可以将视频文件存储在 R2 中,在 WordPress 中直接浏览、上传、管理和播放 R2 中的视频文件。
优点
- 零出口流量费:不存在流量费用,与大多数云存储(AWS S3、阿里云 OSS 等)形成鲜明对比
- S3 兼容 API:兼容 AWS S3 生态,可使用各类 S3 工具管理文件
- 全球 CDN:基于 CloudFlare 全球网络分发
- 免费额度:每月 10GB 存储免费,小规模使用几乎零成本
- 客户端直传:支持从浏览器直接上传到 R2,不经过 WordPress 服务器中转
缺点
- R2 不提供视频转码服务,上传的视频必须使用浏览器兼容的格式(如 MP4/H.264)
- 国内访问速度可能受限,建议绑定自定义域名
- 管理操作在境内可能较慢
准备工作
- 注册 CloudFlare 账号
- 在 CloudFlare 后台创建 R2 存储桶:
- 进入 CloudFlare Dashboard → R2 → 创建存储桶
- 给存储桶命名(如
my-videos),选择区域后创建
后台设置
第一步:获取 API Token
⚠️ 重要:R2 REST API 仅支持 API Token(Bearer Token)认证,不支持 Global API Key + Email 方式。如果你用 Global API Key,R2 功能将无法使用。
- 进入 CloudFlare 后台 → 右上角头像 → 我的个人资料 → API 令牌
- 点击「创建令牌」→ 选择「创建自定义令牌」
- 权限配置:
- 权限:
Cloudflare R2 — Edit - 资源:
包括 — 特定账户 — 你的账户
- 权限:
- 创建后复制生成的 Token
- 获取你的 Account ID(在控制台首页右侧可见)
第二步:填写 AccessKey 设置
进入 WordPress 后台 → Mine云点播 → 设置 → CloudFlare → AccessKey 设置:
| 字段 | 说明 |
|---|---|
| Account ID | 你的 CloudFlare 账户 ID(必填) |
| API Token | 上一步创建的 API Token(必填,R2 必须用此项认证) |
💡 R2 不需要填 Email 和 API Key 字段。API Token 填写后,Email 和 API Key 可以留空。
第三步:R2 存储设置
切换到 CloudFlare → R2 标签:
- 点击页面上的「Sync Buckets List」链接,同步你的 R2 存储桶列表
- 同步完成后,在 Bucket 下拉框中选择你要使用的存储桶
- (可选)如果需要客户端直传功能,填写:
- R2 Access Key ID:通过 CloudFlare 后台创建的 R2 API Token 对应的 Access Key ID
- R2 Secret Access Key:对应的 Secret Access Key
💡 Access Key ID 和 Secret Access Key 用于浏览器直传到 R2 的功能。如不需要直传(使用 WordPress 服务器中转上传),可以留空。
填写后点击 保存。
使用方法
区块编辑器
R2 和 CloudFlare Stream 共用同一个区块「CloudFlare」:
- 在文章编辑页面,插入「CloudFlare」区块
- 区块显示两个按钮:
- 添加/选择 Stream — CloudFlare Stream 视频
- 添加/选择 R2 — R2 存储的视频
- 点击「添加/选择 R2」,弹出 R2 视频管理窗口:
- 在 R2 视频管理窗口中可以:
- 📂 选择 Bucket:顶部下拉框可以切换不同的存储桶
- 📋 浏览文件列表:显示 Bucket 中的视频文件(自动过滤非视频文件)
- 🔍 搜索文件:通过文件名关键字搜索
- 📤 上传文件:拖拽或选择本地视频文件上传
- 🗑️ 删除文件:选中文件后可查看详情并删除
- 选择视频后,视频将插入文章中。
上传方式说明
R2 支持两种上传方式:
- 客户端直传(推荐):
- 文件从浏览器直接上传到 R2,不经过 WordPress 服务器
- 速度快,不占用服务器带宽
- 需要在 R2 设置中填写 Access Key ID 和 Secret Access Key
- 使用 AWS S3 预签名 URL 协议,安全可靠
- 服务端代理上传:
- 文件先上传到 WordPress 服务器,再由服务器转发到 R2
- 不需要额外配置 Access Key ID
- 受限于服务器上传限制和带宽
播放 URL 策略
插件获取 R2 视频播放地址时,按以下优先级自动选择:
| 优先级 | 方式 | 说明 |
|---|---|---|
| 1️⃣ | 自定义域名 | 如果为 R2 存储桶绑定了自定义域名,优先使用(国内访问推荐) |
| 2️⃣ | r2.dev 托管域名 | CloudFlare 提供的免费 *.r2.dev 域名 |
| 3️⃣ | API 代理 | 通过 API 获取临时下载链接(有有效期限制) |
💡 域名解析结果会被缓存 1 小时,确保页面加载速度。
播放器设置
与 CloudFlare Stream 相同的播放器设置:
| 设置项 | 说明 |
|---|---|
| 视频标记 | 在视频时间轴上添加标记点 |
| 价格 | 设置付费观看价格和预览时长 |
| 仅登录可看 | 开启后,只有已登录用户才能观看 |
| 自动播放 | 页面加载后自动开始播放 |
| 宽度 / 高度 | 播放器尺寸,默认 100% / auto |
| 封面图 | 自定义视频封面 |
注意事项
视频格式
R2 只负责存储和分发文件,不提供转码服务。因此上传的视频必须确保:
- 浏览器可以直接播放(推荐 MP4/H.264 编码)
- 建议使用
ffmpeg或类似工具预先转码为 Web 兼容格式 - 如果需要自适应码率,建议配合 CloudFlare Stream 使用
R2 vs Stream 对比
| 对比维度 | CloudFlare R2 | CloudFlare Stream |
|---|---|---|
| 用途 | 对象存储(通用文件) | 视频托管(专用视频平台) |
| 转码 | ❌ 不提供 | ✅ 自动转码多码率 |
| 出口流量费 | ✅ 免费 | 按观看时长收费 |
| 存储费 | $0.015/GB/月 | $5/1000分钟/月 |
| 适用场景 | 已有转码好的 MP4 视频,想低成本分发 | 需要自动转码和自适应码率的场景 |
绑定自定义域名(推荐)
为 R2 存储桶绑定自定义域名,可以显著改善国内访问体验:
- 在 CloudFlare DNS 中添加你的域名
- 在 R2 设置中为存储桶添加自定义域名
- 域名需要 NS 托管在 CloudFlare(自动配置 SSL)
常见问题
同步存储桶列表失败?
请检查:
- API Token 是否有
Cloudflare R2 — Edit权限 - 确认使用的是 API Token 而不是 Global API Key(R2 不支持 Global Key)
- Account ID 是否正确
视频上传后无法播放?
可能原因:
- 视频格式不兼容:R2 不提供转码,需确保视频是浏览器可直接播放的格式
- 如果文件为 0 字节,可能是上传过程中断了——重新上传试试
- 自定义域名未正确配置 SSL 证书
客户端直传报错?
- 确认 Access Key ID 和 Secret Access Key 填写正确
- R2 存储桶需要配置 CORS(跨域访问),插件会自动配置
- 检查存储桶名是否正确同步
如何配合 Stream 使用?
R2 可以作为 CloudFlare Stream 的视频源存储。但 Mine CloudVod 插件中 R2 和 Stream 是两个独立功能:
- R2 区块:直接播放 R2 中的 MP4 视频文件
- Stream 区块:使用 CloudFlare Stream 转码后的视频
你可以在同一篇文章中同时使用两者。