iOS 分享一个边播边缓存的库(支持VOD和HLS)
2020/6/12 23:26:18
本文主要是介绍iOS 分享一个边播边缓存的库(支持VOD和HLS),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
SJMediaCacheServer
SJMediaCacheServer 是一个 iOS 端的 HTTP 媒体数据缓存框架. 播放器向本地 HTTP 代理服务器发送播放请求后, 会查询本地缓存, 如不存在缓存, 则进行下载并返回给播放器.
主要特点
- 支持缓存 VOD 和 HLS 等类型的资源.
- 支持预加载 (预缓存).
安装
pod 'SJUIKit/SQLite3', :podspec => 'https://gitee.com/changsanjiang/SJUIKit/raw/master/SJUIKit-YYModel.podspec' pod 'SJMediaCacheServer' 复制代码
快速开始
- 导入头文件
#import <SJMediaCacheServer/SJMediaCacheServer.h> 复制代码
- 获取播放地址
调用以下方法将原始地址进行转换. 当存在缓存时, 将返回本地文件的播放地址.
// [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 也是可以的.
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日志
开启后, 控制台将输出log, 这个仅在 Debug 模式下有效, Release 模式不会产生任何 log.
SJMediaCacheServer.shared.enabledConsoleLog = YES; 复制代码
预加载 (预缓存)
提前加载某个资源.
// 获取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
同一个资源可能对应不同的URL, 可以设置以下block, 返回该资源的标识, 相同的标识将使用相同的缓存:
SJMediaCacheServer.shared.resolveResourceIdentifier = ^NSString * _Nonnull(NSURL * _Nonnull URL) { NSString *identifier = URL.absoluteString; return identifier; }; 复制代码
- 对缓存的数据做加解密操作
如有特殊需求, 可对读取和写入的缓存数据进行一些操作
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; }; 复制代码
Feedback
- GitHub : changsanjiang
- Email : changsanjiang@gmail.com
- QQGroup: 930508201
Reference
-
KTVHTTPCache - KTVHTTPCache is a powerful media cache framework. It can cache HTTP request, and very suitable for media resources.
-
tools.ietf.org/html/rfc723…
这篇关于iOS 分享一个边播边缓存的库(支持VOD和HLS)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-10-05Swift语法学习--基于协议进行网络请求
- 2022-08-17Apple开发_Swift语言地标注释
- 2022-07-24Swift 初见
- 2022-05-22SwiftUI App 支持多语种 All In One
- 2022-05-10SwiftUI 组件参数简写 All In One
- 2022-04-14SwiftUI 学习笔记
- 2022-02-23Swift 文件夹和文件操作
- 2022-02-17Swift中使用KVO
- 2022-02-08Swift 汇编 String array
- 2022-01-30SwiftUI3.0页面反向传值