音频播放(边下边播)

  • 资源请求者 AVURLAsset,根据stream URL (http的URL要转为流URL)创建
    资源的请求下载由请求者的resourceLoader的代理完成

  • 资源组织者 AVPlayerItem,根据资源请求者AVURLAsset创建

  • 资源的播放需要等资源组织者AVPlayerItem组织好数据(监听)

  • 边下边播就是自己创建请求者AVURLAsset的代理去下载数据,缓存数据,把下载完成数据抛给播放器,而不用系统代理处理

  • 只要播放器想要播放某个资源,就会让资源组织者,命令资源请求者,调用shouldWaitForLoadingOfRequestedResource方法,去发送请求

    - (BOOL)resourceLoader:(AVAssetResourceLoader *)resourceLoader shouldWaitForLoadingOfRequestedResource:(AVAssetResourceLoadingRequest *)loadingRequest
    

把请求放到数组中(有序)
根据请求获取URL地址并转换回http地址

获取请求的位置:
如果加载请求的数据请求的当前位置不等于0,请求的位置就是数据请求的当前位置,否则就是数据请求的请求位置

下载数据:懒加载一个下载器对象,代理为当前对象
1、根据URL判断缓存中是否存在已下载完成的数据,存在则直接响应数据
2、如果下载器还没有已下载的数据,下载器开始从0开始下载
3、如果请求的位置小于下载器当前正在下载的位置 或者 大于正在下载的位置+一个兼容大小,下载器从0开始下载
4、如果请求的数据,就在正在下载以内,把正在下载数据当中符合条件的data 抛给播放器

注:下载的时候不能用stream格式的URL,要转回http才能下载

你可能感兴趣的:(音频播放(边下边播))