Skip to content

KTVHTTPCache的 Rust 版本,A powerful media cache framework.

License

Notifications You must be signed in to change notification settings

chinaxxren/video-proxy-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

视频代理缓存服务器

一个高性能的视频代理缓存服务器,使用 Rust 实现。专门针对视频流进行优化,支持智能缓存、范围请求处理和高效的数据传输。本项目采用异步 I/O 和流式处理,具有低内存占用和高性能的特点。

功能特性

核心功能

  • HTTP/HTTPS 视频流代理
    • 支持标准的 HTTP Range 请求
    • 自动处理 Content-Range 响应
    • 支持大文件传输(4GB+)

缓存系统

  • 智能范围请求处理
    • 自动分片存储
    • MD5 文件名哈希
    • 支持断点续传
  • 高效的本地缓存管理
    • 基于文件系统的持久化存储
    • 自动创建缓存目录结构
    • 缓存验证和一致性检查

数据处理

  • 混合源数据处理
    • 同时支持缓存和网络数据
    • 智能合并多个数据源
    • 自动选择最优数据源
  • 流式数据处理
    • 零拷贝数据传输
    • 内存使用优化
    • 支持大文件流式处理

可靠性

  • 自动重试机制
    • 网络请求自动重试
    • 可配置重试次数和间隔
    • 错误恢复机制
  • 错误处理
    • 详细的错误类型
    • 完整的错误追踪
    • 友好的错误提示

性能优化

  • 高性能数据传输
    • 异步 I/O 操作
    • 流式处理
    • 内存池优化
  • 网络优化
    • 连接池管理
    • Keep-alive 支持
    • 超时控制

监控和日志

  • 详细的日志记录
    • 请求追踪
    • 性能统计
    • 错误诊断
  • 状态监控
    • 缓存使用情况
    • 网络状态
    • 系统资源使用

系统要求

运行环境

  • Rust 1.70.0 或更高版本
  • Cargo 包管理器
  • 支持 async/await 的操作系统(Linux/macOS/Windows)

硬件建议

  • CPU: 双核及以上
  • 内存: 2GB 及以上
  • 磁盘空间: 根据缓存需求调整

安装指南

从源码安装

  1. 克隆仓库:
git clone https://github.com/yourusername/proxy-server.git
cd proxy-server
  1. 编译项目:
# 开发版本
cargo build

# 发布版本(推荐)
cargo build --release

依赖安装

确保系统已安装以下依赖:

[dependencies]
tokio = { version = "1.0", features = ["full"] }
hyper = { version = "0.14", features = ["full"] }
futures = "0.3"
bytes = "1.0"

使用指南

快速开始

  1. 运行示例程序:
# 运行视频请求示例
cargo run --example video_request

# 运行性能测试
cargo run --example benchmark
  1. 在项目中使用:
use proxy_server::{DataSourceManager, server};

#[tokio::main]
async fn main() {
    // 初始化数据源管理器
    let manager = DataSourceManager::new("./cache");
    
    // 启动代理服务器
    server::run(manager).await;
}

API 使用示例

  1. 基本代理请求:
// 创建代理请求
let url = "https://example.com/video.mp4";
let range = "bytes=0-1024";

// 发送请求
let response = client
    .get(&format!("http://localhost:8080/proxy/{}", url))
    .header("Range", range)
    .send()
    .await?;
  1. 缓存管理:
// 检查缓存状态
let cache_status = manager.check_cache("video_key").await?;

// 清理缓存
manager.clear_cache().await?;

配置详解

基本配置

  • 缓存目录:默认为 "./cache"
    • 支持自定义路径
    • 自动创建目录结构
  • 服务器端口:默认为 8080
    • 可通过环境变量配置
    • 支持自定义端口

网络配置

  • 网络超时:30秒
    • 可配置连接超时
    • 可配置读写超时
  • 重试次数:3次
    • 可配置最大重试次数
    • 可配置重试间隔

缓存配置

  • 最小缓存大小:8KB
    • 可配置最小缓存块大小
    • 支持自动合并小块
  • 缓存策略:
    • LRU 缓存清理
    • 过期时间设置
    • 容量限制设置

项目结构

src/
├── data_source/       # 数据源处理
│   ├── mod.rs        # 模块定义
│   ├── net_source.rs # 网络数据源
│   └── file_source.rs# 文件数据源
├── handlers/          # 请求处理器
│   ├── mod.rs        # 模块定义
│   ├── cache.rs      # 缓存处理
│   ├── network.rs    # 网络处理
│   └── mixed_source.rs# 混合源处理
├── storage/          # 存储管理
│   ├── mod.rs        # 模块定义
│   ├── disk.rs       # 磁盘存储
│   └── manager.rs    # 存储管理器
├── utils/            # 工具函数
│   ├── mod.rs        # 模块定义
│   ├── error.rs      # 错误处理
│   └── range.rs      # 范围处理
└── lib.rs            # 库入口

核心组件详解

1. 数据源管理器 (DataSourceManager)

  • 功能:
    • 统一管理网络和本地缓存数据源
    • 智能选择最优数据源
    • 自动切换数据源
  • 实现细节:
    • 异步处理
    • 状态管理
    • 错误处理

2. 缓存处理器 (CacheHandler)

  • 功能:
    • 高效的本地缓存读写
    • 数据块管理
    • 缓存验证
  • 实现细节:
    • 文件系统操作
    • 并发控制
    • 数据一致性

3. 网络处理器 (NetworkHandler)

  • 功能:
    • HTTP/HTTPS 请求处理
    • 自动重试机制
    • 连接池管理
  • 实现细节:
    • 异步 HTTP 客户端
    • 超时控制
    • 错误恢复

4. 混合源处理器 (MixedSourceHandler)

  • 功能:
    • 智能合并多个数据源
    • 优化的数据流处理
    • 自动切换策略
  • 实现细节:
    • 流控制
    • 数据同步
    • 性能优化

性能指标

传输性能

  • 支持大文件传输(已测试 4GB+ 视频文件)
  • 单连接吞吐量:100MB/s+
  • 并发连接数:1000+

资源占用

  • 内存使用:低至 50MB(基础运行)
  • CPU 使用:单核心 20% 以下
  • 磁盘 I/O:优化的写入策略

响应时间

  • 缓存命中:< 10ms
  • 网络请求:取决于源站
  • 混合模式:平均 < 100ms

开发计划

近期计划

  • 添加 HTTPS 支持
  • 实现分布式缓存
  • 添加监控面板

中期计划

  • 优化缓存策略
  • 支持更多视频格式
  • 添加压缩支持

长期计划

  • 集群支持
  • 智能预加载
  • CDN 集成

故障排除

常见问题

  1. 缓存无法写入

    • 检查目录权限
    • 确认磁盘空间
    • 查看错误日志
  2. 网络请求失败

    • 检查网络连接
    • 确认防火墙设置
    • 查看超时配置

日志说明

  • INFO 级别:正常操作日志
  • WARN 级别:警告信息
  • ERROR 级别:错误信息

贡献指南

提交代码

  1. Fork 项目
  2. 创建特性分支
  3. 提交变更
  4. 发起 Pull Request

报告问题

  • 使用 Issue 模板
  • 提供详细信息
  • 附加错误日志

许可证

MIT License

作者

[作者名称]

联系方式

  • Email: [邮箱地址]
  • GitHub: [GitHub 主页]

About

KTVHTTPCache的 Rust 版本,A powerful media cache framework.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages