AVQueuePlayer实现无缝和非冻结播放的播放器项目

3
我遇到了一些关于AVQueuePlayer的问题,比如当队列中的每个项目结束时,应用程序会冻结2-3秒钟。我正在使用queueplayer按顺序播放记录,以避免间隙。为了实现无间隙的播放,需要提前加载播放器项目的资产。我为当前正在播放的播放器项目和下一个播放器项目加载资产,这样在第一条记录结束时就不会有间隙了。当第一条记录结束时,我将第二个播放器项目添加到队列播放器中并加载第三个播放器项目的资产。
通过这种方式,我的播放器队列始终只包含一个播放器项目,但资产加载将为当前正在播放的项目和下一个正在播放的项目完成。随着添加新记录,这将不断移动。
我发现在新的iOS设备上观察到了半秒钟的冻结,在旧的iPod设备(如iPod 4)上则是大约3-4秒钟?
请问我们如何实现无间隙且没有UI冻结的体验?谢谢
1个回答

0

尝试将您的要求提高到仅在队列中有一个播放器项。

如果在其队列中有除当前播放内容之外的项目,则 AVQueuePlayer 在项目转换时会更有效地运行。

“加载”媒体可能意味着几种不同的事情,而您正在做什么并不清楚。也许您正在 AVFoundation 之外下载媒体、构建 AVAsset 或构建 AVPlayerItem。您所做或推迟的工作将根据媒体类型(例如 mp4 对比 HLS 流)而异。即使您“预加载”了所有内容(这对于 HLS 媒体来说更加复杂),AVFoundation 仍然需要做更多的工作,直到 AVPlayerItem 被放入播放器才会开始。它必须设置特定于需要回放的媒体的渲染管道,然后开始渲染过程。AVQueuePlayer 可以通过在该项播放需要开始之前启动部分流程来实现无间隙播放。队列播放器还在其使用资源方面非常高效,它不会在需要时开始加载队列深处的项目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接