边下边播技术实现

445 阅读2分钟

1.可以提升用户体验,为用户节省网络流量
2.不会因为网络环境的不稳定而导致最近已经播放过的歌曲,播放失败
3.产品可能对播放的原理不太清楚,需要研发告知这一优化点,以及优化完的效果

手动设置AVURLAsset的代理,将原来系统内部实现的播放缓存机制拦截,自己实现下载,并且做本地缓存 需要解决的问题: 下载完的数据,怎么回传给播放器? 回传的时候,播放器怎么知道应该填充到数据的那个range里面, 而且异步回调的话,每个分片回调过来的时间不一样,怎么进行数据的拼接?

自定义一个LoadingRequest继承自系统的AVAssetResourceLoadingRequest,添加属性记录当前填充数据的begin和end位置,currentOffset以及requestedOffset和requestedLength, 每个分片过来的时候,判断是需要拼接还是需要替换.

数据模块的重构: 1.具体请求写在控制器里面,导致控制器臃肿,代码复用率低 2.如果数据的规则发生变化,需要改动太大(比如需要排序,需要按照规则就行数据的筛选) 3.请求的加解密共用一套逻辑,不利于将来一个项目接入不一样的服务系统(加解密规则可能不一样)

实现细节: 1.封装一个请求的基类RequestBase 2.每一个模块有自己的请求类RequestA集成基类,自己的请求类可以重写加解密的方法 3.每个模块对外开发一个业务实体类, 在拿到request的数据后,按照规则对数据进行处理,然后返回给客户端