一个基于 Cloudflare Workers 的媒体代理服务,专门用于代理小红书和抖音视频,支持流式传输和范围请求。
- 多平台支持: 支持小红书和抖音视频代理
- 流式传输: 支持大文件的流式传输,无需完整下载
- 范围请求: 支持 HTTP Range 请求,实现视频拖拽播放
- 智能重试: 支持备用URL自动切换
- CORS支持: 完整的跨域资源共享支持
- 缓存优化: 智能缓存策略,提升访问速度
- 错误处理: 完善的错误处理和用户友好的错误页面
- 运行时: Cloudflare Workers
- 语言: TypeScript
- 构建工具: Wrangler
- 部署: Cloudflare Edge Network
- Node.js 16+
- npm 或 yarn
- Cloudflare 账户
- 克隆项目
git clone https://github.com/blurmood/media-proxy-worker.git
cd media-proxy-worker
- 安装依赖
npm install
- 启动开发服务器
npm run dev
- 配置 Wrangler
npx wrangler login
- 部署到 Cloudflare Workers
npm run deploy
GET /proxy/v1/{base64_metadata}[.mp4]
其中 base64_metadata
是经过 Base64 编码的 JSON 元数据,包含以下字段:
interface ProxyMetadata {
original: string; // 原始视频URL
filename: string; // 文件名
timestamp: number; // 时间戳
source: 'xiaohongshu' | 'douyin'; // 来源平台
backupUrls?: string[]; // 备用URL列表(可选)
signature?: string; // 签名(可选)
}
GET /health
- 准备元数据
const metadata = {
original: "https://example.com/video.mp4",
filename: "sample_video.mp4",
timestamp: Date.now(),
source: "xiaohongshu",
backupUrls: ["https://backup1.com/video.mp4", "https://backup2.com/video.mp4"]
};
- 编码元数据
const encodedMetadata = btoa(JSON.stringify(metadata));
- 构建代理URL
const proxyUrl = `https://your-worker.your-subdomain.workers.dev/proxy/v1/${encodedMetadata}.mp4`;
项目支持不同平台的特定配置:
- 小红书: 不支持范围请求,使用特定的请求头
- 抖音: 支持范围请求,包含URL转换逻辑
- 小红书视频: 2小时缓存
- 抖音视频: 1小时缓存
media-proxy-worker/
├── src/
│ └── index.ts # 主要逻辑
├── package.json # 项目配置
├── wrangler.toml # Wrangler配置
├── tsconfig.json # TypeScript配置
└── README.md # 项目文档
npm run dev
- 启动开发服务器npm run deploy
- 部署到生产环境npm run deploy:prod
- 部署到生产环境(带环境标识)npm run tail
- 查看实时日志npm run build
- 构建检查(dry run)
- 合规使用: 请确保遵守相关平台的服务条款和版权规定
- 流量限制: Cloudflare Workers 有请求频率和带宽限制
- 缓存策略: 根据实际需求调整缓存时间
- 错误处理: 建议在客户端实现重试机制
MIT License
欢迎提交 Issue 和 Pull Request!
如有问题,请通过以下方式联系:
- 提交 GitHub Issue
- 发送邮件至项目维护者
注意: 本项目仅供学习和研究使用,请遵守相关法律法规和平台服务条款。