当每个项目在队列中结束时,我对avqueueplayer有一些问题,例如app冻结2-3秒。我正在使用队列播放器一个接一个地播放记录而没有间隙。为了实现无b / w玩家项目的差距,我需要提前加载玩家物品的资产。我为当前播放的玩家项目和下一个玩家项目加载资源,以便在第一个记录的末尾没有间隙。当第一个记录结束时,我将第二个玩家项目添加到队列玩家进行游戏,并为第三个玩家项目加载资源。
通过这种方式,我的玩家队列总是包含单个玩家项目,但是将对当前游戏项目和下一个游戏项目进行资源加载。随着新记录的添加,这将继续移动。
我发现在新的iOS设备中观察到半秒钟的冻结,在iPod 4等旧iPod设备中观察到大约3-4秒?
我可以知道如何实现无间隙且非冻结的UI体验吗?
由于
答案 0 :(得分:0)
尝试将您的要求提升到队列中只有一个玩家项目。
如果队列中的某个项目超出当前正在播放的项目,则AVQueuePlayer
将在项目转换时更有效地运行。
“加载”媒体可能意味着一些不同的事情,而且您不清楚自己在做什么。也许您正在下载AVFoundation以外的媒体,构建AVAsset
或构建AVPlayerItem
。您正在进行或推迟的工作将根据媒体的类型而变化(例如 mp4与HLS流)。即使您“预加载”所有内容(这对于HLS媒体来说要复杂得多),AVFoundation还有更多工作要做,直到将AVPlayerItem
放入播放器才会启动。它必须设置一个特定于它需要播放的媒体的渲染管道,然后开始渲染过程。 AVQueuePlayer
可以通过启动某个过程来实现无间隙播放,然后才能开始播放该项目。队列播放器对资源的使用也很有效,因为在它需要之前它不会开始加载远离队列的项目。