我正在使用MPMusicPlayerController
播放 Apple Music 中的歌曲。我定期(每隔几秒钟)使用更改歌曲队列
setQueue(with: MPMusicPlayerStoreQueueDescriptor(storeIDs: ids))
我在播放音乐时没有任何问题,歌曲队列按要求更新,我可以跳到下一首歌曲,一切都很好。但是,每当我在歌曲中间暂停播放器时,请稍等片刻,直到设置新队列,然后再次播放 - 当前歌曲丢失,下一首歌曲开始播放!
所以想象以下情况:
- 我有歌曲
A, B, C, D
- 我将其设置为歌曲队列并调用
play()
player.nowPlayingItem
返回A
E, F, G, H
我在播放时将歌曲队列设置为- 我打电话
player.skipToNext()
- 歌曲E
按预期开始播放 - 我呼唤
player.pause()
——歌曲E
停顿 - 我打电话
player.play()
- 歌曲E
继续播放。到目前为止一切都很好 - 我
player.pause()
再次呼唤——歌曲E
暂停 - 我将歌曲队列设置为
I, J, K, L
. - 我打电话
player.play()
-我希望暂停的歌曲E
继续播放。相反,歌曲I
开始播放
我还为上述场景做了一些日志输出:
func togglePlayPause() {
if player.playbackState == .playing {
player.pause()
} else {
NSLog("NP before \(player.nowPlayingItem)") // prints E at step 10
player.play()
NSLog("NP after \(player.nowPlayingItem)") // prints nil at step 10
}
}
奇怪的是,即使我在两者之间更改队列,从锁定屏幕暂停/播放也可以正常工作。
有没有人遇到过类似的问题,任何提示/解决方法如何解决这个问题?