实现视频缓存的方法有很多,常规的方法是创建AVResourceManager实现AVResourceLoader协议,添加loadingRequest到网络文件加载器,然后各种协议各种代理各种判断,复杂,没理清楚容易出错。这种方式的好处就是可控性强,能方便且准确的添加和隐藏loading动画。
AVPlayer可以通过视频的本地路径或者网络路径URL-->AVAsset -->AVPlayerItem -->AVPlayer来初始化,然后我们可以通过利用KVO来监听这个AVPlayerItem的几个关键字status、loadedTimeRanges、playbackBufferEmpty、playbackLikelyToKeepUp(播放状态、加载进度、缓冲不足播放、缓存足够播放)来控制播放器的Loading动画、本地缓存操作。具体看 demo
PS:这种处理方式的特点是视频全部加载完才能本地储存(加载完100%后playItem完整,然后把playItem转换成想要的视频格式存入本地),没办法先缓冲部分然后再断点续传,适合短视频