IOS 音视频分片缓存库IdiotAVPlayer

第一篇自己的文章... 有点不知道怎么开始。

如果你只是来拿代码的,那给你地址IdiotAVPlayer

项目的名字叫IdiotAVplayer,但是大家别误会,Idiot不是说大家是蠢人,说的是俺自己,因为自己也看了不少大神们的开源项目,觉得他们的技术很牛✘,所以就把自己的库命名为Idiot开头。

还是先给大家看看效果吧,免得不是大家想要的东西,浪费大家的宝贵时间。


IdiotAVplayer效果图

本来想给大家看视频的,但是只支持腾讯和优酷,想看视频的点这里。

再来IdiotAVplayer实现了什么功能吧。

相信大家看完上面的图片,大概就知道IdiotAVplayer实现了怎样的功能了,主要就是在选择时间后(seek操作),之前加载的部分会被保存,下次打开会按需加载。本地有就从本地取,没有就从网络取(前提是服务器支持Rang,不然没法获取指定区间的数据)。目前为止,网上最多的关于缓存的文章就是AVAssetResourceLoader,但是绝大多数不能再seek动作之后继续缓存,每次seek之后整个音视频就从seek的时间开始了,seek之前的都作废。那么怎么才能实现一个分片缓存的播放器呢?

目前为止,就我搜索到的开源框架有唱吧团队提供的 KTVHTTPCache(可能还有其他的),是不错。但是大家有没有发现它很重,不够轻量。下面引用下唱吧github文章的一段

方案演进

在音视频缓存上,我们一共采用过如下 4 个方案:AVPlayer 纯在线播放。

AVPlayer + AVAssetResourceLoader + 下载模块。

AVPlayer + 一个开源的缓存项目(同样基于 AVAssetResourceLoader + 下载模块)。

AVPlayer + KTVHTTPCache。

方案 1 简单直接,缺点也不必多说。

方案 2 的下载模块设计的比较简单,只能顺序下载,不支持分片。导致只能 Seek 到已下载完的地方,在用户体验上会有较大的缺陷。

方案 3 在功能上已经可以满足需求,但在使用中问题较多,我们在源码基础上做了很多修改来填坑。但稳定性依然不是很理想,上线不长时间就将该功能下掉了。

方案 4 是唱吧现在的线上方案,目前在我们的使用场景中还没有发现问题。除稳定性的提升外,比较大的改进是增加了全路径的 Log 模块。若用户或测试同学遇到问题,只需简单描述并回传 Log,就可以快速定位到原因,大大提高了调试效率。

既然觉得唱吧框架很重,那就去寻求比较轻量级的解决方案。因为我开发的app也是重音视频业务的。造个轮子出来是一劳永逸的事情。

方案一是纯在线,略过。

方案二就是大家熟知的AVPlayer + AVAssetResourceLoader。这里我思考了下,既然通过自己的加载方式把数据返回给了AVAssetResourceLoader,那么就应该有办法保存那些已经下载的数据(IdiotAVPlayer就是基于这么个方案)。

原理图

IOS 音视频分片缓存库IdiotAVPlayer_第1张图片
IdiotAVPlayer原理

你可能感兴趣的:(IOS 音视频分片缓存库IdiotAVPlayer)