iOS AVPlayer 视频缓存

作者: taohailong | 来源:发表于2017-03-06 18:47 被阅读982次

        最近的项目中用到了视频播放的缓存技术,通俗的讲就是视频边下载边播放 已经下载的部分需要缓存起来,下次播放或者快进、快退或者无网络时到播放到缓存的部分可以直接播放不用下载。 

      找了一下相关的技术发现在iOS中官方支持的比较灵活能够自定义的也就是AVPlayer了,但是它所能支持的格式比不多,还好我的项目中够用了。当然还有其他的方式,比如Ijkplayer 但是它本身比不支持缓存,需要自己去添加,相比之下的难度大了不少。不过AVPlayer 也有先天的不足,后面会讲到。

在使用AVPlayer 之前我在网上找了很多的资料,可惜没有找到一个可以处理缓存碎片的方法。只能是自己去写一个了。缓存的难点在于碎片化,不是连续的中间需要去请求数据。要顺序操作下来。

最初我实际操作了一段时间发现只要完成下载后的数据 跟碎片数据段的融合,和对碎片数据段的读区两个算法这个方案就解决了,现在回头看看真是too young too simple ,后面AVPlayer 播放不流畅的坑耗费了我更多的时间。

当然 上面提到的两套算法是核心,关于如何对AVPlayer 使用缓存,不是本文介绍的重点请先熟悉它的流程。 首先如果没有缓存那就直接创建了比较简单。 把loader 下发的request 根据 它请求的区间段 利用前面提到的算法,返回一个 数组,里面是 @{start,end,isNull} 字典 数据的区间段,表明数据段的开始,截止,和是否储存,

然后加入到一个队列中(NSOperation),每一个数据段都创建一个NSOperation ,在NSOperation 中对已经下载的部分把数据取出来直接返回给request。对于没有下载的去下载,下载完成后用算法对碎片数据进行融合。

以上就是最基本的流程,比较让人头疼的是AVPlayer 的特性,比如视频已经是完整时,它下发的request 请求的是整个视频的数据,然后一次性把这些数据返回给它,会让播放器卡住 不再播放。可能是因为数据量比较大。AVPlayer 对播放器的状态 提示不是很清楚,而且很有限。

 好了先写这些   这是我项目的地址  感觉有用的记得给个星!

https://github.com/taohailong/AVPlayerCache.git

用pod添加

pod 'AVPlayerCacheLibrary', :git => 'https://github.com/taohailong/AVPlayerCache.git'

相关文章

  • iOS音频篇-AVPlayer

    iOS音频篇:使用AVPlayer播放网络音乐 iOS音频篇:AVPlayer的缓存实现

  • iOS AVPlayer 视频缓存

    最近的项目中用到了视频播放的缓存技术,通俗的讲就是视频边下载边播放 已经下载的部分需要缓存起来,下次播放或...

  • 可能是目前最好的 AVPlayer 音视频缓存方案 AVAsse

    可能是目前最好的 AVPlayer 音视频缓存方案 转自:【博客】 可下载:缓存视频播放demo地址 2017-0...

  • 技术集合

    相机开发 iOS开发--AVFoundation自定义相机 iOS视频播放AVPlayer的视频内容拉伸设置 状态...

  • avplayer

    参考1.iOS通过AVPlayer打造自己的视频播放器2.基于 AVPlayer 自定义播放器3.AVPlayer...

  • 传送门

    iOS音频篇:AVPlayer的缓存实现 iOS流媒体开发之二:滑动手势控制音量、亮度和进度 UI调试神器 for...

  • iOS 边下载边播放、支持多点下载播放器

    一、MPMoviePlayerController 和 AVPlayer 简介 iOS 9 之前通常播放音频、视频...

  • 使用 AVPlayer 进行多视频播放

    使用 AVPlayer 进行多视频播放 链接:http://ios.jobbole.com/84287/ 从前……...

  • AVPlayer那些坑

    AVPlayer是iOS上常用的视频播放器组件,支持常见的音视频格式。对于一般应用而言,使用AVPlayer和一套...

  • 2018-07-09(补)ios 视频播放

    ios 视频播放有以下4种方法: 1、AVPlayer 2、MPMoviePlayerController 3、M...

网友评论

本文标题:iOS AVPlayer 视频缓存

本文链接:https://www.haomeiwen.com/subject/lypugttx.html