有没有人知道,当当前项目即将结束播放时,AVQueuePlayer是否会开始缓冲下一个AVPlayerItem?
我知道文档中没有任何建议,我主要是问是否有人观察到了这种行为。
发布于 2011-01-07 20:13:57
好了,我已经再次检查了这个问题,并编写了一些代码来检查AVQueuePlayer。
jollyCocoa的回答给我指明了正确的方向,他建议观察AVPlayerItem上的status属性。然而,文档似乎并没有指出这个属性(特别是它的AVPlayerItemStatusReadyToPlay值)可能与缓冲有关。
但是,AVPlayerItem's loadedTimeRanges属性似乎更多地与缓冲有关。
在数组上做KVO有点棘手-数组对象本身不会改变,只有它的项改变-所以我求助于每秒打印出它的内容。
我发现,在队列的第一个项目中的几秒钟内,第二个项目的loadedTimeRanges显示了一个新的CMTimeRange,开始时间为0,持续时间较短。当前一个项目继续播放时,持续时间可以增加到60秒左右。
简短回答: AVQueuePlayer会在播放当前AVPlayerItem的同时缓冲下一个one。
发布于 2011-11-08 11:46:49
从iOS 5开始,AVQueuePlayer似乎不再预缓冲了。它确实预先缓冲了iOS 4中的下一首曲目。
我不确定为什么会有这样的改变,或者这是否苹果方面的故意行为,或者仅仅是一个bug。在任何情况下,这都是一件痛苦的事情,我将向他们提交一个关于它的bug。
发布于 2012-07-05 11:56:17
找到了解决办法!经过几个小时的搜索和失败的测试,我找到了一个可以在iOS 5和更高版本上运行的解决方案。
这将播放文件,中间没有任何延迟。如果你想在不同的文件之间切换,就不那么方便了,但肯定会帮你把所有东西放在一起。在添加AVURLAsset时,仍然可以跟踪每个文件的起始位置,保留CMTime变量,如下所示:
NSValue *toJumpTo = [NSValue valueWithCMTime:composition.duration];
[array addObject:toJumpTo];然后遍历数组,检查当前时间值并使用CMTimeCompare进行比较。
编辑:在web存档中可见的this page上找到(链接当前指向垃圾邮件)。
https://stackoverflow.com/questions/4218090
复制相似问题