# native_video_cache
**Repository Path**: kayouyou/native_video_cache
## Basic Information
- **Project Name**: native_video_cache
- **Description**: Native Video Cache 是一个 Flutter 插件,旨在为 iOS 和 Android 平台提供高效的视频缓存功能。它底层利用了成熟的原生缓存库,并通过 Pigeon 生成的统一 Dart API 层,为开发者提供了一致的调用体验。
- **Primary Language**: Dart
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-06-05
- **Last Updated**: 2025-06-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Native Video Cache - Flutter 视频缓存插件
Native Video Cache 是一个 Flutter 插件,为 iOS 和 Android 平台提供高效的视频缓存功能。它基于成熟的原生缓存库(iOS: KTVHTTPCache,Android: AndroidVideoCache),通过 Pigeon 生成统一的 Dart API。
## 📋 版本兼容性
| 组件 | 版本要求 |
|------|----------|
| **Flutter** | >= 3.3.0 |
| **Dart** | >= 2.17.0 < 4.0.0 |
| **iOS** | >= 10.0 |
| **Android** | >= API 21 (Android 5.0) |
### 依赖库版本
- **iOS**: KTVHTTPCache (内置)
- **Android**: AndroidVideoCache v2.7.1 (via JitPack)
- **Pigeon**: ^17.1.2
### Demo功能对比
| 功能 | VideoPlayerDemo | OptimizedCacheDemo | 优势 |
|------|----------------|-------------------|------|
| 视频播放 | ✅ | ✅ | 相同 |
| 缓存管理 | ✅ | ✅ | 更智能 |
| 错误处理 | ✅ | ✅ | 更详细 |
| 状态管理 | 基础 | 统一管理 | 更可靠 |
| 性能监控 | 无 | ✅ | 新增 |
| 配置管理 | 基础 | 分层配置 | 更灵活 |
| 依赖注入 | 无 | ✅ | 更可测试 |
| 多视频管理 | 无 | ✅ | 新增 |
## ✨ 核心特性
### 🎯 基础功能
- ✅ 支持 iOS 和 Android 平台
- ✅ 视频边下边播(流式缓存)
- ✅ 可配置的缓存大小和缓存策略
- ✅ 实时获取视频缓存状态和进度
- ✅ 支持预缓存(后台下载)
- ✅ 清理指定或所有缓存
- ✅ 支持HTTP和HTTPS视频源
- ✅ 多种视频格式支持(MP4、M3U8、HLS等)
- ✅ 线程安全的并发缓存管理
### 🛡️ 企业级功能 (v0.0.2+)
- ✅ **AppLifecycleManager**: APP生命周期管理,自动处理前后台切换
- ✅ **CacheMemoryManager**: LRU内存管理,防止内存泄漏
- ✅ **CacheStabilityManager**: 自动重试机制和异常恢复
- ✅ **CachePerformanceMonitor**: 性能监控和健康检查
### 🚀 最新优化 (v0.0.4)
- ✅ **依赖注入架构**: 解除硬编码依赖,提高可测试性
- ✅ **统一状态管理**: `CacheStateManager`统一管理所有缓存状态
- ✅ **智能错误处理**: 结构化错误分类和自动重试
- ✅ **分层配置系统**: 支持全局、性能、网络、安全四层配置
- ✅ **内存泄漏修复**: 完全解决资源清理问题
- ✅ **OptimizedCacheDemo**: 优化的演示应用,可完全替代VideoPlayerDemo
## 🚀 快速开始
### 第一步:添加依赖
在 `pubspec.yaml` 文件中添加插件依赖:
```yaml
dependencies:
native_video_cache:
git:
url: https://github.com/YOUR_USERNAME/YOUR_REPOSITORY_NAME.git
path: packages/native_video_cache
```
然后运行:
```bash
flutter pub get
```
### 第二步:Android 配置
#### 1. 添加网络权限
在 `android/app/src/main/AndroidManifest.xml` 中添加:
```xml
...
```
#### 2. 添加Maven仓库
在 `android/build.gradle` 中添加:
```gradle
allprojects {
repositories {
maven { url "https://jitpack.io" }
maven { url 'https://maven.aliyun.com/repository/public' }
google()
mavenCentral()
}
}
```
在 `android/settings.gradle` 中添加:
```gradle
pluginManagement {
repositories {
maven { url "https://jitpack.io" }
maven { url 'https://maven.aliyun.com/repository/public' }
google()
mavenCentral()
gradlePluginPortal()
}
}
```
### 第三步:初始化并使用
#### 基础使用
```dart
import 'package:native_video_cache/native_video_cache.dart';
// 1. 初始化
await NativeVideoCacheManager.initialize(
CacheConfig(maxCacheSize: 1024 * 1024 * 1024), // 1GB
);
// 2. 获取代理URL用于播放器
String proxyUrl = await NativeVideoCacheManager.getProxyUrl(originalUrl);
// 3. 用于视频播放器
VideoPlayerController.network(proxyUrl);
```
#### v0.0.4 优化用法
```dart
// 使用优化的演示应用(完全替代VideoPlayerDemo)
OptimizedCacheDemo(
videoUrl: 'https://example.com/video.mp4',
title: '我的视频',
)
// 或多视频管理模式
OptimizedCacheDemo() // 不传参数进入管理模式
```
#### 企业级配置 (v0.0.4)
```dart
// 1. 配置系统
const configuration = CacheConfiguration(
global: GlobalConfig(
maxCacheSize: 2 * 1024 * 1024 * 1024, // 2GB
enableDebugLogging: true,
),
performance: PerformanceConfig(
maxConcurrentDownloads: 5,
maxActiveListeners: 100,
),
network: NetworkConfig(
maxRetryAttempts: 3,
enableBackgroundCaching: true,
),
);
// 2. 初始化
CacheConfigurationManager.instance.initialize(configuration);
CacheStateManager.instance.initialize();
await NativeVideoCacheManager.initialize(
CacheConfig(maxCacheSize: configuration.global.maxCacheSize),
);
```
## 📖 详细使用指南
### 缓存管理
```dart
// 主动开始缓存
await NativeVideoCacheManager.startCache(originalUrl);
// 停止缓存
await NativeVideoCacheManager.stopCache(originalUrl);
// 检查是否已缓存
bool isCached = await NativeVideoCacheManager.isCached(originalUrl);
// 获取缓存信息
CacheInfo info = await NativeVideoCacheManager.getCacheInfo(originalUrl);
```
### 监听缓存状态
```dart
// 监听进度
NativeVideoCacheManager.addProgressListener((url, progress) {
print('缓存进度: $url -> ${(progress * 100).toStringAsFixed(1)}%');
});
// 监听状态变化
NativeVideoCacheManager.addStatusListener((url, status) {
print('缓存状态: $url -> $status');
});
// 监听错误
NativeVideoCacheManager.addErrorListener((url, error) {
print('缓存错误: $url -> $error');
});
// 重要:清理监听器
@override
void dispose() {
NativeVideoCacheManager.clearAllListeners();
super.dispose();
}
```
### 缓存清理
```dart
// 清理指定URL的缓存
await NativeVideoCacheManager.clearCache(originalUrl);
// 清理所有缓存
await NativeVideoCacheManager.clearAllCache();
// 获取总缓存大小
int totalSize = await NativeVideoCacheManager.getTotalCacheSize();
```
## 🏗️ 底层实现
### iOS - KTVHTTPCache
- 通过本地HTTP代理服务器工作
- 提供精确的字节级进度追踪
- 支持预加载和断点续传
- 成熟稳定,广泛应用于大型APP
### Android - AndroidVideoCache
- 同样使用本地HTTP代理机制
- 轻量级且易于集成
- **注意**: 缓存进度为估算值,可能不如iOS精确
- 缓存是"惰性"的,在播放器请求时才开始
### 统一接口层 - Pigeon
使用 Google Pigeon 工具生成类型安全的平台绑定代码,确保:
- Dart API 在两个平台上表现一致
- 类型安全的跨平台通信
- 统一的错误处理机制
## 🛠️ 高级功能
### 企业级管理器组合 (v0.0.2+)
```dart
import 'package:native_video_cache/native_video_cache.dart';
// 初始化所有增强管理器
Future initializeEnterpriseFeatures() async {
// 1. 核心缓存系统
await NativeVideoCacheManager.initialize(
CacheConfig(maxCacheSize: 2048 * 1024 * 1024),
);
// 2. 生命周期管理
AppLifecycleManager.instance.initialize();
// 3. 内存管理
CacheMemoryManager.instance.initialize(
maxUrls: 200,
maxMemoryUsage: 100 * 1024 * 1024,
);
// 4. 稳定性管理
await CacheStabilityManager.instance.initialize(
maxRetries: 5,
retryDelay: Duration(seconds: 3),
);
// 5. 性能监控
CachePerformanceMonitor.instance.initialize();
}
// 获取综合报告
void generateReport() {
final performanceReport = CachePerformanceMonitor.instance.getPerformanceReport();
final memoryReport = CacheMemoryManager.instance.getMemoryReport();
final healthReport = CacheStabilityManager.instance.getHealthReport();
print('成功率: ${(performanceReport['overallSuccessRate'] * 100).toStringAsFixed(1)}%');
print('内存使用: ${memoryReport['memoryUsage']} bytes');
print('重试次数: ${healthReport['retriedTasks']}');
}
```
## 📊 性能特征
### 缓存效率
- **iOS**: 精确的字节级进度追踪
- **Android**: 高效的代理缓存机制,进度为估算值
- **内存占用**: 低内存占用,主要缓存存储在磁盘
- **网络优化**: 支持断点续传和分片下载
### 并发支持
- 默认支持最多3个并发下载任务
- 可通过配置调整并发数量
- 智能队列管理,避免网络拥塞
## 🔧 最佳实践
### 🧠 智能缓存策略详解
Native Video Cache 采用**四层智能缓存架构**,提供企业级的缓存管理能力:
#### 1. 基础缓存策略层
```dart
final config = CacheConfig(
maxCacheSize: 2 * 1024 * 1024 * 1024, // 2GB 智能空间管理
maxConcurrentDownloads: 3, // 并发控制,防止带宽拥堵
connectTimeout: 15 * 1000, // 15秒 连接超时
readTimeout: 30 * 1000, // 30秒 读取超时
);
await NativeVideoCacheManager.initialize(config);
```
**核心特性**:
- ✅ **边下边播**: 流式缓存,无需等待完整下载
- ✅ **透明代理**: 播放器无感知,自动缓存
- ✅ **多格式支持**: MP4、M3U8、HLS等智能识别
- ✅ **带宽优化**: 智能并发控制,避免网络拥塞
#### 2. APP生命周期智能管理
```dart
// 自动管理缓存的生命周期行为
AppLifecycleManager.instance.initialize();
// 配置选项
AppLifecycleManager.instance.enableBackgroundCaching = true;
AppLifecycleManager.instance.backgroundTimeout = Duration(minutes: 5);
```
**智能策略**:
- 🔋 **前台模式**: 全速缓存,最佳用户体验
- 🔋 **后台模式**: 智能降速,节省电量和流量
- ⏰ **超时保护**: 后台5分钟后自动暂停缓存
- 🚀 **快速恢复**: 前台切换时毫秒级恢复所有缓存任务
#### 3. LRU内存智能管理
```dart
// 智能内存管理,防止内存泄漏
CacheMemoryManager.instance.initialize(
maxUrls: 100, // 最大缓存状态数
maxMemoryUsage: 50 * 1024 * 1024, // 50MB内存限制
);
```
**LRU策略**:
- 📊 **自动淘汰**: 最近最少使用的缓存状态自动清理
- 🚨 **压力检测**: 内存使用过高时主动清理
- ⏰ **定时维护**: 每2分钟清理过期监听器
- 🎯 **精准控制**: 智能限制活跃监听器数量
#### 4. 智能重试与稳定性管理
```dart
// 自动重试机制,提升缓存成功率
await CacheStabilityManager.instance.initialize(
maxRetries: 3, // 最大重试次数
retryDelay: Duration(seconds: 30), // 重试间隔
);
```
**重试策略**:
- 🔄 **指数退避**: 30秒→60秒→120秒递增延迟
- 🎯 **智能重试**: 只重试有希望恢复的任务
- 📊 **自动放弃**: 3次失败后停止,避免资源浪费
- 🔍 **故障分析**: 记录失败原因,便于问题诊断
#### 5. 性能智能监控
```dart
// 实时性能监控和优化建议
CachePerformanceMonitor.instance.initialize();
// 获取性能报告
final report = CachePerformanceMonitor.instance.getPerformanceReport();
print('缓存成功率: ${(report['overallSuccessRate'] * 100).toStringAsFixed(1)}%');
print('平均下载速度: ${report['averageSpeed']} KB/s');
```
**监控特性**:
- 📈 **实时统计**: 下载速度、成功率、错误分析
- 🎯 **智能调优**: 根据网络状况动态调整策略
- 📝 **性能报告**: 每分钟生成详细分析报告
- 🔍 **异常检测**: 提前发现潜在的缓存问题
#### 6. 综合智能策略示例
```dart
// 完整的智能缓存初始化
Future setupIntelligentCaching() async {
// 1. 基础缓存配置
await NativeVideoCacheManager.initialize(CacheConfig(
maxCacheSize: 2 * 1024 * 1024 * 1024, // 2GB
maxConcurrentDownloads: 3, // 适中并发
connectTimeout: 15 * 1000, // 15秒超时
readTimeout: 30 * 1000, // 30秒读取
));
// 2. 生命周期智能管理
AppLifecycleManager.instance
..initialize()
..enableBackgroundCaching = true // 允许后台缓存
..backgroundTimeout = Duration(minutes: 5); // 5分钟后台超时
// 3. 内存智能管理
CacheMemoryManager.instance.initialize(
maxUrls: 200, // 200个URL状态
maxMemoryUsage: 100 * 1024 * 1024, // 100MB内存限制
);
// 4. 稳定性管理
await CacheStabilityManager.instance.initialize(
maxRetries: 5, // 5次重试
retryDelay: Duration(seconds: 3), // 3秒间隔
);
// 5. 性能监控
CachePerformanceMonitor.instance.initialize();
print('🎯 智能缓存系统初始化完成');
}
// 智能缓存使用
Future playVideoWithIntelligentCache(String videoUrl) async {
try {
// 注册到生命周期管理
AppLifecycleManager.instance.registerActiveUrl(videoUrl);
// 注册到稳定性管理(自动重试)
CacheStabilityManager.instance.registerCacheTask(videoUrl);
// 获取代理URL(自动启用所有智能策略)
final proxyUrl = await NativeVideoCacheManager.getProxyUrl(videoUrl);
// 使用代理URL播放视频
// videoPlayer.setUrl(proxyUrl);
print('✅ 智能缓存已启用: $proxyUrl');
} catch (e) {
print('❌ 缓存启动失败: $e');
}
}
```
#### 🏆 智能优势对比
| 特性 | 传统缓存 | Native Video Cache智能策略 |
|------|---------|---------------------------|
| **缓存模式** | 预加载全部 | ✅ **边下边播**,智能流式缓存 |
| **内存管理** | 手动释放 | ✅ **LRU自动**清理,内存压力检测 |
| **生命周期** | 无感知 | ✅ **智能省电**,后台自动降级 |
| **错误处理** | 用户重试 | ✅ **自动重试**,指数退避算法 |
| **性能监控** | 无监控 | ✅ **实时监控**,智能调优建议 |
| **资源控制** | 无限制 | ✅ **智能并发**控制,防止拥堵 |
这套四层智能架构确保了**高性能、低资源消耗、高稳定性**的视频缓存体验!
### 生命周期管理
```dart
class VideoPlayerPage extends StatefulWidget {
@override
_VideoPlayerPageState createState() => _VideoPlayerPageState();
}
class _VideoPlayerPageState extends State {
@override
void dispose() {
// 清理监听器避免内存泄漏
NativeVideoCacheManager.clearAllListeners();
super.dispose();
}
}
```
### 预缓存策略
```dart
// WiFi环境下预缓存
Future preloadVideos(List urls) async {
for (String url in urls) {
try {
await NativeVideoCacheManager.startCache(url);
await Future.delayed(Duration(seconds: 1)); // 避免网络拥塞
} catch (e) {
print('预缓存失败: $url');
}
}
}
```
## 🐛 故障排除
### 常见问题
#### Android构建失败
**问题**: 找不到AndroidVideoCache依赖
**解决**: 确保添加了JitPack仓库到 `build.gradle` 和 `settings.gradle`
#### 缓存进度不准确
**问题**: Android端进度显示异常
**解决**: 这是正常现象,Android端进度为估算值,建议以缓存状态为准
#### 内存泄漏
**问题**: 应用内存持续增长
**解决**: 确保在Widget dispose时调用 `clearAllListeners()`
### 调试技巧
```dart
// 启用详细日志
if (kDebugMode) {
NativeVideoCacheManager.addProgressListener((url, progress) {
debugPrint('缓存进度: $url -> $progress');
});
NativeVideoCacheManager.addErrorListener((url, error) {
debugPrint('缓存错误: $url -> $error');
});
}
```
## 📈 版本更新
最新版本的详细更改请查看 [CHANGELOG.md](CHANGELOG.md)
### 主要版本里程碑
- **v0.0.1**: 初始版本,基础缓存功能
- **v0.0.2**: 添加企业级管理器(生命周期、内存、稳定性、性能监控)
- **v0.0.3**: 修复管理器问题,添加完整测试套件
- **v0.0.4**: 架构重构,依赖注入,统一状态管理,内存泄漏修复
## 📚 示例项目
完整的示例项目位于 `example/` 目录:
```bash
cd example
flutter run
```
示例包含:
- 基础缓存功能演示
- 视频播放器集成
- 缓存状态监听
- 批量预缓存
- 优化架构演示 (OptimizedCacheDemo)
## ⚠️ 注意事项
### 平台差异
- **Android**: 缓存进度为估算值,可能不够精确
- **iOS**: 提供精确的进度追踪
- **通用**: HLS直播流不支持缓存(仅支持点播)
### 性能限制
- 建议单个视频文件不超过2GB
- 并发下载数量建议不超过5个
- 在低性能设备上建议降低并发数量
### 网络要求
- 需要稳定的网络连接
- 支持HTTP/HTTPS协议
- 某些CDN可能有防盗链限制
## 🤝 贡献
欢迎社区贡献!
1. 提交Issue描述问题
2. Fork项目并创建特性分支
3. 提交Pull Request
## 📄 许可证
本项目采用MIT许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
## 💡 支持
如果这个插件对你有帮助,请给我们一个⭐️!
有问题或建议?请在GitHub上提交Issue。