我可以在一个单例中初始化 AVQueuePlayer 和 AVPlayer 吗?

Can I have AVQueuePlayer and AVPlayer initialised in one singleton?

问题是关于概念而不是代码示例请求/

在我的应用程序中,我想要“播放相册”功能,我几乎实现了这个,但是我注意到用户可能会退出到不同的相册视图,例如在那里播放一首曲目,然后返回到上一个专辑队列。

那么我应该在同一个单例中添加单独的 AVPlayer 变量来播放单个曲目同时保持歌曲队列完好无损,还是完全放弃 AVPlayer 来播放音频并仅在队列上运行? 我的第一个挑战是在单例中实现多个功能是个坏主意(因此得名)。这里最好的用户体验是什么?

在 Apple Music 范例中,似乎将每张专辑都视为一个播放列表,并在队列的其余部分之前插入整个新专辑。

您可以在单例中初始化两者。如果你想保持 AVQueuePlayer 与现有歌曲队列的完整性,那么你可以在同一个单例中创建一个新的 AVPlayer 对象来播放单个请求。

您可以使用相同的 AVQueuePlayer 和项目数组中的一个新列表来代替上述方法,如下所示

//Save current player item details
var currentItem = avQueuePlayer.currentItem
CMTime currentTime = currentItem.currentTime

//Add new single song at last of queue and play
var lastItem = avQueuePlayer.items().last
let newItem = AVPlayerItem(URL: <URL>)
self.avQueuePlayer?.insert(newItem, after: lastItem)
lastItem = newItem

最后一首歌曲一结束,您就可以从队列中恢复保存的歌曲。

 self.avQueuePlayer.nowPlayingItem = currentItem

我只是提供一个想法。您可能需要做更多的修改。