一个高性能的多媒体代理转发服务,基于Go语言开发,支持多线程并发下载和流式传输。
- 🚀 高性能并发下载: 支持多线程分片下载,显著提升下载速度
- 🔄 流式传输: 实时转发数据流,无需等待完整下载
- 🛡️ 防SNI阻断: 支持Base64编码URL和Header,绕过网络限制
- 📦 智能缓存: 内置4小时缓存机制,减少重复请求
- 🌐 自定义DNS: 支持指定DNS服务器,提升解析速度
- 📱 Web界面: 提供简洁的404页面和状态展示
- 🔧 灵活配置: 支持动态调整线程数、分片大小等参数
- 🔐 安全认证: 支持自定义认证密钥,保护API访问安全
# 使用默认配置运行
./mediaProxy
# 使用自定义端口和认证密钥
./mediaProxy -port 57574 -auth "mySecretKey"
# 开启调试模式
./mediaProxy -debug -auth "mySecretKey"# GET请求示例(使用默认auth参数)
curl "http://localhost:57574/?url=https://example.com/video.mp4&auth=drpys"
# GET请求示例(使用自定义auth参数)
curl "http://localhost:57574/?url=https://example.com/video.mp4&auth=mySecretKey"
# POST请求示例
curl -X POST "http://localhost:57574/" \
-d "url=https://example.com/video.mp4&thread=4&form=base64&auth=drpys"| 参数 | 描述 | 默认值 | 示例 |
|---|---|---|---|
| debug | 进入调试模式 | false | -debug |
| port | 指定程序端口 | 57574 | -port 57574 |
| dns | 指定DNS服务器 | 8.8.8.8 | -dns 127.0.0.1:5335 |
| auth | 认证密钥,用于API访问验证 | drpys | -auth "mykey123" |
# Linux/macOS
chmod +x build.sh
./build.sh --all # 构建所有平台
./build.sh --platform linux/amd64 # 构建指定平台
# Windows
build.bat # 构建所有平台
build.bat -p windows/amd64 # 构建指定平台make build # 构建当前平台
make build-all # 构建所有平台
make quickstart # 快速开始
make help # 查看所有命令# 克隆项目
git clone <repository-url>
cd mediaProxy
# 安装依赖
go mod tidy
# 编译(体积优化)
go build -ldflags="-s -w" -trimpath -o mediaProxy
# 运行
./mediaProxy从 Releases 页面下载对应平台的二进制文件。
# 使用docker-compose(推荐)
docker-compose up -d
# 或直接使用Docker
docker build -t mediaproxy .
docker run -p 57574:57574 mediaproxy# 代理下载一个视频文件(使用默认auth)
curl "http://localhost:57574/?url=https://example.com/video.mp4&auth=drpys" -o video.mp4
# 使用自定义auth参数
curl "http://localhost:57574/?url=https://example.com/video.mp4&auth=mySecretKey" -o video.mp4# 使用8个线程并发下载
curl "http://localhost:57574/?url=https://example.com/largefile.zip&thread=8&auth=drpys"# 添加认证Header
curl "http://localhost:57574/" \
-d 'url=https://api.example.com/file.mp4' \
-d 'headers={"Authorization":"Bearer token123","User-Agent":"CustomAgent"}' \
-d 'auth=drpys'# 对URL和Header进行Base64编码
URL_B64=$(echo -n "https://blocked-site.com/video.mp4" | base64)
HEADER_B64=$(echo -n '{"Referer":"https://example.com"}' | base64)
curl "http://localhost:57574/?form=base64&url=$URL_B64&headers=$HEADER_B64&auth=drpys"# 设置每个分片为256KB
curl "http://localhost:57574/?url=https://example.com/file.zip&size=256K&auth=drpys"mediaProxy/
├── proxy.go # 主程序入口和核心代理逻辑
├── base/ # 基础组件包
│ ├── client.go # HTTP客户端配置和初始化
│ └── emitter.go # 数据流发射器,用于流式传输
├── static/ # 静态资源
│ └── index.html # Web界面(404页面)
├── go.mod # Go模块依赖
└── README.md # 项目文档
- ProxyDownloadStruct: 并发下载管理器,负责分片下载和数据合并
- Chunk: 数据分片结构,管理下载的数据块
- Emitter: 流式数据发射器,实现实时数据传输
- Client: HTTP客户端封装,支持自定义DNS和代理配置
- 并发下载: 自动根据文件大小调整线程数和分片大小
- 内存管理: 使用缓冲池减少内存分配开销
- 连接复用: 复用HTTP连接减少握手时间
- 智能缓存: 缓存热点资源,避免重复下载
- 合法使用: 请确保遵守相关法律法规和网站服务条款
- 资源限制: 高并发可能对目标服务器造成压力,请合理设置线程数
- 网络环境: 某些网络环境可能需要配置代理或自定义DNS
- 文件大小: 超大文件下载建议适当增加缓存时间和分片大小
- 安全认证: 建议在生产环境中使用强密码作为auth参数,避免使用默认值
欢迎提交Issue和Pull Request来改进项目。
本项目基于开源许可证发布,具体请查看LICENSE文件。
感谢Panda Groove大佬的原始代码贡献。
headers和url可进行base64编码,以避免sni阻断
| 参数 | 类型 | 描述 | 默认 |
|---|---|---|---|
| size | 可选 | 单线程下载数据大小,可动态调节 | 128K,线程数小于4时,为 2048/线程数 K |
| thread | 可选 | 并发线程数 | 动态调节 |
| form | 可选 | URL与headers编码方式,可指定为base64,防止某些SNI阻断,默认urlcode编码 |
urlcode |
| headers | 可选 | POST或GET所用的headers,采用JSON格式 | {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"} |
| url | 必要 | POST或GET的目标地址 | 无 |
| auth | 必要 | API访问认证密钥,必须与服务器启动时设置的auth参数一致 | drpys |