使用AVQueuePlayer播放播放器项目的无缝和非冻结

时间:2013-09-11 08:07:10

标签: ios avqueueplayer

当每个项目在队列中结束时,我对avqueueplayer有一些问题,例如app冻结2-3秒。我正在使用队列播放器一个接一个地播放记录而没有间隙。为了实现无b / w玩家项目的差距,我需要提前加载玩家物品的资产。我为当前播放的玩家项目和下一个玩家项目加载资源,以便在第一个记录的末尾没有间隙。当第一个记录结束时,我将第二个玩家项目添加到队列玩家进行游戏,并为第三个玩家项目加载资源。

通过这种方式,我的玩家队列总是包含单个玩家项目,但是将对当前游戏项目和下一个游戏项目进行资源加载。随着新记录的添加,这将继续移动。

我发现在新的iOS设备中观察到半秒钟的冻结,在iPod 4等旧iPod设备中观察到大约3-4秒?

我可以知道如何实现无间隙且非冻结的UI体验吗?

由于

1 个答案:

答案 0 :(得分:0)

尝试将您的要求提升到队列中只有一个玩家项目。

如果队列中的某个项目超出当前正在播放的项目,则AVQueuePlayer将在项目转换时更有效地运行。

“加载”媒体可能意味着一些不同的事情,而且您不清楚自己在做什么。也许您正在下载AVFoundation以外的媒体,构建AVAsset或构建AVPlayerItem。您正在进行或推迟的工作将根据媒体的类型而变化(例如 mp4与HLS流)。即使您“预加载”所有内容(这对于HLS媒体来说要复杂得多),AVFoundation还有更多工作要做,直到将AVPlayerItem放入播放器才会启动。它必须设置一个特定于它需要播放的媒体的渲染管道,然后开始渲染过程。 AVQueuePlayer可以通过启动某个过程来实现无间隙播放,然后才能开始播放该项目。队列播放器对资源的使用也很有效,因为在它需要之前它不会开始加载远离队列的项目。