我正在使用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 connectionMPMusicPlayerController在iOS 14.2上播放音乐效果很好。
有人能证实或阐明这里发生了什么吗?
在此期间,我向Apple提交了一份TSI/bug报告。
发布于 2021-03-04 17:25:03
我可以确认这个问题仍然存在,但在做了一些测试后,我发现它实际上正在做的是阻塞主线程的执行。因此,一个至少对我有效的变通方法是在后台线程中执行play函数,如下所示:
DispatchQueue.global(qos: .background).async {
player.prepareToPlay()
player.play()
}现在这个问题有时可能仍然存在,但我发现把它移到后台线程会让它变得不那么乏味,也不那么频繁。此外,添加prepare to play似乎也能让它在99%的时间内正常工作。
https://stackoverflow.com/questions/65331231
复制相似问题