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