文章来源:淘论文网   发布者: 毕业设计   浏览量: 50



还可以点击去查询以下关键词:
[AVPlaye]    [毕业]    [视频]    [缓存]    [iOS AVPlaye毕业r 视频缓存]   

项目介绍:

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

      找了一下相关的技术发现在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'


这里还有:


还可以点击去查询:
[AVPlaye]    [毕业]    [视频]    [缓存]    [iOS AVPlaye毕业r 视频缓存]   

请扫码加微信 微信号:sj52abcd


下载地址: http://www.taolw.com/down/6526.docx
  • 上一篇:数字字母定制键盘
  • 下一篇:再发一次我的类似QQ,微信的弹出框架