前言
公司项目涉及音频开发,之前开发任务比较紧张,项目中app播放音频未做任何缓存以及其他优化.最近终于有时间优化,记录之.OK,进入正题~
方案
唱吧开源了其音视频缓存处理框架KTVHTTPCache, 由 HTTP Server 和 Data Storage 两大模块组成。前者负责与 Client 交互,后者负责资源加载及缓存处理。为方便拓展,Data Storage 为独立模块,也可直接与 Client 交互(例如可与 AVAssetResourceLoader 配合使用)。。
工作流程:
- Client 发出的请求被 HTTP Server 接收到,HTTP Server 通过分析 HTTP Request 创建用于访问 Data Storage 的 Data Request 对象。
- HTTP Server 使用 Data Request 创建 Data Reader,并以此作为从 Data Storage 获取数据的通道。
- Data Reader 分析 Data Request 中的 Range 创建对应的网络数据源 Data Network Source 和文件数据源 Data File Source,并通过 Data Sourcer 进行管理。
- Data Sourcer 开始加载数据。
- Data Reader 从 Data Sourcer 读取数据并通过 HTTP Server 回传给 Client。
缓存策略:
以网络使用最小化为原则,设计了分片加载数据的功能。有 Network Source 和 File Source 两种用于加载数据的 Source,分别用于下载网络数据和读取本地数据。通过分析 Data Request 的 Range 和本地缓存状态来对应创建。
豆瓣开源的流媒体播放器.使用起来比较简单,但是框架自身未做缓存处理,缓存部分由开发者实现.
此次采用以上两者结合的方案取代系统AVPlayer直接播放音频.
延伸
金山云ios平台http缓存SDK,可方便地与播放器集成,实现http视频边播放边下载(缓存)功能.我强烈怀疑这个框架是抄袭唱吧的KTVHTTPCache,因为KTVHTTPCache开源要早于ksyhttpcache_ios,且KTVHTTPCache开源了其所有源码,而金山的ksyhttpcache_ios不仅很多方法与KTVHTTPCache类似,而且依赖的第三方也雷同,最重要的是未开源其源码… 啧啧
FreeStreamer流媒体播放功能完善,性能也很好,自带缓存,算是一个可选方案.
音视频开发的路
还很漫长还有很多坑啊~