MPMusicPlayerController无法播放Apple Music歌曲



我正在使用MPMusicPlayerController.systemMusicPlayer的实例将存储ID的数组排入队列。这已经奏效好几个月了。今天早些时候,我更新到了iOS 14.3,现在播放器无法播放歌曲。

下面的代码是复制错误所需的最小数量:

// note: repo using any play method you want
let player = MPMusicPlayerController.systemMusicPlayer
let descriptor: MPMusicPlayerStoreQueueDescriptor?
func setup() {
let storeIDs: [String] = ["lorem", "ipsum"] // fetch real IDs from the API
descriptor = MPMusicPlayerStoreQueueDescriptor(queue: storeIDs)
}
func play() {
self.player.setQueue(with: descriptor!)
self.player.play()
}
// Expected: plays song with store ID "lorem"
// Actual: app freezes and I see error logs

当我播放一首歌时,应用程序没有播放,而是完全冻结(这意味着它不会对用户交互做出响应(,我看到以下日志:

[SDKPlayback] ASYNC-WATCHDOG-1: Attempting to wake up the remote process
[SDKPlayback] SYNC-WATCHDOG-1: Attempting to wake up the remote process
[SDKPlayback] ASYNC-WATCHDOG-2: Tearing down connection
[SDKPlayback] SYNC-WATCHDOG-2: Tearing down connection

MPMusicPlayerController在iOS 14.2上播放音乐非常好。

有人能证实或阐明这里发生了什么吗?

在此期间,我向苹果公司提交了一份TSI/错误报告。

我可以确认问题仍然存在,但在进行了一些测试后,我发现它实际上是在阻止主线程执行。因此,一个至少对我有效的变通方法是在后台线程中执行播放函数,如下所示:

DispatchQueue.global(qos: .background).async {
player.prepareToPlay()
player.play()
}

现在这个问题有时可能仍然存在,但我发现将它移到后台线程会减少繁琐和频繁。此外,添加准备游戏似乎也能使其在99%的时间内发挥作用。

最新更新