首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPMusicPlayerController无法播放苹果音乐歌曲

MPMusicPlayerController无法播放苹果音乐歌曲
EN

Stack Overflow用户
提问于 2020-12-17 05:16:57
回答 1查看 442关注 0票数 3

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

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

代码语言:javascript
复制
// 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

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

代码语言:javascript
复制
[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上播放音乐效果很好。

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

在此期间,我向Apple提交了一份TSI/bug报告。

EN

回答 1

Stack Overflow用户

发布于 2021-03-04 17:25:03

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

代码语言:javascript
复制
DispatchQueue.global(qos: .background).async {
player.prepareToPlay()
player.play()
}

现在这个问题有时可能仍然存在,但我发现把它移到后台线程会让它变得不那么乏味,也不那么频繁。此外,添加prepare to play似乎也能让它在99%的时间内正常工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65331231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档