SJMediaCacheServer 是一个 iOS 端的 HTTP 媒体数据缓存框架. 播放器向本地 HTTP 代理服务器发送播放请求后, 会查询本地缓存, 如不存在缓存, 则进行下载并返回给播放器.html
pod 'SJUIKit/SQLite3', :podspec => 'https://gitee.com/changsanjiang/SJUIKit/raw/master/SJUIKit-YYModel.podspec'
pod 'SJMediaCacheServer'
复制代码
#import <SJMediaCacheServer/SJMediaCacheServer.h>
复制代码
调用如下方法将原始地址进行转换. 当存在缓存时, 将返回本地文件的播放地址.git
// [NSURL URLWithString:@"https://.../video.m3u8"];
// [NSURL URLWithString:@"https://.../audio.mp3"];
// 原始地址
NSURL *URL = [NSURL URLWithString:@"https://.../video.mp4"];
// 实际播放地址
NSURL *playbackURL = [SJMediaCacheServer.shared playbackURLWithURL:URL];
复制代码
这里使用 AVPlayer 进行播放, 正常来讲使用第三方的播放器 SDK 也是能够的.github
AVPlayer *player = [AVPlayer playerWithURL:playbackURL];
[player player];
复制代码
SJMediaCacheServer.shared.cacheCountLimit = 20;
复制代码
// 单位是秒, 这里设置为保留24小时
SJMediaCacheServer.shared.maxDiskAgeForCache = 24 * 60 * 60;
复制代码
// 单位是字节, 这里设置为缓存最大占用 1G
SJMediaCacheServer.shared.maxDiskSizeForCache = 1 * 1024 * 1024 * 1024;
复制代码
// 单位是字节, 这里设置为保留剩余空间 1G
SJMediaCacheServer.shared.reservedFreeDiskSpace = 1 * 1024 * 1024 * 1024;
复制代码
[SJMediaCacheServer.shared removeAllCaches];
复制代码
开启后, 控制台将输出log, 这个仅在 Debug 模式下有效, Release 模式不会产生任何 log.缓存
SJMediaCacheServer.shared.enabledConsoleLog = YES;
复制代码
提早加载某个资源.ruby
// 获取task, 在不须要时取消任务.
id<MCSPrefetchTask> task = [SJMediaCacheServer.shared prefetchWithURL:URL preloadSize:20 * 1024 * 1024 progress:^(float progress) {
NSLog(@"%lf", progress);
} completed:^(NSError * _Nullable error) {
NSLog(@"%@", error);
}];
// 不须要时取消该任务
[task cancel];
复制代码
以下方式, 为每一个下载请求添加自定义的请求头:服务器
SJMediaCacheServer.shared.requestHandler = ^NSMutableURLRequest * _Nullable(NSMutableURLRequest * _Nonnull request) {
[request addValue:@"value1" forHTTPHeaderField:@"header filed1"];
[request addValue:@"value2" forHTTPHeaderField:@"header filed2"];
return request;
};
复制代码
同一个资源可能对应不一样的URL, 能够设置如下block, 返回该资源的标识, 相同的标识将使用相同的缓存:框架
SJMediaCacheServer.shared.resolveResourceIdentifier = ^NSString * _Nonnull(NSURL * _Nonnull URL) {
NSString *identifier = URL.absoluteString;
return identifier;
};
复制代码
若有特殊需求, 可对读取和写入的缓存数据进行一些操做ide
SJMediaCacheServer.shared.writeDataEncoder = ^NSData * _Nonnull(NSURLRequest * _Nonnull request, NSUInteger offset, NSData * _Nonnull data) {
// data 将会被写入到缓存
return data;
};
SJMediaCacheServer.shared.readDataDecoder = ^NSData * _Nonnull(NSURLRequest * _Nonnull request, NSUInteger offset, NSData * _Nonnull data) {
// 该 data 来源于本地缓存
return data;
};
复制代码
KTVHTTPCache - KTVHTTPCache is a powerful media cache framework. It can cache HTTP request, and very suitable for media resources.fetch