VIMediaCache
VIMediaCache copied to clipboard
支持简单的 Cache 策略
看了下实现,没有找到哪里支持下面的缓存策略:
- 最大缓存 size;
- 达到最大缓存限制后的替换策略。
VICacheManager.h
里面有提供计算缓存大小以及基础的清除缓存的方法。
- 这个需求你可以通过计算缓存大小,如果得到的缓存大小超过你的预期就清除。
- 这个我想你说的是类似 LRU 的缓存机制,可以根据缓存的使用情况和缓存时间,清除那些老的和不经常使用的缓存。目前优先级比较高的是解决播放上的问题,并且已经有简单的缓存清理,所以对缓存完善上的支持预计没那么快
对,我说的替换策略就是指的 LRU 或者 FIFO。 有空我提下 pr 吧。
赞。
如果要实现你想要的策略,我这边的思路是每次使用和保存缓存的时候,需要用 VICacheConfiguration 记录时间,之后通过遍历已缓存的文件的 VICacheConfiguration 信息,然后拿它的时间做比较再去做具体的缓存清理策略。
如果你有更好的策略可以忽略我所说的内容
嗯,这个功能不是那么紧急,所以你要是有时间也可以先提 pr 哈不用管我。 😆
我想的另一个思路是粒度更粗一点,以文件为单位来清楚缓存,以文件的创建时间/修改时间
来作为优先级。每次 finishWritting
的时候才做一次检查和清理,降低频度。
这样可能不用增加 VICacheConfiguration 的职责和功能,实现起来更简单。
这个思路不知道是否合适。
另外,不知道你有使用过 iOS 10 新出的 AVAssetDownloadURLSession 没,这个需要服务端支持 HTTP Live Stream。如果 server 可以很好的支持 HTTP Live Stream,系统提供的方案应该更优。
如果是已经缓存好的文件,之后再访问的话,也是不会修改的,所以想用修改时间
作为判断条件,不知道是否可行。
AVAssetDownloadURLSession
这个多谢分享,看了一下它的用法,应该是不能拿来用的哈。看了它的 API,不能支持从中间开始下载的方式,并且 delegate 里没有回调 data 数据,它只是一个下载器,最后把下载好的数据放到私有 bundle 地址。不能满足 AVAssetResourceLoader
需要不断接收 Data 数据的要求。