0

我正在使用MPMusicPlayerController播放 Apple Music 中的歌曲。我定期(每隔几秒钟)使用更改歌曲队列

setQueue(with: MPMusicPlayerStoreQueueDescriptor(storeIDs: ids))

我在播放音乐时没有任何问题,歌曲队列按要求更新,我可以跳到下一首歌曲,一切都很好。但是,每当我在歌曲中间暂停播放器时,请稍等片刻,直到设置新队列,然后再次播放 - 当前歌曲丢失,下一首歌曲开始播放!

所以想象以下情况:

  1. 我有歌曲A, B, C, D
  2. 我将其设置为歌曲队列并调用play()
  3. player.nowPlayingItem返回A
  4. E, F, G, H我在播放时将歌曲队列设置为
  5. 我打电话player.skipToNext()- 歌曲E按预期开始播放
  6. 我呼唤player.pause()——歌曲E停顿
  7. 我打电话player.play()- 歌曲E继续播放。到目前为止一切都很好
  8. player.pause()再次呼唤——歌曲E暂停
  9. 我将歌曲队列设置为I, J, K, L.
  10. 我打电话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
    }
}

奇怪的是,即使我在两者之间更改队列,从锁定屏幕暂停/播放也可以正常工作。

有没有人遇到过类似的问题,任何提示/解决方法如何解决这个问题?

4

1 回答 1

1

作为一种解决方法,我使用了

player.currentPlaybackRate = 1

而不是player.play(). 似乎play()不仅仅是从暂停的位置播放。

于 2019-09-23T20:18:56.987 回答